From 29a45fc645831a94d9ccf4028d91ec662f800085 Mon Sep 17 00:00:00 2001 From: Antonio Date: Thu, 22 Aug 2024 08:22:34 +0100 Subject: [PATCH 01/59] [ResponseOps] Fix scss deprecation issue (#190948) Fixes #190927 ## Summary This pr fixes a small deprecation issue after the SASS upgrade. I opted into the new syntax. --- .../src/add_message_variables/add_message_variables.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/kbn-alerts-ui-shared/src/add_message_variables/add_message_variables.scss b/packages/kbn-alerts-ui-shared/src/add_message_variables/add_message_variables.scss index 521d0f399b19b..d53223bd6ad0d 100644 --- a/packages/kbn-alerts-ui-shared/src/add_message_variables/add_message_variables.scss +++ b/packages/kbn-alerts-ui-shared/src/add_message_variables/add_message_variables.scss @@ -1,5 +1,6 @@ .messageVariablesPanel { - @include euiYScrollWithShadows; max-height: $euiSize * 20; max-width: $euiSize * 20; + + @include euiYScrollWithShadows; } \ No newline at end of file From 3ac931fb796b2053c68b454804e643788dc598d9 Mon Sep 17 00:00:00 2001 From: Aleh Zasypkin Date: Thu, 22 Aug 2024 09:48:35 +0200 Subject: [PATCH 02/59] fix(security, http): expose authentication headers in the authentication result when HTTP authentication is used (#190998) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary When Kibana tries to authenticate a request that already has an `Authorization` header (not a cookie, client certificate, or Kerberos ticket), the authentication is performed by the [HTTP authentication provider](https://www.elastic.co/guide/en/kibana/current/kibana-authentication.html#http-authentication). Unlike session/Kerberos/PKI providers, this provider returns an authentication result that doesn't explicitly tell Core which authorization headers should be used (e.g., `t.authenticated({ state: authenticationResult.user, --> requestHeaders: authenticationResult.authHeaders <-- ... });`), assuming that Core will just use the headers from the request. The `Authorization` header is forwarded to Elasticsearch by default, no additional configuration is required. This worked well previously, but I think with the introduction of the the [`getSecondaryAuthHeaders`](https://github.com/elastic/kibana/pull/184901) method this is the first time where this assumption doesn't hold. Internally, this method tries to reuse authentication headers that were provided to Core by the authentication provider during the request authentication stage — headers that the HTTP authentication provider never provided before. This PR makes the HTTP authentication provider behave consistently with the rest of the providers we support today. --- .../authentication/providers/http.test.ts | 32 +++++++++---------- .../server/authentication/providers/http.ts | 6 +++- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/x-pack/plugins/security/server/authentication/providers/http.test.ts b/x-pack/plugins/security/server/authentication/providers/http.test.ts index 90ff62294ff3f..d599b6be2d9c3 100644 --- a/x-pack/plugins/security/server/authentication/providers/http.test.ts +++ b/x-pack/plugins/security/server/authentication/providers/http.test.ts @@ -133,10 +133,10 @@ describe('HTTPAuthenticationProvider', () => { }); await expect(provider.authenticate(request)).resolves.toEqual( - AuthenticationResult.succeeded({ - ...user, - authentication_provider: { type: 'http', name: 'http' }, - }) + AuthenticationResult.succeeded( + { ...user, authentication_provider: { type: 'http', name: 'http' } }, + { authHeaders: { authorization: header } } + ) ); expectAuthenticateCall(mockOptions.client, { headers: { authorization: header } }); @@ -160,10 +160,10 @@ describe('HTTPAuthenticationProvider', () => { }); await expect(provider.authenticate(request)).resolves.toEqual( - AuthenticationResult.succeeded({ - ...user, - authentication_provider: { type: 'http', name: 'http' }, - }) + AuthenticationResult.succeeded( + { ...user, authentication_provider: { type: 'http', name: 'http' } }, + { authHeaders: { authorization: header } } + ) ); expectAuthenticateCall(mockOptions.client, { headers: { authorization: header } }); @@ -187,10 +187,10 @@ describe('HTTPAuthenticationProvider', () => { }); await expect(provider.authenticate(request)).resolves.toEqual( - AuthenticationResult.succeeded({ - ...user, - authentication_provider: { type: 'http', name: 'http' }, - }) + AuthenticationResult.succeeded( + { ...user, authentication_provider: { type: 'http', name: 'http' } }, + { authHeaders: { authorization: header } } + ) ); expectAuthenticateCall(mockOptions.client, { headers: { authorization: header } }); @@ -217,10 +217,10 @@ describe('HTTPAuthenticationProvider', () => { }); await expect(provider.authenticate(request)).resolves.toEqual( - AuthenticationResult.succeeded({ - ...user, - authentication_provider: { type: 'http', name: 'http' }, - }) + AuthenticationResult.succeeded( + { ...user, authentication_provider: { type: 'http', name: 'http' } }, + { authHeaders: { authorization: header } } + ) ); expectAuthenticateCall(mockOptions.client, { headers: { authorization: header } }); diff --git a/x-pack/plugins/security/server/authentication/providers/http.ts b/x-pack/plugins/security/server/authentication/providers/http.ts index e23ec826ed2e1..ab7971871c704 100644 --- a/x-pack/plugins/security/server/authentication/providers/http.ts +++ b/x-pack/plugins/security/server/authentication/providers/http.ts @@ -113,7 +113,11 @@ export class HTTPAuthenticationProvider extends BaseAuthenticationProvider { return AuthenticationResult.notHandled(); } - return AuthenticationResult.succeeded(user); + return AuthenticationResult.succeeded(user, { + // Even though the `Authorization` header is already present in the HTTP headers of the original request, + // we still need to expose it to the Core authentication service for consistency. + authHeaders: { authorization: authorizationHeader.toString() }, + }); } catch (err) { this.logger.debug( () => From 2d44619f07daefba27b019a7dbb8ed12a5d4e3dc Mon Sep 17 00:00:00 2001 From: florent-leborgne Date: Thu, 22 Aug 2024 10:28:39 +0200 Subject: [PATCH 03/59] [Docs] Reorder What's new (#190976) ## Summary This PR updates the structure and ordering of the What's new document for 8.15 and deletes some duplicate entries ![Whats New Guide](https://github.com/user-attachments/assets/34b76d60-467f-44cb-b0d6-b6408872dddf) image image image --- docs/user/whats-new.asciidoc | 121 ++++++++++++++--------------------- 1 file changed, 49 insertions(+), 72 deletions(-) diff --git a/docs/user/whats-new.asciidoc b/docs/user/whats-new.asciidoc index 3410a889c8f26..2a726ba3dc4f3 100644 --- a/docs/user/whats-new.asciidoc +++ b/docs/user/whats-new.asciidoc @@ -7,28 +7,44 @@ check the <>. Previous versions: {kibana-ref-all}/8.14/whats-new.html[8.14] | {kibana-ref-all}/8.13/whats-new.html[8.13] | {kibana-ref-all}/8.12/whats-new.html[8.12] | {kibana-ref-all}/8.11/whats-new.html[8.11] | {kibana-ref-all}/8.10/whats-new.html[8.10] | {kibana-ref-all}/8.9/whats-new.html[8.9] | {kibana-ref-all}/8.8/whats-new.html[8.8] | {kibana-ref-all}/8.7/whats-new.html[8.7] | {kibana-ref-all}/8.6/whats-new.html[8.6] | {kibana-ref-all}/8.5/whats-new.html[8.5] | {kibana-ref-all}/8.4/whats-new.html[8.4] | {kibana-ref-all}/8.3/whats-new.html[8.3] | {kibana-ref-all}/8.2/whats-new.html[8.2] | {kibana-ref-all}/8.1/whats-new.html[8.1] | {kibana-ref-all}/8.0/whats-new.html[8.0] - [discrete] -=== Analyst Experience +=== ES|QL [discrete] -==== View dashboard creator and last editor +==== Filter UX improvements in ES|QL -You can now see who created and who last updated a dashboard. +We're thrilled to unveil a complete overhaul of filtering in the ES|QL UX. Now, you can seamlessly filter data by browsing a time series chart, allowing for quick and intuitive time-based filtering. Interactive chart filtering lets you refine your data directly by clicking on any chart, while creating WHERE clause filters from the Discover table or sidebar has never been easier. These enhancements streamline data exploration and analysis, making your ES|QL experience more efficient and user-friendly than ever. -You can find the creator information right from the dashboard list. +*Filter by clicking a chart:* -image::images/dashboard-creator.png[Dashboard creator column in dashboard list] +image::https://images.contentstack.io/v3/assets/bltefdd0b53724fa2ce/blt965a5190f246f7c8/669a7d41e5f7c84793b031cb/filter-by-clicking-chart.gif[Filter by clicking a chart] -Quickly find all dashboards created by the same user with a simple filter. +*Filter by browsing a time series chart:* -image::images/dashboard-creator-filter.png[Filtering dashboards by creator] +image::https://images.contentstack.io/v3/assets/bltefdd0b53724fa2ce/blta20c9a93dded707c/669a7d40843f93a02fe51013/filter-by-brushing-time-series.gif[Filter by browsing a time series chart] -Note that the creator information will be visible only for dashboards created on or after version 8.14. +*Create WHERE clause filters from Discover table or sidebar:* -You can also see who last updated a dashboard by clicking the dashboard information icon from the dashboard list. The creator is also visible next to it. This information is immutable and cannot be changed. +image::https://images.contentstack.io/v3/assets/bltefdd0b53724fa2ce/blt50ac35ab3af29ff8/669a7d4006a6fafe4c7cb39d/create-where-clause-filters-from-sidebar.gif[Create WHERE clause filters from Discover table or sidebar] + + +[discrete] +==== Field statistics in ES|QL + +Field statistics are now available in ES|QL. This feature is designed to provide comprehensive insights for each data field. With this enhancement, you can access detailed statistics such as distributions, averages, and other key metrics, helping you quickly understand your data. This makes data exploration and quality assessment more efficient, providing deeper insights and streamlining the analysis of field-level data in ES|QL. + +image::images/field-statistics-esql.png[Field statistics in ES|QL] + +[discrete] +==== Integrations support in the ES|QL editor when using FROM command. + +We're excited to announce enhanced support for integrations in the ES|QL editor with the *FROM* command. Previously, you could only access indices, but now you can also view a list of installed integrations directly within the editor. This improvement streamlines your workflow, making it easier to manage and utilize various integrations while working with your data. + +image::images/integrations-in-esql.png[Accessing an integration from ES|QL] -image::images/dashboard-last-editor.png[Dashboard details panel with the name of the last editor] + +[discrete] +=== Dashboards [discrete] ==== Field statistics in Dashboards @@ -48,50 +64,36 @@ You can find the option to select statistics for your legends along with an expl image::images/statistics-in-legends2.png[Select statistics in legends] -[discrete] -==== Array of values for Metrics - -The new **Metrics** now supports fields that show an array of values. - -image::images/array-in-metrics.png[A metric showing an array of values, width=35%] [discrete] -==== Push flyout for Discover document viewer +==== View dashboard creator and last editor -You can now seamlessly view document details and the main table simultaneously in **Discover** with the new _push_ flyout. You can adjust the width of the flyout to suit your needs and explore your data much more easily. +You can now see who created and who last updated a dashboard. -image::https://images.contentstack.io/v3/assets/bltefdd0b53724fa2ce/bltb40a408acf4ab688/669a58ea9fecd85219d58ed2/discover-push-flyout.gif[Resizable push flyout in Discover] +You can find the creator information right from the dashboard list. -[discrete] -==== Integrations support in the ES|QL editor when using FROM command. +image::images/dashboard-creator.png[Dashboard creator column in dashboard list] -We're excited to announce enhanced support for integrations in the ES|QL editor with the *FROM* command. Previously, you could only access indices, but now you can also view a list of installed integrations directly within the editor. This improvement streamlines your workflow, making it easier to manage and utilize various integrations while working with your data. +Quickly find all dashboards created by the same user with a simple filter. -image::images/integrations-in-esql.png[Accessing an integration from ES|QL] +image::images/dashboard-creator-filter.png[Filtering dashboards by creator] -[discrete] -==== Field statistics in ES|QL +Note that the creator information will be visible only for dashboards created on or after version 8.14. -Field statistics are now available in ES|QL. This feature is designed to provide comprehensive insights for each data field. With this enhancement, you can access detailed statistics such as distributions, averages, and other key metrics, helping you quickly understand your data. This makes data exploration and quality assessment more efficient, providing deeper insights and streamlining the analysis of field-level data in ES|QL. +You can also see who last updated a dashboard by clicking the dashboard information icon from the dashboard list. The creator is also visible next to it. This information is immutable and cannot be changed. -image::images/field-statistics-esql.png[Field statistics in ES|QL] +image::images/dashboard-last-editor.png[Dashboard details panel with the name of the last editor] [discrete] -==== Filter UX improvements in ES|QL - -We're thrilled to unveil a complete overhaul of filtering in the ES|QL UX. Now, you can seamlessly filter data by browsing a time series chart, allowing for quick and intuitive time-based filtering. Interactive chart filtering lets you refine your data directly by clicking on any chart, while creating WHERE clause filters from the Discover table or sidebar has never been easier. These enhancements streamline data exploration and analysis, making your ES|QL experience more efficient and user-friendly than ever. +=== Discover -*Filter by clicking a chart:* - -image::https://images.contentstack.io/v3/assets/bltefdd0b53724fa2ce/blt965a5190f246f7c8/669a7d41e5f7c84793b031cb/filter-by-clicking-chart.gif[Filter by clicking a chart] - -*Filter by browsing a time series chart:* +[discrete] +==== Push flyout for Discover document viewer -image::https://images.contentstack.io/v3/assets/bltefdd0b53724fa2ce/blta20c9a93dded707c/669a7d40843f93a02fe51013/filter-by-brushing-time-series.gif[Filter by browsing a time series chart] +You can now seamlessly view document details and the main table simultaneously in **Discover** with the new _push_ flyout. You can adjust the width of the flyout to suit your needs and explore your data much more easily. -*Create WHERE clause filters from Discover table or sidebar:* +image::https://images.contentstack.io/v3/assets/bltefdd0b53724fa2ce/bltb40a408acf4ab688/669a58ea9fecd85219d58ed2/discover-push-flyout.gif[Resizable push flyout in Discover] -image::https://images.contentstack.io/v3/assets/bltefdd0b53724fa2ce/blt50ac35ab3af29ff8/669a7d4006a6fafe4c7cb39d/create-where-clause-filters-from-sidebar.gif[Create WHERE clause filters from Discover table or sidebar] [discrete] === Alerting, cases, and connectors @@ -134,20 +136,6 @@ Analyze large volumes of logs efficiently, in very short times with Log Pattern image::https://images.contentstack.io/v3/assets/bltefdd0b53724fa2ce/blt7e63d7e764ab183e/669a807bd316c7015db35458/ml-log-pattern-analysis.gif[New log pattern analysis interface] -[discrete] -==== ES|QL support for field statistics in Discover - -The Field statistics functionality now supports ES|QL, Elastic's primary query language. - -image::images/esql-field-statistics.png[Field statistics in ES|QL] - -[discrete] -==== Field statistics embeddable panel in Dashboards - -You can now add field statistics panels with ES|QL support straight within your dashboards, eliminating the need to transition between **Discover** and **Dashboards**. - -image::images/field-statistics-panel-in-dashboards.png[Field statistics embeddable panel in Dashboards] - [discrete] ==== Log Rate Analysis contextual insights in serverless Observability @@ -156,42 +144,31 @@ You can now see insights in natural language, for example for the root cause of image::images/obs-log-rate-analysis-insigths.png[Log Rate Analysis contextual insights in serverless Observability] [discrete] -==== Anthropic integration with the Inference API +==== Inference API improvements -The inference API provides a seamless, intuitive interface to perform inference and other tasks against proprietary, hosted, and integrated external services. In 8.15, we're extending it to support Anthropic's chat completion API. +The inference API provides a seamless, intuitive interface to perform inference and other tasks against proprietary, hosted, and integrated external services. In 8.15, we're extending it with the following capabilities: -[discrete] -==== Support for reranking with the Inference API +* Support for Anthropic's chat completion API. +* Ability to host cross encoder models and perform the reranking task. -In 8.15, we're also extending the inference API with the ability to host cross encoder models in Elastic and perform the reranking task. [discrete] -=== Global Experience +=== Managing {kib} users and objects [discrete] -==== Simplified Sharing +==== Sharing improvements -You can now share a dashboard, search, or lens object in one click. When sharing an object, the most common actions are directly presented to you, and a short link is automatically generated, making it simpler than ever to share your work. +You can now share a dashboard, search, or Lens object in one click. When sharing an object, the most common actions are directly presented to you, and a short link is automatically generated, making it simpler than ever to share your work. image::images/share-modal.png[New object share modal, width=50%] [discrete] -==== “My dashboards” filter - -The days of manually scrolling through an endless list of dashboards are behind you. You can now filter by creator to go directly to the dashboards created by a specific teammate. - -NOTE: Only dashboards created on or after 8.14 will have a creator. - -[discrete] -==== Quick API keys +==== Quick API key creation Many API keys don’t require custom settings, so we made it simple to generate a standard key. From the **Endpoints & API keys** top menu in Search, you can create a key in seconds. image::images/create-simple-api-key.png[Shortcut to create an API key, width=60%] -[discrete] -=== Platform Security - [discrete] ==== Filtering by User in Kibana Audit Logs From a04e5f94e4ba00808d2e9337689c87faa8fe0627 Mon Sep 17 00:00:00 2001 From: Yngrid Coello Date: Thu, 22 Aug 2024 11:06:42 +0200 Subject: [PATCH 04/59] [Dataset quality] Use dockerized package registry in api tests (#190688) Closes https://github.com/elastic/kibana/issues/189802. This PR aims to use a dockerized package registry version for testing. In order to test it locally you have to set the value of `FLEET_PACKAGE_REGISTRY_PORT` env var in your terminal, and you also need to have a docker daemon running. For example, you can open a terminal and start the server ``` node x-pack/plugins/observability_solution/dataset_quality/scripts/api --server ``` then open a new terminal set the var value and start the runner with the specific test using this configuration ``` export set FLEET_PACKAGE_REGISTRY_PORT=12345 node x-pack/plugins/observability_solution/dataset_quality/scripts/api --runner --grep-files=integrations ``` If you want to test again without the dockerized version, you should remove the value of the var ``` unset FLEET_PACKAGE_REGISTRY_PORT ``` --- .../dataset_quality/README.md | 15 +++++++ .../common/config.ts | 45 +++++++++++++++---- .../fixtures/package_registry_config.yml | 2 + .../integration_dashboards.spec.ts | 43 ++++++------------ .../tests/integrations/integrations.spec.ts | 33 +++----------- .../tests/integrations/package_utils.ts | 24 +++++----- 6 files changed, 85 insertions(+), 77 deletions(-) create mode 100644 x-pack/test/dataset_quality_api_integration/common/fixtures/package_registry_config.yml diff --git a/x-pack/plugins/observability_solution/dataset_quality/README.md b/x-pack/plugins/observability_solution/dataset_quality/README.md index 25f01ceb6fa60..32218e9982b6e 100755 --- a/x-pack/plugins/observability_solution/dataset_quality/README.md +++ b/x-pack/plugins/observability_solution/dataset_quality/README.md @@ -50,6 +50,21 @@ node x-pack/plugins/observability_solution/dataset_quality/scripts/api --server node x-pack/plugins/observability_solution/dataset_quality/scripts/api --runner --grep-files=data_stream_settings.spec.ts ``` +### Using dockerized package registry + +For tests using package registry we have enabled a configuration that uses a dockerized lite version to execute the tests in the CI, this will reduce the flakyness of them when calling the real endpoint. + +To be able to run this version locally you must have a docker daemon running in your systema and set `FLEET_PACKAGE_REGISTRY_PORT` env var. In order to set this variable execute + +``` +export set FLEET_PACKAGE_REGISTRY_PORT=12345 +``` + +To unset the variable, and run the tests against the real endpoint again, execute + +``` +unset FLEET_PACKAGE_REGISTRY_PORT +``` ### Functional Tests diff --git a/x-pack/test/dataset_quality_api_integration/common/config.ts b/x-pack/test/dataset_quality_api_integration/common/config.ts index e297d8eaf0354..3807addecbc71 100644 --- a/x-pack/test/dataset_quality_api_integration/common/config.ts +++ b/x-pack/test/dataset_quality_api_integration/common/config.ts @@ -5,24 +5,26 @@ * 2.0. */ +import { LogLevel, LogsSynthtraceEsClient, createLogger } from '@kbn/apm-synthtrace'; +import { createDatasetQualityUsers } from '@kbn/dataset-quality-plugin/server/test_helpers/create_dataset_quality_users'; import { - DatasetQualityUsername, DATASET_QUALITY_TEST_PASSWORD, + DatasetQualityUsername, } from '@kbn/dataset-quality-plugin/server/test_helpers/create_dataset_quality_users/authentication'; -import { createDatasetQualityUsers } from '@kbn/dataset-quality-plugin/server/test_helpers/create_dataset_quality_users'; -import { FtrConfigProviderContext } from '@kbn/test'; +import { FtrConfigProviderContext, defineDockerServersConfig } from '@kbn/test'; +import path from 'path'; import supertest from 'supertest'; -import { format, UrlObject } from 'url'; -import { createLogger, LogLevel, LogsSynthtraceEsClient } from '@kbn/apm-synthtrace'; +import { UrlObject, format } from 'url'; +import { dockerImage } from '../../fleet_api_integration/config.base'; +import { DatasetQualityFtrConfigName } from '../configs'; +import { createDatasetQualityApiClient } from './dataset_quality_api_supertest'; import { FtrProviderContext, InheritedFtrProviderContext, InheritedServices, } from './ftr_provider_context'; -import { createDatasetQualityApiClient } from './dataset_quality_api_supertest'; -import { RegistryProvider } from './registry'; -import { DatasetQualityFtrConfigName } from '../configs'; import { PackageService } from './package_service'; +import { RegistryProvider } from './registry'; export interface DatasetQualityFtrConfig { name: DatasetQualityFtrConfigName; @@ -84,19 +86,41 @@ export function createTestConfig( const { license, name, kibanaConfig } = config; return async ({ readConfigFile }: FtrConfigProviderContext) => { + const packageRegistryConfig = path.join(__dirname, './fixtures/package_registry_config.yml'); const xPackAPITestsConfig = await readConfigFile( require.resolve('../../api_integration/config.ts') ); + const dockerArgs: string[] = ['-v', `${packageRegistryConfig}:/package-registry/config.yml`]; + const services = xPackAPITestsConfig.get('services'); const servers = xPackAPITestsConfig.get('servers'); const kibanaServer = servers.kibana as UrlObject; const kibanaServerUrl = format(kibanaServer); const esServer = servers.elasticsearch as UrlObject; + /** + * This is used by CI to set the docker registry port + * you can also define this environment variable locally when running tests which + * will spin up a local docker package registry locally for you + * if this is defined it takes precedence over the `packageRegistryOverride` variable + */ + const dockerRegistryPort: string | undefined = process.env.FLEET_PACKAGE_REGISTRY_PORT; + return { testFiles: [require.resolve('../tests')], servers, + dockerServers: defineDockerServersConfig({ + registry: { + enabled: !!dockerRegistryPort, + image: dockerImage, + portInContainer: 8080, + port: dockerRegistryPort, + args: dockerArgs, + waitForLogLine: 'package manifests loaded', + waitForLogLineTimeoutMs: 60 * 2 * 10000, // 2 minutes + }, + }), servicesRequiredForTestAnalysis: ['datasetQualityFtrConfig', 'registry'], services: { ...services, @@ -157,6 +181,11 @@ export function createTestConfig( kbnTestServer: { ...xPackAPITestsConfig.get('kbnTestServer'), serverArgs: [ + `--xpack.fleet.packages.0.name=endpoint`, + `--xpack.fleet.packages.0.version=latest`, + ...(dockerRegistryPort + ? [`--xpack.fleet.registryUrl=http://localhost:${dockerRegistryPort}`] + : []), ...xPackAPITestsConfig.get('kbnTestServer.serverArgs'), ...(kibanaConfig ? Object.entries(kibanaConfig).map(([key, value]) => diff --git a/x-pack/test/dataset_quality_api_integration/common/fixtures/package_registry_config.yml b/x-pack/test/dataset_quality_api_integration/common/fixtures/package_registry_config.yml new file mode 100644 index 0000000000000..1885fa5c2ebe5 --- /dev/null +++ b/x-pack/test/dataset_quality_api_integration/common/fixtures/package_registry_config.yml @@ -0,0 +1,2 @@ +package_paths: + - /packages/package-storage diff --git a/x-pack/test/dataset_quality_api_integration/tests/integrations/integration_dashboards.spec.ts b/x-pack/test/dataset_quality_api_integration/tests/integrations/integration_dashboards.spec.ts index 4481e0120c8b4..63b1b029acdeb 100644 --- a/x-pack/test/dataset_quality_api_integration/tests/integrations/integration_dashboards.spec.ts +++ b/x-pack/test/dataset_quality_api_integration/tests/integrations/integration_dashboards.spec.ts @@ -8,25 +8,14 @@ import expect from '@kbn/expect'; import { DatasetQualityApiClientKey } from '../../common/config'; import { FtrProviderContext } from '../../common/ftr_provider_context'; -import { installPackage, IntegrationPackage, uninstallPackage } from './package_utils'; +import { installPackage, uninstallPackage } from './package_utils'; export default function ApiTest({ getService }: FtrProviderContext) { const registry = getService('registry'); const supertest = getService('supertest'); const datasetQualityApiClient = getService('datasetQualityApiClient'); - const integrationPackages: IntegrationPackage[] = [ - { - // with dashboards - name: 'postgresql', - version: '1.19.0', - }, - { - // without dashboards - name: 'apm', - version: '8.4.2', - }, - ]; + const integrationPackages = ['nginx', 'apm']; async function callApiAs(integration: string) { const user = 'datasetQualityLogsUser' as DatasetQualityApiClientKey; @@ -43,13 +32,11 @@ export default function ApiTest({ getService }: FtrProviderContext) { registry.when('Integration dashboards', { config: 'basic' }, () => { describe('gets the installed integration dashboards', () => { before(async () => { - await Promise.all( - integrationPackages.map((pkg: IntegrationPackage) => installPackage({ supertest, pkg })) - ); + await Promise.all(integrationPackages.map((pkg) => installPackage({ supertest, pkg }))); }); it('returns a non-empty body', async () => { - const resp = await callApiAs(integrationPackages[0].name); + const resp = await callApiAs(integrationPackages[0]); expect(resp.body).not.empty(); }); @@ -57,20 +44,20 @@ export default function ApiTest({ getService }: FtrProviderContext) { const expectedResult = { dashboards: [ { - id: 'postgresql-158be870-87f4-11e7-ad9c-db80de0bf8d3', - title: '[Logs PostgreSQL] Overview', + id: 'nginx-023d2930-f1a5-11e7-a9ef-93c69af7b129', + title: '[Metrics Nginx] Overview', }, { - id: 'postgresql-4288b790-b79f-11e9-a579-f5c0a5d81340', - title: '[Metrics PostgreSQL] Database Overview', + id: 'nginx-046212a0-a2a1-11e7-928f-5dbe6f6f5519', + title: '[Logs Nginx] Access and error logs', }, { - id: 'postgresql-e4c5f230-87f3-11e7-ad9c-db80de0bf8d3', - title: '[Logs PostgreSQL] Query Duration Overview', + id: 'nginx-55a9e6e0-a29e-11e7-928f-5dbe6f6f5519', + title: '[Logs Nginx] Overview', }, ], }; - const resp = await callApiAs(integrationPackages[0].name); + const resp = await callApiAs(integrationPackages[0]); expect(resp.body).to.eql(expectedResult); }); @@ -78,7 +65,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { const expectedResult = { dashboards: [], }; - const resp = await callApiAs(integrationPackages[1].name); + const resp = await callApiAs(integrationPackages[1]); expect(resp.body).to.eql(expectedResult); }); @@ -92,11 +79,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { after( async () => - await Promise.all( - integrationPackages.map((pkg: IntegrationPackage) => - uninstallPackage({ supertest, pkg }) - ) - ) + await Promise.all(integrationPackages.map((pkg) => uninstallPackage({ supertest, pkg }))) ); }); }); diff --git a/x-pack/test/dataset_quality_api_integration/tests/integrations/integrations.spec.ts b/x-pack/test/dataset_quality_api_integration/tests/integrations/integrations.spec.ts index ee8c392e75317..13011410a0317 100644 --- a/x-pack/test/dataset_quality_api_integration/tests/integrations/integrations.spec.ts +++ b/x-pack/test/dataset_quality_api_integration/tests/integrations/integrations.spec.ts @@ -12,7 +12,6 @@ import { CustomIntegration, installCustomIntegration, installPackage, - IntegrationPackage, uninstallPackage, } from './package_utils'; @@ -21,23 +20,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const datasetQualityApiClient = getService('datasetQualityApiClient'); - const integrationPackages: IntegrationPackage[] = [ - { - // logs based integration - name: 'system', - version: '1.0.0', - }, - { - // logs based integration - name: 'apm', - version: '8.0.0', - }, - { - // non-logs based integration - name: 'synthetics', - version: '1.0.0', - }, - ]; + const integrationPackages = ['system', 'apm', 'endpoint', 'synthetics']; const customIntegrations: CustomIntegration[] = [ { @@ -67,9 +50,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { registry.when('Integration', { config: 'basic' }, () => { describe('gets the installed integrations', () => { before(async () => { - await Promise.all( - integrationPackages.map((pkg: IntegrationPackage) => installPackage({ supertest, pkg })) - ); + await Promise.all(integrationPackages.map((pkg) => installPackage({ supertest, pkg }))); }); it('returns only log based integrations and its datasets map', async () => { @@ -77,20 +58,18 @@ export default function ApiTest({ getService }: FtrProviderContext) { expect(resp.body.integrations.map((integration) => integration.name)).to.eql([ 'apm', + 'endpoint', 'system', ]); expect(resp.body.integrations[0].datasets).not.empty(); expect(resp.body.integrations[1].datasets).not.empty(); + expect(resp.body.integrations[2].datasets).not.empty(); }); after( async () => - await Promise.all( - integrationPackages.map((pkg: IntegrationPackage) => - uninstallPackage({ supertest, pkg }) - ) - ) + await Promise.all(integrationPackages.map((pkg) => uninstallPackage({ supertest, pkg }))) ); }); @@ -121,7 +100,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { customIntegrations.map((customIntegration: CustomIntegration) => uninstallPackage({ supertest, - pkg: { name: customIntegration.integrationName, version: '1.0.0' }, + pkg: customIntegration.integrationName, }) ) ) diff --git a/x-pack/test/dataset_quality_api_integration/tests/integrations/package_utils.ts b/x-pack/test/dataset_quality_api_integration/tests/integrations/package_utils.ts index ae2b9a01fa475..8d9dd9d1b051d 100644 --- a/x-pack/test/dataset_quality_api_integration/tests/integrations/package_utils.ts +++ b/x-pack/test/dataset_quality_api_integration/tests/integrations/package_utils.ts @@ -7,11 +7,6 @@ import { Agent as SuperTestAgent } from 'supertest'; -export interface IntegrationPackage { - name: string; - version: string; -} - export interface CustomIntegration { integrationName: string; datasets: IntegrationDataset[]; @@ -42,12 +37,19 @@ export async function installPackage({ pkg, }: { supertest: SuperTestAgent; - pkg: IntegrationPackage; + pkg: string; }) { - const { name, version } = pkg; + const { + body: { + item: { latestVersion: version }, + }, + } = await supertest + .get(`/api/fleet/epm/packages/${pkg}`) + .set('kbn-xsrf', 'xxxx') + .send({ force: true }); return supertest - .post(`/api/fleet/epm/packages/${name}/${version}`) + .post(`/api/fleet/epm/packages/${pkg}/${version}`) .set('kbn-xsrf', 'xxxx') .send({ force: true }); } @@ -57,9 +59,7 @@ export async function uninstallPackage({ pkg, }: { supertest: SuperTestAgent; - pkg: IntegrationPackage; + pkg: string; }) { - const { name, version } = pkg; - - return supertest.delete(`/api/fleet/epm/packages/${name}/${version}`).set('kbn-xsrf', 'xxxx'); + return supertest.delete(`/api/fleet/epm/packages/${pkg}`).set('kbn-xsrf', 'xxxx'); } From 5c0991b03e63c086102f186c0fe6cc98772ecdef Mon Sep 17 00:00:00 2001 From: Gergely Kalapos Date: Thu, 22 Aug 2024 11:07:24 +0200 Subject: [PATCH 05/59] Add otel datastream patterns to APM indices (#190533) ## Summary Part of the OTel effort. This PR adds otel datastream patterns into the default indices that are used by the APM UI. ### 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 - [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)) ### 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: Caue Marcondes Co-authored-by: Elastic Machine --- docs/settings/apm-settings.asciidoc | 8 ++++---- .../apm/scripts/shared/read_kibana_config.ts | 8 ++++---- .../has_storage_explorer_privileges.ts | 14 ++++++++++++-- .../apm_data_access/server/index.ts | 8 ++++---- .../tests/data_view/static.spec.ts | 7 +++++-- .../tests/diagnostics/privileges.spec.ts | 6 ++++++ .../tests/inspect/inspect.spec.ts | 2 +- .../tests/settings/apm_indices/apm_indices.spec.ts | 8 ++++---- 8 files changed, 40 insertions(+), 21 deletions(-) diff --git a/docs/settings/apm-settings.asciidoc b/docs/settings/apm-settings.asciidoc index 3cd04a4ff3733..901988cf67c29 100644 --- a/docs/settings/apm-settings.asciidoc +++ b/docs/settings/apm-settings.asciidoc @@ -82,19 +82,19 @@ Sets a `fixed_interval` for date histograms in metrics aggregations. Defaults to Set to `false` to disable cloud APM migrations. Defaults to `true`. `xpack.apm.indices.error` {ess-icon}:: -Matcher for all error indices. Defaults to `logs-apm*,apm-*`. +Matcher for all error indices. Defaults to `logs-apm*,apm-*,traces-*.otel-*`. `xpack.apm.indices.onboarding` {ess-icon}:: Matcher for all onboarding indices. Defaults to `apm-*`. `xpack.apm.indices.span` {ess-icon}:: -Matcher for all span indices. Defaults to `traces-apm*,apm-*`. +Matcher for all span indices. Defaults to `traces-apm*,apm-*,traces-*.otel-*`. `xpack.apm.indices.transaction` {ess-icon}:: -Matcher for all transaction indices. Defaults to `traces-apm*,apm-*`. +Matcher for all transaction indices. Defaults to `traces-apm*,apm-*,traces-*.otel-*`. `xpack.apm.indices.metric` {ess-icon}:: -Matcher for all metrics indices. Defaults to `metrics-apm*,apm-*`. +Matcher for all metrics indices. Defaults to `metrics-apm*,apm-*,metrics-*.otel-*`. `xpack.apm.indices.sourcemap` {ess-icon}:: Matcher for all source map indices. Defaults to `apm-*`. diff --git a/x-pack/plugins/observability_solution/apm/scripts/shared/read_kibana_config.ts b/x-pack/plugins/observability_solution/apm/scripts/shared/read_kibana_config.ts index 5cc21d6789591..c440fc5dfcea4 100644 --- a/x-pack/plugins/observability_solution/apm/scripts/shared/read_kibana_config.ts +++ b/x-pack/plugins/observability_solution/apm/scripts/shared/read_kibana_config.ts @@ -35,10 +35,10 @@ export const readKibanaConfig = () => { }; return { - 'xpack.apm.indices.transaction': 'traces-apm*,apm-*', - 'xpack.apm.indices.metric': 'metrics-apm*,apm-*', - 'xpack.apm.indices.error': 'logs-apm*,apm-*', - 'xpack.apm.indices.span': 'traces-apm*,apm-*', + 'xpack.apm.indices.transaction': 'traces-apm*,apm-*,traces-*.otel-*', + 'xpack.apm.indices.metric': 'metrics-apm*,apm-*,metrics-*.otel-*', + 'xpack.apm.indices.error': 'logs-apm*,apm-*,logs-*.otel-*', + 'xpack.apm.indices.span': 'traces-apm*,apm-*,traces-*.otel-*', 'xpack.apm.indices.onboarding': 'apm-*', 'elasticsearch.hosts': 'http://localhost:9200', ...loadedKibanaConfig, diff --git a/x-pack/plugins/observability_solution/apm/server/routes/storage_explorer/has_storage_explorer_privileges.ts b/x-pack/plugins/observability_solution/apm/server/routes/storage_explorer/has_storage_explorer_privileges.ts index 69f61c15f2991..e3ba5053640f8 100644 --- a/x-pack/plugins/observability_solution/apm/server/routes/storage_explorer/has_storage_explorer_privileges.ts +++ b/x-pack/plugins/observability_solution/apm/server/routes/storage_explorer/has_storage_explorer_privileges.ts @@ -18,12 +18,22 @@ export async function hasStorageExplorerPrivileges({ apmEventClient: APMEventClient; }) { const { - indices: { transaction, span, metric, error }, + // Only use apm index patterns and ignore OTel, as the storage explorer only supports APM data + indices: { + transaction = 'traces-apm*,apm-*', + span = 'traces-apm*,apm-*', + metric = 'metrics-apm*,apm-*', + error = 'logs-apm*,apm-*', + }, } = apmEventClient; const names = uniq( [transaction, span, metric, error].flatMap((indexPatternString) => - indexPatternString.split(',').map((indexPattern) => indexPattern.trim()) + indexPatternString + .split(',') + .map((indexPattern) => indexPattern.trim()) + // At this point we do not do any work for storage explorer + OTel data. So remove any otel related index + .filter((indexPattern) => !indexPattern.includes('otel')) ) ); diff --git a/x-pack/plugins/observability_solution/apm_data_access/server/index.ts b/x-pack/plugins/observability_solution/apm_data_access/server/index.ts index 8ff76df2334ab..6b6385ded4ce4 100644 --- a/x-pack/plugins/observability_solution/apm_data_access/server/index.ts +++ b/x-pack/plugins/observability_solution/apm_data_access/server/index.ts @@ -10,10 +10,10 @@ import { PluginConfigDescriptor, PluginInitializerContext } from '@kbn/core/serv const configSchema = schema.object({ indices: schema.object({ - transaction: schema.string({ defaultValue: 'traces-apm*,apm-*' }), // TODO: remove apm-* pattern in 9.0 - span: schema.string({ defaultValue: 'traces-apm*,apm-*' }), - error: schema.string({ defaultValue: 'logs-apm*,apm-*' }), - metric: schema.string({ defaultValue: 'metrics-apm*,apm-*' }), + transaction: schema.string({ defaultValue: 'traces-apm*,apm-*,traces-*.otel-*' }), // TODO: remove apm-* pattern in 9.0 + span: schema.string({ defaultValue: 'traces-apm*,apm-*,traces-*.otel-*' }), + error: schema.string({ defaultValue: 'logs-apm*,apm-*,logs-*.otel-*' }), + metric: schema.string({ defaultValue: 'metrics-apm*,apm-*,metrics-*.otel-*' }), onboarding: schema.string({ defaultValue: 'apm-*' }), // Unused: to be deleted sourcemap: schema.string({ defaultValue: 'apm-*' }), // Unused: to be deleted }), diff --git a/x-pack/test/apm_api_integration/tests/data_view/static.spec.ts b/x-pack/test/apm_api_integration/tests/data_view/static.spec.ts index 56b310f8f2fe6..01afc1709782b 100644 --- a/x-pack/test/apm_api_integration/tests/data_view/static.spec.ts +++ b/x-pack/test/apm_api_integration/tests/data_view/static.spec.ts @@ -21,7 +21,8 @@ export default function ApiTest({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const synthtrace = getService('apmSynthtraceEsClient'); const logger = getService('log'); - const dataViewPattern = 'traces-apm*,apm-*,logs-apm*,apm-*,metrics-apm*,apm-*'; + const dataViewPattern = + 'traces-apm*,apm-*,traces-*.otel-*,logs-apm*,apm-*,logs-*.otel-*,metrics-apm*,apm-*,metrics-*.otel-*'; function createDataViewWithWriteUser({ spaceId }: { spaceId: string }) { return apmApiClient.writeUser({ @@ -116,7 +117,9 @@ export default function ApiTest({ getService }: FtrProviderContext) { expect(dataView.id).to.be('apm_static_data_view_id_default'); expect(dataView.name).to.be('APM'); - expect(dataView.title).to.be('traces-apm*,apm-*,logs-apm*,apm-*,metrics-apm*,apm-*'); + expect(dataView.title).to.be( + 'traces-apm*,apm-*,traces-*.otel-*,logs-apm*,apm-*,logs-*.otel-*,metrics-apm*,apm-*,metrics-*.otel-*' + ); }); }); diff --git a/x-pack/test/apm_api_integration/tests/diagnostics/privileges.spec.ts b/x-pack/test/apm_api_integration/tests/diagnostics/privileges.spec.ts index e6185cd43270d..2d9652b612010 100644 --- a/x-pack/test/apm_api_integration/tests/diagnostics/privileges.spec.ts +++ b/x-pack/test/apm_api_integration/tests/diagnostics/privileges.spec.ts @@ -36,6 +36,9 @@ export default function ApiTest({ getService }: FtrProviderContext) { 'logs-apm*': { read: true }, 'metrics-apm*': { read: true }, 'traces-apm*': { read: true }, + 'logs-*.otel-*': { read: true }, + 'metrics-*.otel-*': { read: true }, + 'traces-*.otel-*': { read: true }, }); }); @@ -71,6 +74,9 @@ export default function ApiTest({ getService }: FtrProviderContext) { 'logs-apm*': { read: true }, 'metrics-apm*': { read: true }, 'traces-apm*': { read: true }, + 'logs-*.otel-*': { read: true }, + 'metrics-*.otel-*': { read: true }, + 'traces-*.otel-*': { read: true }, }); }); diff --git a/x-pack/test/apm_api_integration/tests/inspect/inspect.spec.ts b/x-pack/test/apm_api_integration/tests/inspect/inspect.spec.ts index 155fbf2d959e4..f15c9900488a0 100644 --- a/x-pack/test/apm_api_integration/tests/inspect/inspect.spec.ts +++ b/x-pack/test/apm_api_integration/tests/inspect/inspect.spec.ts @@ -93,7 +93,7 @@ export default function inspectFlagTests({ getService }: FtrProviderContext) { expect(status).to.be(200); expect(body._inspect?.map((res) => res.stats?.indexPattern.value)).to.eql([ - ['metrics-apm*', 'apm-*'], + ['metrics-apm*', 'apm-*', 'metrics-*.otel-*'], ]); }); }); diff --git a/x-pack/test/apm_api_integration/tests/settings/apm_indices/apm_indices.spec.ts b/x-pack/test/apm_api_integration/tests/settings/apm_indices/apm_indices.spec.ts index 8c4b93a29210c..fa303d33a2945 100644 --- a/x-pack/test/apm_api_integration/tests/settings/apm_indices/apm_indices.spec.ts +++ b/x-pack/test/apm_api_integration/tests/settings/apm_indices/apm_indices.spec.ts @@ -45,10 +45,10 @@ export default function apmIndicesTests({ getService }: FtrProviderContext) { }); expect(response.status).to.be(200); expect(response.body).to.eql({ - transaction: 'traces-apm*,apm-*', - span: 'traces-apm*,apm-*', - error: 'logs-apm*,apm-*', - metric: 'metrics-apm*,apm-*', + transaction: 'traces-apm*,apm-*,traces-*.otel-*', + span: 'traces-apm*,apm-*,traces-*.otel-*', + error: 'logs-apm*,apm-*,logs-*.otel-*', + metric: 'metrics-apm*,apm-*,metrics-*.otel-*', onboarding: 'apm-*', sourcemap: 'apm-*', }); From c5b38e487a3fd974a244ba584ef247e3ffbe6019 Mon Sep 17 00:00:00 2001 From: Antonio Date: Thu, 22 Aug 2024 10:08:30 +0100 Subject: [PATCH 06/59] [ResponseOps][Connectors] Add deprecation warning to the Teams Connector (#190958) Fixes #190944 ## Summary **The exact text is still a work in progress.** Screenshot 2024-08-21 at 11 02 37 --------- Co-authored-by: Lisa Cawley --- .../teams/teams_connectors.tsx | 36 ++++++++++++------- .../connector_types/teams/translations.ts | 8 +++++ 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/x-pack/plugins/stack_connectors/public/connector_types/teams/teams_connectors.tsx b/x-pack/plugins/stack_connectors/public/connector_types/teams/teams_connectors.tsx index 7d989b9b04c6e..f8c2b75940aa0 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/teams/teams_connectors.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/teams/teams_connectors.tsx @@ -6,7 +6,7 @@ */ import React from 'react'; -import { EuiLink } from '@elastic/eui'; +import { EuiCallOut, EuiLink, EuiSpacer } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { FieldConfig, UseField } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; import { fieldValidators } from '@kbn/es-ui-shared-plugin/static/forms/helpers'; @@ -42,18 +42,28 @@ const TeamsActionFields: React.FunctionComponent = ( const { docLinks } = useKibana().services; return ( - + <> + + + + ); }; diff --git a/x-pack/plugins/stack_connectors/public/connector_types/teams/translations.ts b/x-pack/plugins/stack_connectors/public/connector_types/teams/translations.ts index 539e0867dc97c..728c613824601 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/teams/translations.ts +++ b/x-pack/plugins/stack_connectors/public/connector_types/teams/translations.ts @@ -27,3 +27,11 @@ export const MESSAGE_REQUIRED = i18n.translate( defaultMessage: 'Message is required.', } ); + +export const WEBHOOK_DEPRECATION_WARNING = i18n.translate( + 'xpack.stackConnectors.components.teams.warning.webhookDeprecation', + { + defaultMessage: + 'Microsoft Teams deprecated some methods for configuring webhooks. Follow the documentation link to create a supported webhook URL. If the URL is not updated by December 31, 2024, notifications will stop.', + } +); From 3177b037d7f8b52214b025a5f1128bd991efc591 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Thu, 22 Aug 2024 11:14:59 +0100 Subject: [PATCH 07/59] [ML] File upload: Adds support for PDF files (#186956) Also txt, rtf, doc, docx, xls, xlsx, ppt, pptx, odt, ods, and odp. Adds the ability to automatically add a semantic text field to the mappings and a `copy_to` processor to duplicate the field. This is needed for the mappings generated for the attachment processor which adds a nested `attachment.content` field which cannot be used as a semantic text field. After a successful import, a link to Search's Playground app is shown. Navigating there lets the user instantly query the newly uploaded file. https://github.com/user-attachments/assets/09b20a5f-0e02-47fa-885e-0ed21374cc60 --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Liam Thompson <32779855+leemthompo@users.noreply.github.com> --- .../data_visualizer/common/constants.ts | 2 +- .../common/utils/tika_utils.ts | 90 +++++ .../combined_fields/combined_field_label.tsx | 11 +- .../combined_fields/combined_fields_form.tsx | 66 ++-- .../components/combined_fields/geo_point.tsx | 21 +- .../combined_fields/semantic_text.tsx | 210 ++++++++++++ .../components/combined_fields/types.ts | 2 +- .../components/combined_fields/utils.ts | 11 + .../filebeat_config_flyout/filebeat_config.ts | 4 +- .../filebeat_config_flyout.tsx | 13 +- .../results_links/results_links.tsx | 45 ++- .../common/components/utils/utils.ts | 2 +- .../about_panel/welcome_content.tsx | 107 +++++- .../analysis_summary/analysis_summary.tsx | 9 +- .../file_contents/file_contents.tsx | 17 +- .../components/file_contents/preview_pdf.ts | 30 ++ .../file_data_visualizer_view.js | 57 ++-- .../file_error_callouts.tsx | 14 +- .../file_size_check.ts | 40 +++ .../tika_analyzer.ts | 108 ++++++ .../{ => advanced}/advanced.tsx | 101 +----- .../import_settings/advanced/index.ts | 8 + .../import_settings/advanced/inputs.tsx | 96 ++++++ .../advanced/use_existing_indices.ts | 58 ++++ .../import_settings/import_settings.tsx | 15 +- .../import_settings/semantic_text_info.tsx | 60 ++++ .../components/import_settings/simple.tsx | 10 +- .../import_summary/import_summary.tsx | 10 +- .../components/import_view/import.ts | 242 +++++++++++++ .../components/import_view/import_view.js | 317 ++++-------------- .../components/results_view/results_view.tsx | 49 +-- .../plugins/data_visualizer/server/routes.ts | 28 ++ x-pack/plugins/data_visualizer/tsconfig.json | 1 + .../plugins/file_upload/common/constants.ts | 5 +- x-pack/plugins/file_upload/common/types.ts | 24 +- .../plugins/file_upload/public/api/index.ts | 37 +- .../public/importer/get_max_bytes.ts | 9 + .../file_upload/public/importer/importer.ts | 6 +- .../public/importer/importer_factory.ts | 5 +- .../public/importer/tika_importer.ts | 48 +++ .../public/lazy_load_bundle/index.ts | 2 +- x-pack/plugins/file_upload/public/plugin.ts | 11 +- .../server/preview_tika_contents.ts | 50 +++ x-pack/plugins/file_upload/server/routes.ts | 48 ++- .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - .../api_integration/apis/file_upload/index.ts | 1 + .../apis/file_upload/pdf_base64.ts | 8 + .../apis/file_upload/preview_tika_contents.ts | 49 +++ 50 files changed, 1657 insertions(+), 506 deletions(-) create mode 100644 x-pack/plugins/data_visualizer/common/utils/tika_utils.ts create mode 100644 x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/semantic_text.tsx create mode 100644 x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/preview_pdf.ts create mode 100644 x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_size_check.ts create mode 100644 x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/tika_analyzer.ts rename x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/{ => advanced}/advanced.tsx (67%) create mode 100644 x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced/index.ts create mode 100644 x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced/inputs.tsx create mode 100644 x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced/use_existing_indices.ts create mode 100644 x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/semantic_text_info.tsx create mode 100644 x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import.ts create mode 100644 x-pack/plugins/file_upload/public/importer/tika_importer.ts create mode 100644 x-pack/plugins/file_upload/server/preview_tika_contents.ts create mode 100644 x-pack/test/api_integration/apis/file_upload/pdf_base64.ts create mode 100644 x-pack/test/api_integration/apis/file_upload/preview_tika_contents.ts diff --git a/x-pack/plugins/data_visualizer/common/constants.ts b/x-pack/plugins/data_visualizer/common/constants.ts index 60a87c37d9f1b..ff277b9bb4785 100644 --- a/x-pack/plugins/data_visualizer/common/constants.ts +++ b/x-pack/plugins/data_visualizer/common/constants.ts @@ -28,7 +28,7 @@ export const FILE_FORMATS = { DELIMITED: 'delimited', NDJSON: 'ndjson', SEMI_STRUCTURED_TEXT: 'semi_structured_text', - // XML: 'xml', + TIKA: 'tika', }; export const SUPPORTED_FIELD_TYPES = { diff --git a/x-pack/plugins/data_visualizer/common/utils/tika_utils.ts b/x-pack/plugins/data_visualizer/common/utils/tika_utils.ts new file mode 100644 index 0000000000000..934378464d70a --- /dev/null +++ b/x-pack/plugins/data_visualizer/common/utils/tika_utils.ts @@ -0,0 +1,90 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export function isTikaType(type: string) { + return getTikaDisplayType(type).isTikaType; +} + +export const getTikaDisplayType = (type: string): { isTikaType: boolean; label: string } => { + switch (type) { + case 'application/doc': + case 'application/ms-doc': + case 'application/msword': + case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': + return { + isTikaType: true, + label: i18n.translate('xpack.dataVisualizer.file.tikaTypes.word', { + defaultMessage: 'Microsoft Office Word document', + }), + }; + + case 'application/excel': + case 'application/vnd.ms-excel': + case 'application/x-excel': + case 'application/x-msexcel': + case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': + return { + isTikaType: true, + label: i18n.translate('xpack.dataVisualizer.file.tikaTypes.excel', { + defaultMessage: 'Microsoft Office Excel document', + }), + }; + + case 'application/mspowerpoint': + case 'application/powerpoint': + case 'application/vnd.ms-powerpoint': + case 'application/x-mspowerpoint': + case 'application/vnd.openxmlformats-officedocument.presentationml.presentation': + return { + isTikaType: true, + label: i18n.translate('xpack.dataVisualizer.file.tikaTypes.powerPoint', { + defaultMessage: 'Microsoft Office Power Point document', + }), + }; + + case 'application/vnd.oasis.opendocument.presentation': + case 'application/vnd.oasis.opendocument.spreadsheet': + case 'application/vnd.oasis.opendocument.text': + return { + isTikaType: true, + label: i18n.translate('xpack.dataVisualizer.file.tikaTypes.openDoc', { + defaultMessage: 'Open Document Format', + }), + }; + + case 'text/rtf': + case 'application/rtf': + return { + isTikaType: true, + label: i18n.translate('xpack.dataVisualizer.file.tikaTypes.richText', { + defaultMessage: 'Rich Text Format', + }), + }; + + case 'application/pdf': + return { + isTikaType: true, + label: i18n.translate('xpack.dataVisualizer.file.tikaTypes.pdf', { + defaultMessage: 'PDF', + }), + }; + + case 'text/plain': + case 'text/plain; charset=UTF-8': + return { + isTikaType: true, + label: i18n.translate('xpack.dataVisualizer.file.tikaTypes.plainText', { + defaultMessage: 'Plain text', + }), + }; + + default: + return { isTikaType: false, label: type }; + } +}; diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/combined_field_label.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/combined_field_label.tsx index b1ca6e31450be..0a00518f251e5 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/combined_field_label.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/combined_field_label.tsx @@ -8,6 +8,7 @@ import React from 'react'; import { EuiText } from '@elastic/eui'; +import { ES_FIELD_TYPES } from '@kbn/field-types'; import type { CombinedField } from './types'; export function CombinedFieldLabel({ combinedField }: { combinedField: CombinedField }) { @@ -15,7 +16,11 @@ export function CombinedFieldLabel({ combinedField }: { combinedField: CombinedF } function getCombinedFieldLabel(combinedField: CombinedField) { - return `${combinedField.fieldNames.join(combinedField.delimiter)} => ${ - combinedField.combinedFieldName - } (${combinedField.mappingType})`; + if (combinedField.mappingType === ES_FIELD_TYPES.GEO_POINT) { + return `${combinedField.fieldNames.join(combinedField.delimiter)} => ${ + combinedField.combinedFieldName + } (${combinedField.mappingType})`; + } + + return combinedField.combinedFieldName; } diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/combined_fields_form.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/combined_fields_form.tsx index 8676be744cb53..7bf8d7f0aaaf3 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/combined_fields_form.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/combined_fields_form.tsx @@ -19,17 +19,13 @@ import { EuiFlexItem, } from '@elastic/eui'; -import type { FindFileStructureResponse } from '@kbn/file-upload-plugin/common'; +import type { FindFileStructureResponse, IngestPipeline } from '@kbn/file-upload-plugin/common'; +import type { MappingTypeMapping } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { CombinedField } from './types'; import { GeoPointForm } from './geo_point'; +import { SemanticTextForm } from './semantic_text'; import { CombinedFieldLabel } from './combined_field_label'; -import { - addCombinedFieldsToMappings, - addCombinedFieldsToPipeline, - getNameCollisionMsg, - removeCombinedFieldsFromMappings, - removeCombinedFieldsFromPipeline, -} from './utils'; +import { removeCombinedFieldsFromMappings, removeCombinedFieldsFromPipeline } from './utils'; interface Props { mappingsString: string; @@ -46,6 +42,12 @@ interface State { isPopoverOpen: boolean; } +export type AddCombinedField = ( + combinedField: CombinedField, + addToMappings: (mappings: MappingTypeMapping) => MappingTypeMapping, + addToPipeline: (pipeline: IngestPipeline) => IngestPipeline +) => void; + export class CombinedFieldsForm extends Component { state: State = { isPopoverOpen: false, @@ -63,20 +65,20 @@ export class CombinedFieldsForm extends Component { }); }; - addCombinedField = (combinedField: CombinedField) => { - if (this.hasNameCollision(combinedField.combinedFieldName)) { - throw new Error(getNameCollisionMsg(combinedField.combinedFieldName)); - } - + addCombinedField = ( + combinedField: CombinedField, + addToMappings: (mappings: MappingTypeMapping) => {}, + addToPipeline: (pipeline: IngestPipeline) => {} + ) => { const mappings = this.parseMappings(); const pipeline = this.parsePipeline(); - this.props.onMappingsStringChange( - JSON.stringify(addCombinedFieldsToMappings(mappings, [combinedField]), null, 2) - ); - this.props.onPipelineStringChange( - JSON.stringify(addCombinedFieldsToPipeline(pipeline, [combinedField]), null, 2) - ); + const newMappings = addToMappings(mappings); + const newPipeline = addToPipeline(pipeline); + + this.props.onMappingsStringChange(JSON.stringify(newMappings, null, 2)); + this.props.onPipelineStringChange(JSON.stringify(newPipeline, null, 2)); + this.props.onCombinedFieldsChange([...this.props.combinedFields, combinedField]); this.closePopover(); @@ -155,6 +157,13 @@ export class CombinedFieldsForm extends Component { defaultMessage: 'Add geo point field', } ); + + const semanticTextLabel = i18n.translate( + 'xpack.dataVisualizer.file.semanticTextForm.combinedFieldLabel', + { + defaultMessage: 'Add semantic text field', + } + ); const panels = [ { id: 0, @@ -163,6 +172,10 @@ export class CombinedFieldsForm extends Component { name: geoPointLabel, panel: 1, }, + { + name: semanticTextLabel, + panel: 2, + }, ], }, { @@ -176,11 +189,22 @@ export class CombinedFieldsForm extends Component { /> ), }, + { + id: 2, + title: semanticTextLabel, + content: ( + + ), + }, ]; return (
@@ -217,7 +241,7 @@ export class CombinedFieldsForm extends Component { > } diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/geo_point.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/geo_point.tsx index f855d61a463d6..65ee3a6b58b5b 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/geo_point.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/geo_point.tsx @@ -23,17 +23,19 @@ import { } from '@elastic/eui'; import type { FindFileStructureResponse } from '@kbn/file-upload-plugin/common'; -import type { CombinedField } from './types'; import { createGeoPointCombinedField, isWithinLatRange, isWithinLonRange, getFieldNames, getNameCollisionMsg, + addCombinedFieldsToMappings, + addCombinedFieldsToPipeline, } from './utils'; +import type { AddCombinedField } from './combined_fields_form'; interface Props { - addCombinedField: (combinedField: CombinedField) => void; + addCombinedField: AddCombinedField; hasNameCollision: (name: string) => boolean; results: FindFileStructureResponse; } @@ -99,13 +101,18 @@ export class GeoPointForm extends Component { onSubmit = () => { try { + const combinedField = createGeoPointCombinedField( + this.state.latField, + this.state.lonField, + this.state.geoPointField + ); + this.props.addCombinedField( - createGeoPointCombinedField( - this.state.latField, - this.state.lonField, - this.state.geoPointField - ) + combinedField, + (mappings) => addCombinedFieldsToMappings(mappings, [combinedField]), + (pipeline) => addCombinedFieldsToPipeline(pipeline, [combinedField]) ); + this.setState({ submitError: '' }); } catch (error) { this.setState({ submitError: error.message }); diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/semantic_text.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/semantic_text.tsx new file mode 100644 index 0000000000000..581e92d23dc9d --- /dev/null +++ b/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/semantic_text.tsx @@ -0,0 +1,210 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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, useEffect, useMemo } from 'react'; +import type { FC } from 'react'; +import type { + FindFileStructureResponse, + IngestPipeline, +} from '@kbn/file-upload-plugin/common/types'; +import type { EuiSelectOption } from '@elastic/eui'; +import { + EuiButton, + EuiFormRow, + EuiSelect, + EuiSpacer, + EuiTextAlign, + EuiFieldText, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { cloneDeep } from 'lodash'; +import useDebounce from 'react-use/lib/useDebounce'; +import type { + InferenceModelConfigContainer, + MappingTypeMapping, +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { createSemanticTextCombinedField, getFieldNames, getNameCollisionMsg } from './utils'; +import { useDataVisualizerKibana } from '../../../kibana_context'; +import type { AddCombinedField } from './combined_fields_form'; + +interface Props { + addCombinedField: AddCombinedField; + hasNameCollision: (name: string) => boolean; + results: FindFileStructureResponse; +} +export const SemanticTextForm: FC = ({ addCombinedField, hasNameCollision, results }) => { + const { + services: { http }, + } = useDataVisualizerKibana(); + const [inferenceServices, setInferenceServices] = useState([]); + const [selectedInference, setSelectedInference] = useState(); + const [selectedFieldOption, setSelectedFieldOption] = useState(); + const [renameToFieldOption, setRenameToFieldOption] = useState(''); + const [fieldError, setFieldError] = useState(); + + const fieldOptions = useMemo( + () => + getFieldNames(results).map((columnName: string) => { + return { value: columnName, text: columnName }; + }), + [results] + ); + + useEffect(() => { + setSelectedFieldOption(fieldOptions[0].value ?? null); + }, [fieldOptions]); + + useEffect(() => { + http + .fetch('/internal/data_visualizer/inference_services', { + method: 'GET', + version: '1', + }) + .then((response) => { + const inferenceServiceOptions = response.map((service) => ({ + value: service.model_id, + text: service.model_id, + })); + setInferenceServices(inferenceServiceOptions); + setSelectedInference(inferenceServiceOptions[0]?.value ?? undefined); + }); + }, [http]); + + useEffect(() => { + if (selectedFieldOption?.includes('.')) { + setRenameToFieldOption(selectedFieldOption.split('.').pop()!); + } else { + setRenameToFieldOption(`${selectedFieldOption}_semantic`); + } + }, [selectedFieldOption]); + + const onSubmit = () => { + if ( + renameToFieldOption === '' || + renameToFieldOption === undefined || + selectedFieldOption === undefined || + selectedInference === undefined + ) { + return; + } + addCombinedField( + createSemanticTextCombinedField(renameToFieldOption, selectedFieldOption), + (mappings: MappingTypeMapping) => { + if (renameToFieldOption === undefined || selectedFieldOption === undefined) { + return mappings; + } + + const newMappings = cloneDeep(mappings); + newMappings.properties![renameToFieldOption ?? selectedFieldOption] = { + // @ts-ignore types are missing semantic_text + type: 'semantic_text', + inference_id: selectedInference, + }; + return newMappings; + }, + (pipeline: IngestPipeline) => { + const newPipeline = cloneDeep(pipeline); + if (renameToFieldOption !== null) { + newPipeline.processors.push({ + set: { + field: renameToFieldOption, + copy_from: selectedFieldOption, + }, + }); + } + return newPipeline; + } + ); + }; + + useDebounce( + () => { + if (renameToFieldOption === undefined) { + return; + } + const error = hasNameCollision(renameToFieldOption) + ? getNameCollisionMsg(renameToFieldOption) + : undefined; + setFieldError(error); + }, + 250, + [renameToFieldOption] + ); + + const isInvalid = useMemo(() => { + return ( + !selectedInference || + !selectedFieldOption || + renameToFieldOption === '' || + fieldError !== undefined + ); + }, [selectedInference, selectedFieldOption, renameToFieldOption, fieldError]); + + return ( + <> + + + + setSelectedFieldOption(e.target.value)} + /> + + + {renameToFieldOption !== null ? ( + + setRenameToFieldOption(e.target.value)} + aria-label="field name" + /> + + ) : null} + + + setSelectedInference(e.target.value)} + /> + + + + + + + + + + + ); +}; diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/types.ts b/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/types.ts index 8127b208fb59c..6e6fa70e967fc 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/types.ts +++ b/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/types.ts @@ -7,7 +7,7 @@ export interface CombinedField { mappingType: string; - delimiter: string; + delimiter?: string; combinedFieldName: string; fieldNames: string[]; } diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/utils.ts b/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/utils.ts index 75cf8cd8d91fe..4b0f57d1ca932 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/utils.ts +++ b/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/utils.ts @@ -123,6 +123,17 @@ export function createGeoPointCombinedField( }; } +export function createSemanticTextCombinedField( + sematicTextField: string, + originalField: string +): CombinedField { + return { + mappingType: 'semantic_text', + combinedFieldName: sematicTextField, + fieldNames: [originalField], + }; +} + export function getNameCollisionMsg(name: string) { return i18n.translate('xpack.dataVisualizer.nameCollisionMsg', { defaultMessage: '"{name}" already exists, please provide a unique name', diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/filebeat_config_flyout/filebeat_config.ts b/x-pack/plugins/data_visualizer/public/application/common/components/filebeat_config_flyout/filebeat_config.ts index dbef1b4497893..b3c02aa177de8 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/filebeat_config_flyout/filebeat_config.ts +++ b/x-pack/plugins/data_visualizer/public/application/common/components/filebeat_config_flyout/filebeat_config.ts @@ -11,7 +11,7 @@ import type { FindFileStructureResponse } from '@kbn/file-upload-plugin/common'; export function createFilebeatConfig( index: string, results: FindFileStructureResponse, - ingestPipelineId: string, + pipelineId: string, username: string | null ) { return [ @@ -27,7 +27,7 @@ export function createFilebeatConfig( ' hosts: [""]', ...getUserDetails(username), ` index: "${index}"`, - ` pipeline: "${ingestPipelineId}"`, + ` pipeline: "${pipelineId}"`, '', 'setup:', ' template.enabled: false', diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/filebeat_config_flyout/filebeat_config_flyout.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/filebeat_config_flyout/filebeat_config_flyout.tsx index 7682e771ac155..c6f62f4eef456 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/filebeat_config_flyout/filebeat_config_flyout.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/filebeat_config_flyout/filebeat_config_flyout.tsx @@ -34,15 +34,10 @@ export enum EDITOR_MODE { interface Props { index: string; results: FindFileStructureResponse; - ingestPipelineId: string; + pipelineId: string; closeFlyout(): void; } -export const FilebeatConfigFlyout: FC = ({ - index, - results, - ingestPipelineId, - closeFlyout, -}) => { +export const FilebeatConfigFlyout: FC = ({ index, results, pipelineId, closeFlyout }) => { const [fileBeatConfig, setFileBeatConfig] = useState(''); const [username, setUsername] = useState(null); const { @@ -56,9 +51,9 @@ export const FilebeatConfigFlyout: FC = ({ }, [security]); useEffect(() => { - const config = createFilebeatConfig(index, results, ingestPipelineId, username); + const config = createFilebeatConfig(index, results, pipelineId, username); setFileBeatConfig(config); - }, [username, index, ingestPipelineId, results]); + }, [username, index, pipelineId, results]); return ( diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx index 259b45d4e297b..a48dde6f4fa6b 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx @@ -19,6 +19,7 @@ import { isDefined } from '@kbn/ml-is-defined'; import type { ResultLinks } from '../../../../../common/app'; import type { LinkCardProps } from '../link_card/link_card'; import { useDataVisualizerKibana } from '../../../kibana_context'; +import type { CombinedField } from '../combined_fields/types'; type LinkType = 'file' | 'index'; @@ -44,7 +45,7 @@ export interface ResultLink { } interface Props { - fieldStats: FindFileStructureResponse['field_stats']; + results: FindFileStructureResponse; index: string; dataViewId: string; timeFieldName?: string; @@ -52,6 +53,7 @@ interface Props { showFilebeatFlyout(): void; getAdditionalLinks?: GetAdditionalLinks; resultLinks?: ResultLinks; + combinedFields: CombinedField[]; } interface GlobalState { @@ -62,7 +64,7 @@ interface GlobalState { const RECHECK_DELAY_MS = 3000; export const ResultsLinks: FC = ({ - fieldStats, + results, index, dataViewId, timeFieldName, @@ -70,6 +72,7 @@ export const ResultsLinks: FC = ({ showFilebeatFlyout, getAdditionalLinks, resultLinks, + combinedFields, }) => { const { services: { @@ -78,7 +81,7 @@ export const ResultsLinks: FC = ({ application: { getUrlForApp, capabilities }, }, } = useDataVisualizerKibana(); - + const fieldStats = results.field_stats; const [duration, setDuration] = useState({ from: 'now-30m', to: 'now', @@ -88,6 +91,7 @@ export const ResultsLinks: FC = ({ const [discoverLink, setDiscoverLink] = useState(''); const [indexManagementLink, setIndexManagementLink] = useState(''); const [dataViewsManagementLink, setDataViewsManagementLink] = useState(''); + const [playgroundLink, setPlaygroundLink] = useState(''); const [asyncHrefCards, setAsyncHrefCards] = useState(); useEffect(() => { @@ -96,7 +100,7 @@ export const ResultsLinks: FC = ({ const getDiscoverUrl = async (): Promise => { const isDiscoverAvailable = capabilities.discover?.show ?? false; if (!isDiscoverAvailable) return; - const discoverLocator = url?.locators.get('DISCOVER_APP_LOCATOR'); + const discoverLocator = url.locators.get('DISCOVER_APP_LOCATOR'); if (!discoverLocator) { // eslint-disable-next-line no-console @@ -116,13 +120,13 @@ export const ResultsLinks: FC = ({ if (Array.isArray(getAdditionalLinks)) { Promise.all( getAdditionalLinks.map(async (asyncCardGetter) => { - const results = await asyncCardGetter({ + const cardResults = await asyncCardGetter({ dataViewId, globalState, }); - if (Array.isArray(results)) { + if (Array.isArray(cardResults)) { return await Promise.all( - results.map(async (c) => ({ + cardResults.map(async (c) => ({ ...c, canDisplay: await c.canDisplay(), href: await c.getUrl(), @@ -140,6 +144,12 @@ export const ResultsLinks: FC = ({ } if (!unmounted) { + const playgroundLocator = url.locators.get('PLAYGROUND_LOCATOR_ID'); + + if (playgroundLocator !== undefined) { + playgroundLocator.getUrl({ 'default-index': index }).then(setPlaygroundLink); + } + setIndexManagementLink( getUrlForApp('management', { path: '/data/index_management/indices' }) ); @@ -228,7 +238,6 @@ export const ResultsLinks: FC = ({ /> )} - {indexManagementLink && ( = ({ /> )} - {dataViewsManagementLink && ( = ({ /> )} - {resultLinks?.fileBeat?.enabled === false ? null : ( = ({ )} + {playgroundLink ? ( + + } + data-test-subj="fileDataVisFilebeatConfigLink" + title={ + + } + description="" + href={playgroundLink} + /> + + ) : null} + {Array.isArray(asyncHrefCards) && asyncHrefCards.map((link) => ( diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/utils/utils.ts b/x-pack/plugins/data_visualizer/public/application/common/components/utils/utils.ts index 0aca4f9260b7d..776f687f7732f 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/utils/utils.ts +++ b/x-pack/plugins/data_visualizer/public/application/common/components/utils/utils.ts @@ -26,7 +26,7 @@ const overrideDefaults = { linesToSample: undefined, }; -export function readFile(file: File) { +export function readFile(file: File): Promise<{ fileContents: string; data: ArrayBuffer }> { return new Promise((resolve, reject) => { if (file && file.size) { const reader = new FileReader(); diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/welcome_content.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/welcome_content.tsx index 61681db6b3ef5..a5437ad49dc2d 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/welcome_content.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/welcome_content.tsx @@ -34,10 +34,11 @@ interface Props { export const WelcomeContent: FC = ({ hasPermissionToImport }) => { const { services: { - fileUpload: { getMaxBytesFormatted }, + fileUpload: { getMaxBytesFormatted, getMaxTikaBytesFormatted }, }, } = useDataVisualizerKibana(); const maxFileSize = getMaxBytesFormatted(); + const maxTikaFileSize = getMaxTikaBytesFormatted(); return ( @@ -57,10 +58,17 @@ export const WelcomeContent: FC = ({ hasPermissionToImport }) => {

{hasPermissionToImport ? ( - + <> + +
+ + ) : ( = ({ hasPermissionToImport }) => {

- + @@ -87,8 +96,8 @@ export const WelcomeContent: FC = ({ hasPermissionToImport }) => {

@@ -103,8 +112,8 @@ export const WelcomeContent: FC = ({ hasPermissionToImport }) => {

@@ -119,23 +128,89 @@ export const WelcomeContent: FC = ({ hasPermissionToImport }) => {

+

+
+
+
+ + + + + + + +

+

+ +

+ + + + + + + +

+ +

+
+
+
+ + + + + + + +

+ +

+
+
+
+ + + + + + + +

+ +

+
+
+
); diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/analysis_summary/analysis_summary.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/analysis_summary/analysis_summary.tsx index 7f67f6f4f4868..8efacc7a5de06 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/analysis_summary/analysis_summary.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/analysis_summary/analysis_summary.tsx @@ -11,6 +11,7 @@ import React from 'react'; import { EuiTitle, EuiSpacer, EuiDescriptionList } from '@elastic/eui'; import type { FindFileStructureResponse } from '@kbn/file-upload-plugin/common'; +import { getTikaDisplayType } from '../../../../../common/utils/tika_utils'; import { FILE_FORMATS } from '../../../../../common/constants'; export const AnalysisSummary: FC<{ results: FindFileStructureResponse }> = ({ results }) => { @@ -64,7 +65,7 @@ function createDisplayItems(results: FindFileStructureResponse) { defaultMessage="Format" /> ), - description: results.format, + description: getFormatLabel(results), }); if (results.format === FILE_FORMATS.DELIMITED) { @@ -131,3 +132,9 @@ function createDisplayItems(results: FindFileStructureResponse) { return items; } + +function getFormatLabel(results: FindFileStructureResponse) { + return results.format === FILE_FORMATS.TIKA && results.document_type !== undefined + ? getTikaDisplayType(results.document_type).label + : results.format; +} diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/file_contents.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/file_contents.tsx index ef57ab6204c6d..412423a0ba0d8 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/file_contents.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/file_contents.tsx @@ -26,7 +26,7 @@ import { useGrokHighlighter } from './use_text_parser'; import { LINE_LIMIT } from './grok_highlighter'; interface Props { - data: string; + fileContents: string; format: string; numberOfLines: number; semiStructureTextData: SemiStructureTextData | null; @@ -51,7 +51,12 @@ function semiStructureTextDataGuard( ); } -export const FileContents: FC = ({ data, format, numberOfLines, semiStructureTextData }) => { +export const FileContents: FC = ({ + fileContents, + format, + numberOfLines, + semiStructureTextData, +}) => { let mode = EDITOR_MODE.TEXT; if (format === EDITOR_MODE.JSON) { mode = EDITOR_MODE.JSON; @@ -63,8 +68,8 @@ export const FileContents: FC = ({ data, format, numberOfLines, semiStruc semiStructureTextDataGuard(semiStructureTextData) ); const formattedData = useMemo( - () => limitByNumberOfLines(data, numberOfLines), - [data, numberOfLines] + () => limitByNumberOfLines(fileContents, numberOfLines), + [fileContents, numberOfLines] ); const [highlightedLines, setHighlightedLines] = useState(null); @@ -78,7 +83,7 @@ export const FileContents: FC = ({ data, format, numberOfLines, semiStruc semiStructureTextData!; grokHighlighter( - data, + fileContents, grokPattern!, mappings, ecsCompatibility, @@ -96,7 +101,7 @@ export const FileContents: FC = ({ data, format, numberOfLines, semiStruc setIsSemiStructureTextData(false); } }); - }, [data, semiStructureTextData, grokHighlighter, isSemiStructureTextData, isMounted]); + }, [fileContents, semiStructureTextData, grokHighlighter, isSemiStructureTextData, isMounted]); return ( <> diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/preview_pdf.ts b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/preview_pdf.ts new file mode 100644 index 0000000000000..7a850a9f5b965 --- /dev/null +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/preview_pdf.ts @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { HttpSetup } from '@kbn/core-http-browser'; + +const URL = '/internal/file_upload/preview_pdf_contents'; + +export async function previewPDF(http: HttpSetup, data: ArrayBuffer) { + const dataString: string = [].reduce.call( + new Uint8Array(data), + (p, c) => { + return p + String.fromCharCode(c); + }, + '' + ) as string; + const pdfBase64 = btoa(dataString); + + const { preview } = await http.fetch(URL, { + method: 'POST', + version: '1', + body: JSON.stringify({ + pdfBase64, + }), + }); + return preview; +} diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js index e6435c554fc63..e19b2cbceda33 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js @@ -28,8 +28,11 @@ import { createUrlOverrides, processResults, } from '../../../common/components/utils'; +import { analyzeTikaFile } from './tika_analyzer'; import { MODE } from './constants'; +import { FileSizeChecker } from './file_size_check'; +import { isTikaType } from '../../../../../common/utils/tika_utils'; export class FileDataVisualizerView extends Component { constructor(props) { @@ -40,7 +43,7 @@ export class FileDataVisualizerView extends Component { fileName: '', fileContents: '', data: [], - fileSize: 0, + base64Data: '', fileTooLarge: false, fileCouldNotBeRead: false, serverError: null, @@ -60,8 +63,6 @@ export class FileDataVisualizerView extends Component { this.originalSettings = { linesToSample: DEFAULT_LINES_TO_SAMPLE, }; - - this.maxFileUploadBytes = props.fileUpload.getMaxBytes(); } async componentDidMount() { @@ -85,7 +86,6 @@ export class FileDataVisualizerView extends Component { fileName: '', fileContents: '', data: [], - fileSize: 0, fileTooLarge: false, fileCouldNotBeRead: false, fileCouldNotBeReadPermissionError: false, @@ -102,17 +102,25 @@ export class FileDataVisualizerView extends Component { }; async loadFile(file) { - if (file.size <= this.maxFileUploadBytes) { + this.fileSizeChecker = new FileSizeChecker(this.props.fileUpload, file); + if (this.fileSizeChecker.check()) { try { const { data, fileContents } = await readFile(file); - this.setState({ - data, - fileContents, - fileName: file.name, - fileSize: file.size, - }); - - await this.analyzeFile(fileContents); + if (isTikaType(file.type)) { + this.setState({ + data, + fileName: file.name, + }); + + await this.analyzeTika(data); + } else { + this.setState({ + data, + fileContents, + fileName: file.name, + }); + await this.analyzeFile(fileContents); + } } catch (error) { this.setState({ loaded: false, @@ -126,7 +134,6 @@ export class FileDataVisualizerView extends Component { loading: false, fileTooLarge: true, fileName: file.name, - fileSize: file.size, }); } } @@ -206,6 +213,21 @@ export class FileDataVisualizerView extends Component { } } + async analyzeTika(data, isRetry = false) { + const { tikaResults, standardResults } = await analyzeTikaFile(data, this.props.fileUpload); + const serverSettings = processResults(standardResults); + this.originalSettings = serverSettings; + + this.setState({ + fileContents: tikaResults.content, + results: standardResults.results, + explanation: standardResults.explanation, + loaded: true, + loading: false, + fileCouldNotBeRead: isRetry, + }); + } + closeEditFlyout = () => { this.setState({ isEditFlyoutVisible: false }); }; @@ -258,7 +280,6 @@ export class FileDataVisualizerView extends Component { fileContents, data, fileName, - fileSize, fileTooLarge, fileCouldNotBeRead, serverError, @@ -287,9 +308,7 @@ export class FileDataVisualizerView extends Component { {loading && } - {fileTooLarge && ( - - )} + {fileTooLarge && } {fileCouldNotBeRead && loading === false && ( <> @@ -311,7 +330,7 @@ export class FileDataVisualizerView extends Component { results={results} explanation={explanation} fileName={fileName} - data={fileContents} + fileContents={fileContents} showEditFlyout={this.showEditFlyout} showExplanationFlyout={this.showExplanationFlyout} disableButtons={isEditFlyoutVisible || isExplanationFlyoutVisible} diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx index cb160a3e2763e..13c4ed5f7336f 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx @@ -11,18 +11,16 @@ import React from 'react'; import { EuiCallOut, EuiSpacer, EuiButtonEmpty, EuiHorizontalRule } from '@elastic/eui'; -import numeral from '@elastic/numeral'; import type { FindFileStructureErrorResponse } from '@kbn/file-upload-plugin/common'; -import { FILE_SIZE_DISPLAY_FORMAT } from '../../../../../common/constants'; +import type { FileSizeChecker } from './file_size_check'; interface FileTooLargeProps { - fileSize: number; - maxFileSize: number; + fileSizeChecker: FileSizeChecker; } -export const FileTooLarge: FC = ({ fileSize, maxFileSize }) => { - const fileSizeFormatted = numeral(fileSize).format(FILE_SIZE_DISPLAY_FORMAT); - const maxFileSizeFormatted = numeral(maxFileSize).format(FILE_SIZE_DISPLAY_FORMAT); +export const FileTooLarge: FC = ({ fileSizeChecker }) => { + const fileSizeFormatted = fileSizeChecker.fileSizeFormatted(); + const maxFileSizeFormatted = fileSizeChecker.maxFileSizeFormatted(); // Format the byte values, using the second format if the difference between // the file size and the max is so small that the formatted values are identical @@ -43,7 +41,7 @@ export const FileTooLarge: FC = ({ fileSize, maxFileSize }) =

); } else { - const diffFormatted = numeral(fileSize - maxFileSize).format(FILE_SIZE_DISPLAY_FORMAT); + const diffFormatted = fileSizeChecker.fileSizeDiffFormatted(); errorText = (

{ + const resp = await fileUpload.previewTikaFile(data); + const numLinesAnalyzed = (resp.content.match(/\n/g) || '').length + 1; + + return { + tikaResults: resp, + standardResults: { + results: { + format: FILE_FORMATS.TIKA, + document_type: resp.content_type, + charset: 'utf-8', + has_header_row: false, + has_byte_order_marker: false, + sample_start: '', + quote: '', + delimiter: '', + need_client_timezone: false, + num_lines_analyzed: numLinesAnalyzed, + num_messages_analyzed: 0, + field_stats: { + // @ts-expect-error semantic_text not supported + 'attachment.content': {}, + // @ts-expect-error semantic_text not supported + 'attachment.content_length': {}, + // @ts-expect-error semantic_text not supported + 'attachment.content_type': {}, + // @ts-expect-error semantic_text not supported + 'attachment.format': {}, + // @ts-expect-error semantic_text not supported + 'attachment.language': {}, + }, + mappings: { + properties: { + attachment: { + // @ts-expect-error semantic_text not supported + properties: { + content: { + type: 'text', + fields: { + keyword: { + type: 'keyword', + ignore_above: 256, + }, + }, + }, + content_length: { + type: 'long', + }, + content_type: { + type: 'text', + fields: { + keyword: { + type: 'keyword', + ignore_above: 256, + }, + }, + }, + format: { + type: 'text', + fields: { + keyword: { + type: 'keyword', + ignore_above: 256, + }, + }, + }, + language: { + type: 'text', + fields: { + keyword: { + type: 'keyword', + ignore_above: 256, + }, + }, + }, + }, + }, + }, + }, + ingest_pipeline: { + description: 'Ingest pipeline created by file data visualizer', + processors: [ + { + attachment: { + field: 'data', + remove_binary: true, + }, + }, + ], + }, + }, + }, + }; +} diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced/advanced.tsx similarity index 67% rename from x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced.tsx rename to x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced/advanced.tsx index 186198622a3ef..309145a374715 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced/advanced.tsx @@ -20,17 +20,18 @@ import { } from '@elastic/eui'; import type { FindFileStructureResponse } from '@kbn/file-upload-plugin/common'; -import type { CombinedField } from '../../../common/components/combined_fields'; -import { CombinedFieldsForm } from '../../../common/components/combined_fields'; -import { JsonEditor, EDITOR_MODE } from '../json_editor'; -import { CreateDataViewToolTip } from './create_data_view_tooltip'; -const EDITOR_HEIGHT = '300px'; +import type { CombinedField } from '../../../../common/components/combined_fields'; +import { CombinedFieldsForm } from '../../../../common/components/combined_fields'; + +import { CreateDataViewToolTip } from '../create_data_view_tooltip'; +import { IndexSettings, IngestPipeline, Mappings } from './inputs'; +import { SemanticTextInfo } from '../semantic_text_info'; interface Props { index: string; dataView: string; initialized: boolean; - onIndexChange(): void; + onIndexChange(index: string): void; createDataView: boolean; onCreateDataViewChange(): void; onDataViewChange(): void; @@ -70,7 +71,7 @@ export const AdvancedSettings: FC = ({ canCreateDataView, }) => { return ( - + <> = ({ )} value={index} disabled={initialized === true} - onChange={onIndexChange} + onChange={(e) => onIndexChange(e.target.value)} isInvalid={indexNameError !== ''} aria-label={i18n.translate( 'xpack.dataVisualizer.file.advancedImportSettings.indexNameAriaLabel', @@ -139,6 +140,8 @@ export const AdvancedSettings: FC = ({ /> + + = ({ isDisabled={initialized === true} /> + + = ({ /> - - ); -}; - -interface JsonEditorProps { - initialized: boolean; - data: string; - onChange(value: string): void; -} - -const IndexSettings: FC = ({ initialized, data, onChange }) => { - return ( - - - } - fullWidth - > - - - - ); -}; - -const Mappings: FC = ({ initialized, data, onChange }) => { - return ( - - - } - fullWidth - > - - - - ); -}; - -const IngestPipeline: FC = ({ initialized, data, onChange }) => { - return ( - - - } - fullWidth - > - - - + ); }; diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced/index.ts b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced/index.ts new file mode 100644 index 0000000000000..2e0fc86ab3ad2 --- /dev/null +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced/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 { AdvancedSettings } from './advanced'; diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced/inputs.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced/inputs.tsx new file mode 100644 index 0000000000000..7a0d952ef31db --- /dev/null +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced/inputs.tsx @@ -0,0 +1,96 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FormattedMessage } from '@kbn/i18n-react'; +import type { FC } from 'react'; +import React from 'react'; + +import { EuiFormRow } from '@elastic/eui'; +import { JsonEditor, EDITOR_MODE } from '../../json_editor'; + +const EDITOR_HEIGHT = '300px'; + +interface JsonEditorProps { + initialized: boolean; + data: string; + onChange(value: string): void; + indexName?: string; +} + +export const IndexSettings: FC = ({ initialized, data, onChange }) => { + return ( + + } + fullWidth + > + + + ); +}; + +export const Mappings: FC = ({ initialized, data, onChange, indexName }) => { + return ( + + ) : ( + + ) + } + fullWidth + > + + + ); +}; + +export const IngestPipeline: FC = ({ initialized, data, onChange }) => { + return ( + + } + fullWidth + > + + + ); +}; diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced/use_existing_indices.ts b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced/use_existing_indices.ts new file mode 100644 index 0000000000000..19526c799d2aa --- /dev/null +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced/use_existing_indices.ts @@ -0,0 +1,58 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useCallback, useState, useEffect } from 'react'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { useDataVisualizerKibana } from '../../../../kibana_context'; + +interface EsIndex { + name: string; + hidden: boolean; + frozen: boolean; +} + +type Pipeline = estypes.IngestPipelineConfig & { + name: string; +}; + +export function useExistingIndices() { + const { + services: { http }, + } = useDataVisualizerKibana(); + + const [indices, setIndices] = useState([]); + const [pipelines, setPipelines] = useState([]); + + const loadIndices = useCallback(() => { + http.get('/api/index_management/indices').then((resp) => { + setIndices(resp.filter((i) => !(i.hidden || i.frozen))); + }); + }, [http]); + + const loadPipelines = useCallback(() => { + http.get('/api/ingest_pipelines').then((resp) => { + setPipelines(resp.sort((a, b) => a.name.localeCompare(b.name))); + }); + }, [http]); + + useEffect(() => { + loadIndices(); + loadPipelines(); + }, [loadIndices, loadPipelines]); + + const getMapping = useCallback( + async (indexName: string) => { + const resp = await http.get( + `/api/index_management/mapping/${indexName}` + ); + return resp.mappings; + }, + [http] + ); + + return { indices, pipelines, getMapping }; +} diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/import_settings.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/import_settings.tsx index 381a3ff6e0488..a4c1187d014c8 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/import_settings.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/import_settings.tsx @@ -21,7 +21,7 @@ interface Props { index: string; dataView: string; initialized: boolean; - onIndexChange(): void; + onIndexChange(index: string): void; createDataView: boolean; onCreateDataViewChange(): void; onDataViewChange(): void; @@ -74,7 +74,7 @@ export const ImportSettings: FC = ({ defaultMessage: 'Simple', }), content: ( - + <> = ({ indexNameError={indexNameError} combinedFields={combinedFields} canCreateDataView={canCreateDataView} + results={results} /> - + ), }, { @@ -96,7 +97,7 @@ export const ImportSettings: FC = ({ defaultMessage: 'Advanced', }), content: ( - + <> = ({ results={results} canCreateDataView={canCreateDataView} /> - + ), }, ]; return ( - + <> {}} /> - + ); }; diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/semantic_text_info.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/semantic_text_info.tsx new file mode 100644 index 0000000000000..cf49c23a539db --- /dev/null +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/semantic_text_info.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 type { FC } from 'react'; +import React from 'react'; + +import type { FindFileStructureResponse } from '@kbn/file-upload-plugin/common'; +import { EuiCallOut, EuiLink, EuiSpacer } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { FILE_FORMATS } from '../../../../../common/constants'; + +interface Props { + results: FindFileStructureResponse; +} + +export const SemanticTextInfo: FC = ({ results }) => { + return results.format === FILE_FORMATS.TIKA ? ( + <> + + + + } + color="primary" + iconType="iInCircle" + > + + semantic_text + + ), + }} + /> +
+ +
+ + + + ) : null; +}; diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/simple.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/simple.tsx index 1ae343155e87c..ecbfb2ee8ed85 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/simple.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/simple.tsx @@ -11,19 +11,22 @@ import type { FC } from 'react'; import React from 'react'; import { EuiFieldText, EuiFormRow, EuiCheckbox, EuiSpacer } from '@elastic/eui'; +import type { FindFileStructureResponse } from '@kbn/file-upload-plugin/common'; import type { CombinedField } from '../../../common/components/combined_fields'; import { CombinedFieldsReadOnlyForm } from '../../../common/components/combined_fields'; import { CreateDataViewToolTip } from './create_data_view_tooltip'; +import { SemanticTextInfo } from './semantic_text_info'; interface Props { index: string; initialized: boolean; - onIndexChange(): void; + onIndexChange(i: string): void; createDataView: boolean; onCreateDataViewChange(): void; indexNameError: string; combinedFields: CombinedField[]; canCreateDataView: boolean; + results: FindFileStructureResponse; } export const SimpleSettings: FC = ({ @@ -35,6 +38,7 @@ export const SimpleSettings: FC = ({ indexNameError, combinedFields, canCreateDataView, + results, }) => { return ( @@ -57,7 +61,7 @@ export const SimpleSettings: FC = ({ )} value={index} disabled={initialized === true} - onChange={onIndexChange} + onChange={(e) => onIndexChange(e.target.value)} isInvalid={indexNameError !== ''} aria-label={i18n.translate( 'xpack.dataVisualizer.file.simpleImportSettings.indexNameAriaLabel', @@ -87,7 +91,7 @@ export const SimpleSettings: FC = ({ /> - + diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_summary/import_summary.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_summary/import_summary.tsx index a1f6693e0bb9b..b71c2433f4ce0 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_summary/import_summary.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_summary/import_summary.tsx @@ -16,7 +16,7 @@ import { Failures } from './failures'; interface Props { index: string; dataView: string; - ingestPipelineId: string; + pipelineId: string; docCount: number; importFailures: DocFailure[]; createDataView: boolean; @@ -26,7 +26,7 @@ interface Props { export const ImportSummary: FC = ({ index, dataView, - ingestPipelineId, + pipelineId, docCount, importFailures, createDataView, @@ -35,7 +35,7 @@ export const ImportSummary: FC = ({ const items = createDisplayItems( index, dataView, - ingestPipelineId, + pipelineId, docCount, importFailures, createDataView, @@ -99,7 +99,7 @@ export const ImportSummary: FC = ({ function createDisplayItems( index: string, dataView: string, - ingestPipelineId: string, + pipelineId: string, docCount: number, importFailures: DocFailure[], createDataView: boolean, @@ -134,7 +134,7 @@ function createDisplayItems( defaultMessage="Ingest pipeline" /> ), - description: ingestPipelineId, + description: pipelineId, }); } diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import.ts b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import.ts new file mode 100644 index 0000000000000..f4cbe2f03e966 --- /dev/null +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import.ts @@ -0,0 +1,242 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { DataViewsServicePublic } from '@kbn/data-views-plugin/public/types'; +import type { + FindFileStructureResponse, + IngestPipeline, +} from '@kbn/file-upload-plugin/common/types'; +import type { FileUploadStartApi } from '@kbn/file-upload-plugin/public/api'; +import { i18n } from '@kbn/i18n'; +import { IMPORT_STATUS } from '../import_progress/import_progress'; + +interface Props { + data: ArrayBuffer; + results: FindFileStructureResponse; + dataViewsContract: DataViewsServicePublic; + fileUpload: FileUploadStartApi; +} + +interface Config { + index: string; + dataView: string; + createDataView: boolean; + indexSettingsString: string; + mappingsString: string; + pipelineString: string; + pipelineId: string | null; +} + +export async function importData(props: Props, config: Config, setState: (state: unknown) => void) { + const { data, results, dataViewsContract, fileUpload } = props; + const { + index, + dataView, + createDataView, + indexSettingsString, + mappingsString, + pipelineString, + pipelineId, + } = config; + const { format } = results; + + const errors = []; + + if (index === '') { + return; + } + + if ( + (await fileUpload.hasImportPermission({ + checkCreateDataView: createDataView, + checkHasManagePipeline: true, + indexName: index, + })) === false + ) { + errors.push( + i18n.translate('xpack.dataVisualizer.file.importView.importPermissionError', { + defaultMessage: 'You do not have permission to create or import data into index {index}.', + values: { + index, + }, + }) + ); + setState({ + permissionCheckStatus: IMPORT_STATUS.FAILED, + importing: false, + imported: false, + errors, + }); + return; + } + + setState({ + importing: true, + imported: false, + reading: true, + initialized: true, + permissionCheckStatus: IMPORT_STATUS.COMPLETE, + }); + + let success = true; + + let settings = {}; + let mappings = {}; + let pipeline = {}; + + try { + settings = JSON.parse(indexSettingsString); + } catch (error) { + success = false; + const parseError = i18n.translate('xpack.dataVisualizer.file.importView.parseSettingsError', { + defaultMessage: 'Error parsing settings:', + }); + errors.push(`${parseError} ${error.message}`); + } + + try { + mappings = JSON.parse(mappingsString); + } catch (error) { + success = false; + const parseError = i18n.translate('xpack.dataVisualizer.file.importView.parseMappingsError', { + defaultMessage: 'Error parsing mappings:', + }); + errors.push(`${parseError} ${error.message}`); + } + + try { + pipeline = JSON.parse(pipelineString); + } catch (error) { + success = false; + const parseError = i18n.translate('xpack.dataVisualizer.file.importView.parsePipelineError', { + defaultMessage: 'Error parsing ingest pipeline:', + }); + errors.push(`${parseError} ${error.message}`); + } + + setState({ + parseJSONStatus: getSuccess(success), + }); + + if (success === false) { + return; + } + + const importer = await fileUpload.importerFactory(format, { + excludeLinesPattern: results.exclude_lines_pattern, + multilineStartPattern: results.multiline_start_pattern, + }); + + const readResp = importer.read(data); + success = readResp.success; + setState({ + readStatus: getSuccess(success), + reading: false, + importer, + }); + + if (success === false) { + return; + } + + const initializeImportResp = await importer.initializeImport( + index, + settings, + mappings, + pipeline as IngestPipeline + ); + + const timeFieldName = importer.getTimeField(); + setState({ timeFieldName }); + + const indexCreated = initializeImportResp.index !== undefined; + setState({ + indexCreatedStatus: getSuccess(indexCreated), + }); + + const pipelineCreated = initializeImportResp.pipelineId !== undefined; + if (indexCreated) { + setState({ + ingestPipelineCreatedStatus: pipelineCreated ? IMPORT_STATUS.COMPLETE : IMPORT_STATUS.FAILED, + pipelineId: pipelineCreated ? initializeImportResp.pipelineId : '', + }); + } + success = indexCreated && pipelineCreated; + + if (success === false) { + errors.push(initializeImportResp.error); + return; + } + + const importResp = await importer.import( + initializeImportResp.id, + index, + pipelineId ?? initializeImportResp.pipelineId, + (progress: number) => { + setState({ + uploadProgress: progress, + }); + } + ); + success = importResp.success; + setState({ + uploadStatus: getSuccess(importResp.success), + importFailures: importResp.failures, + docCount: importResp.docCount, + }); + + if (success === false) { + errors.push(importResp.error); + return; + } + + if (createDataView) { + const dataViewName = dataView === '' ? index : dataView; + const dataViewResp = await createKibanaDataView(dataViewName, dataViewsContract, timeFieldName); + success = dataViewResp.success; + setState({ + dataViewCreatedStatus: dataViewResp.success ? IMPORT_STATUS.COMPLETE : IMPORT_STATUS.FAILED, + dataViewId: dataViewResp.id, + }); + if (success === false) { + errors.push(dataViewResp.error); + } + } + + setState({ + importing: false, + imported: success, + errors, + }); +} + +async function createKibanaDataView( + dataViewName: string, + dataViewsContract: DataViewsServicePublic, + timeFieldName?: string +) { + try { + const emptyPattern = await dataViewsContract.createAndSave({ + title: dataViewName, + timeFieldName, + }); + + return { + success: true, + id: emptyPattern.id, + }; + } catch (error) { + return { + success: false, + error, + }; + } +} + +function getSuccess(success: boolean) { + return success ? IMPORT_STATUS.COMPLETE : IMPORT_STATUS.FAILED; +} diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js index 728b9fcbc6d75..aecf755c1c7c1 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js @@ -20,7 +20,6 @@ import { EuiButtonEmpty, } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; import { debounce } from 'lodash'; import { ResultsLinks } from '../../../common/components/results_links'; import { FilebeatConfigFlyout } from '../../../common/components/filebeat_config_flyout'; @@ -35,6 +34,8 @@ import { getDefaultCombinedFields, } from '../../../common/components/combined_fields'; import { MODE as DATAVISUALIZER_MODE } from '../file_data_visualizer_view/constants'; +import { importData } from './import'; +import { FILE_FORMATS } from '../../../../../common/constants'; const DEFAULT_INDEX_SETTINGS = {}; const CONFIG_MODE = { SIMPLE: 0, ADVANCED: 1 }; @@ -57,7 +58,7 @@ const DEFAULT_STATE = { createDataView: true, dataView: '', dataViewId: '', - ingestPipelineId: '', + pipelineId: null, errors: [], importFailures: [], docCount: 0, @@ -74,6 +75,7 @@ const DEFAULT_STATE = { checkingValidIndex: false, combinedFields: [], importer: undefined, + createPipeline: true, }; export class ImportView extends Component { @@ -96,228 +98,31 @@ export class ImportView extends Component { }; clickImport = () => { - this.import(); - }; - - // TODO - sort this function out. it's a mess - async import() { const { data, results, dataViewsContract, fileUpload } = this.props; + const { + index, + dataView, + createDataView, + indexSettingsString, + mappingsString, + pipelineString, + pipelineId, + } = this.state; - const { format } = results; - let { timeFieldName } = this.state; - const { index, dataView, createDataView, indexSettingsString, mappingsString, pipelineString } = - this.state; - - const errors = []; - - if (index !== '') { - this.setState( - { - importing: true, - errors, - }, - async () => { - // check to see if the user has permission to create and ingest data into the specified index - if ( - (await fileUpload.hasImportPermission({ - checkCreateDataView: createDataView, - checkHasManagePipeline: true, - indexName: index, - })) === false - ) { - errors.push( - i18n.translate('xpack.dataVisualizer.file.importView.importPermissionError', { - defaultMessage: - 'You do not have permission to create or import data into index {index}.', - values: { - index, - }, - }) - ); - this.setState({ - permissionCheckStatus: IMPORT_STATUS.FAILED, - importing: false, - imported: false, - errors, - }); - return; - } - - this.setState( - { - importing: true, - imported: false, - reading: true, - initialized: true, - permissionCheckStatus: IMPORT_STATUS.COMPLETE, - }, - () => { - setTimeout(async () => { - let success = true; - const createPipeline = pipelineString !== ''; - - let settings = {}; - let mappings = {}; - let pipeline = {}; - - try { - settings = JSON.parse(indexSettingsString); - } catch (error) { - success = false; - const parseError = i18n.translate( - 'xpack.dataVisualizer.file.importView.parseSettingsError', - { - defaultMessage: 'Error parsing settings:', - } - ); - errors.push(`${parseError} ${error.message}`); - } - - try { - mappings = JSON.parse(mappingsString); - } catch (error) { - success = false; - const parseError = i18n.translate( - 'xpack.dataVisualizer.file.importView.parseMappingsError', - { - defaultMessage: 'Error parsing mappings:', - } - ); - errors.push(`${parseError} ${error.message}`); - } - - try { - if (createPipeline) { - pipeline = JSON.parse(pipelineString); - } - } catch (error) { - success = false; - const parseError = i18n.translate( - 'xpack.dataVisualizer.file.importView.parsePipelineError', - { - defaultMessage: 'Error parsing ingest pipeline:', - } - ); - errors.push(`${parseError} ${error.message}`); - } - - this.setState({ - parseJSONStatus: success ? IMPORT_STATUS.COMPLETE : IMPORT_STATUS.FAILED, - }); - - if (success) { - const importer = await fileUpload.importerFactory(format, { - excludeLinesPattern: results.exclude_lines_pattern, - multilineStartPattern: results.multiline_start_pattern, - }); - if (importer !== undefined) { - const readResp = importer.read(data, this.setReadProgress); - success = readResp.success; - this.setState({ - readStatus: success ? IMPORT_STATUS.COMPLETE : IMPORT_STATUS.FAILED, - reading: false, - importer, - }); - - if (readResp.success === false) { - console.error(readResp.error); - errors.push(readResp.error); - } - - if (success) { - const initializeImportResp = await importer.initializeImport( - index, - settings, - mappings, - pipeline - ); - - timeFieldName = importer.getTimeField(); - this.setState({ timeFieldName }); - - const indexCreated = initializeImportResp.index !== undefined; - this.setState({ - indexCreatedStatus: indexCreated - ? IMPORT_STATUS.COMPLETE - : IMPORT_STATUS.FAILED, - }); - - if (createPipeline) { - const pipelineCreated = initializeImportResp.pipelineId !== undefined; - if (indexCreated) { - this.setState({ - ingestPipelineCreatedStatus: pipelineCreated - ? IMPORT_STATUS.COMPLETE - : IMPORT_STATUS.FAILED, - ingestPipelineId: pipelineCreated - ? initializeImportResp.pipelineId - : '', - }); - } - success = indexCreated && pipelineCreated; - } else { - success = indexCreated; - } - - if (success) { - const importId = initializeImportResp.id; - const pipelineId = initializeImportResp.pipelineId; - const importResp = await importer.import( - importId, - index, - pipelineId, - this.setImportProgress - ); - success = importResp.success; - this.setState({ - uploadStatus: importResp.success - ? IMPORT_STATUS.COMPLETE - : IMPORT_STATUS.FAILED, - importFailures: importResp.failures, - docCount: importResp.docCount, - }); - - if (success) { - if (createDataView) { - const dataViewName = dataView === '' ? index : dataView; - const dataViewResp = await createKibanaDataView( - dataViewName, - dataViewsContract, - timeFieldName - ); - success = dataViewResp.success; - this.setState({ - dataViewCreatedStatus: dataViewResp.success - ? IMPORT_STATUS.COMPLETE - : IMPORT_STATUS.FAILED, - dataViewId: dataViewResp.id, - }); - if (dataViewResp.success === false) { - errors.push(dataViewResp.error); - } - } - } else { - errors.push(importResp.error); - } - } else { - errors.push(initializeImportResp.error); - } - } - } - } - - this.setState({ - importing: false, - imported: success, - errors, - }); - }, 500); - } - ); - } - ); - } - } + importData( + { data, results, dataViewsContract, fileUpload }, + { + index, + dataView, + createDataView, + indexSettingsString, + mappingsString, + pipelineString, + pipelineId, + }, + (state) => this.setState(state) + ); + }; onConfigModeChange = (configMode) => { this.setState({ @@ -325,8 +130,7 @@ export class ImportView extends Component { }); }; - onIndexChange = (e) => { - const index = e.target.value; + onIndexChange = (index) => { this.setState({ index, checkingValidIndex: true, @@ -385,16 +189,22 @@ export class ImportView extends Component { }); }; - onCombinedFieldsChange = (combinedFields) => { - this.setState({ combinedFields }); + onPipelineIdChange = (text) => { + this.setState({ + pipelineId: text, + }); }; - setImportProgress = (progress) => { + onCreatePipelineChange = (b) => { this.setState({ - uploadProgress: progress, + createPipeline: b, }); }; + onCombinedFieldsChange = (combinedFields) => { + this.setState({ combinedFields }); + }; + setReadProgress = (progress) => { this.setState({ readProgress: progress, @@ -409,6 +219,10 @@ export class ImportView extends Component { this.setState({ isFilebeatFlyoutVisible: false }); }; + closeFilebeatFlyout = () => { + this.setState({ isFilebeatFlyoutVisible: false }); + }; + async loadDataViewNames() { try { const dataViewNames = await this.dataViewsContract.getTitles(); @@ -423,7 +237,7 @@ export class ImportView extends Component { index, dataView, dataViewId, - ingestPipelineId, + pipelineId, importing, imported, reading, @@ -450,10 +264,9 @@ export class ImportView extends Component { checkingValidIndex, combinedFields, importer, + createPipeline, } = this.state; - const createPipeline = pipelineString !== ''; - const statuses = { reading, readStatus, @@ -567,13 +380,15 @@ export class ImportView extends Component { - {importer !== undefined && importer.initialized() && ( - - )} + {importer !== undefined && + importer.initialized() && + this.props.results.format !== FILE_FORMATS.TIKA && ( + + )} {imported === true && ( @@ -582,7 +397,7 @@ export class ImportView extends Component { {isFilebeatFlyoutVisible && ( )} @@ -648,25 +464,6 @@ export class ImportView extends Component { } } -async function createKibanaDataView(dataViewName, dataViewsContract, timeFieldName) { - try { - const emptyPattern = await dataViewsContract.createAndSave({ - title: dataViewName, - timeFieldName, - }); - - return { - success: true, - id: emptyPattern.id, - }; - } catch (error) { - return { - success: false, - error, - }; - } -} - function getDefaultState(state, results, capabilities) { const indexSettingsString = state.indexSettingsString === '' diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/results_view.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/results_view.tsx index 0c55b838e37b8..5e8658ab85433 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/results_view.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/results_view.tsx @@ -28,7 +28,8 @@ import { FieldsStatsGrid } from '../../../common/components/fields_stats_grid'; import { MODE as DATAVISUALIZER_MODE } from '../file_data_visualizer_view/constants'; interface Props { - data: string; + fileContents: string; + data: ArrayBuffer; fileName: string; results: FindFileStructureResponse; showEditFlyout(): void; @@ -40,7 +41,7 @@ interface Props { } export const ResultsView: FC = ({ - data, + fileContents, fileName, results, showEditFlyout, @@ -87,7 +88,7 @@ export const ResultsView: FC = ({

= ({ - showExplanationFlyout()} disabled={disableButtons}> - - + {results.format !== FILE_FORMATS.TIKA ? ( + showExplanationFlyout()} disabled={disableButtons}> + + + ) : null} - + {results.format !== FILE_FORMATS.TIKA ? ( + <> + - - -

- -

-
+ + +

+ +

+
- -
+ +
+ + ) : null}
); diff --git a/x-pack/plugins/data_visualizer/server/routes.ts b/x-pack/plugins/data_visualizer/server/routes.ts index c4e286f9671d1..a21f1ed93c1d3 100644 --- a/x-pack/plugins/data_visualizer/server/routes.ts +++ b/x-pack/plugins/data_visualizer/server/routes.ts @@ -66,4 +66,32 @@ export function routes(coreSetup: CoreSetup, logger: Logger) } } ); + + router.versioned + .get({ + path: '/internal/data_visualizer/inference_services', + access: 'internal', + options: { + tags: ['access:fileUpload:analyzeFile'], + }, + }) + .addVersion( + { + version: '1', + validate: false, + }, + async (context, request, response) => { + try { + const esClient = (await context.core).elasticsearch.client; + // @ts-expect-error types are wrong + const { endpoints } = await esClient.asCurrentUser.inference.getModel({ + inference_id: '_all', + }); + + return response.ok({ body: endpoints }); + } catch (e) { + return response.customError(wrapError(e)); + } + } + ); } diff --git a/x-pack/plugins/data_visualizer/tsconfig.json b/x-pack/plugins/data_visualizer/tsconfig.json index ed8a3540f6d8a..79060fbbe53f9 100644 --- a/x-pack/plugins/data_visualizer/tsconfig.json +++ b/x-pack/plugins/data_visualizer/tsconfig.json @@ -83,6 +83,7 @@ "@kbn/shared-ux-utility", "@kbn/search-types", "@kbn/unified-field-list", + "@kbn/core-http-browser", "@kbn/content-management-utils", "@kbn/core-lifecycle-browser", "@kbn/presentation-containers", diff --git a/x-pack/plugins/file_upload/common/constants.ts b/x-pack/plugins/file_upload/common/constants.ts index 725cd3f81a650..af0c3c07db6c8 100644 --- a/x-pack/plugins/file_upload/common/constants.ts +++ b/x-pack/plugins/file_upload/common/constants.ts @@ -8,9 +8,10 @@ export const UI_SETTING_MAX_FILE_SIZE = 'fileUpload:maxFileSize'; export const MB = Math.pow(2, 20); export const MAX_FILE_SIZE = '100MB'; -export const MAX_FILE_SIZE_BYTES = 104857600; // 100MB +export const MAX_FILE_SIZE_BYTES = 524288000; // 500MB export const ABSOLUTE_MAX_FILE_SIZE_BYTES = 1073741274; // 1GB export const FILE_SIZE_DISPLAY_FORMAT = '0,0.[0] b'; +export const MAX_TIKA_FILE_SIZE_BYTES = 62914560; // 60MB // Value to use in the Elasticsearch index mapping meta data to identify the // index as having been created by the ML File Data Visualizer. @@ -20,5 +21,5 @@ export const FILE_FORMATS = { DELIMITED: 'delimited', NDJSON: 'ndjson', SEMI_STRUCTURED_TEXT: 'semi_structured_text', - // XML: 'xml', + TIKA: 'tika', }; diff --git a/x-pack/plugins/file_upload/common/types.ts b/x-pack/plugins/file_upload/common/types.ts index f752d5e5a8507..409b5fcac80a1 100644 --- a/x-pack/plugins/file_upload/common/types.ts +++ b/x-pack/plugins/file_upload/common/types.ts @@ -28,6 +28,7 @@ export interface FindFileStructureResponse { has_header_row: boolean; has_byte_order_marker: boolean; format: string; + document_type?: string; field_stats: { [fieldName: string]: { count: number; @@ -56,6 +57,7 @@ export interface FindFileStructureResponse { }; }; }; + ingest_pipeline: IngestPipeline; quote: string; delimiter: string; need_client_timezone: boolean; @@ -123,14 +125,32 @@ export interface ImportDocMessage { message: string; } -export type ImportDoc = ImportDocMessage | string | object; +export interface ImportDocTika { + data: string; +} + +export type ImportDoc = ImportDocMessage | ImportDocTika | string | object; export interface IngestPipelineWrapper { id: string; - pipeline: IngestPipeline; + pipeline?: IngestPipeline; } export interface IngestPipeline { description: string; processors: any[]; + isManaged?: boolean; + name?: string; +} + +export interface PreviewTikaResponse { + date?: string; + content_type: string; + author?: string; + format: string; + modified: string; + language: string; + creator_tool?: string; + content: string; + content_length: number; } diff --git a/x-pack/plugins/file_upload/public/api/index.ts b/x-pack/plugins/file_upload/public/api/index.ts index 4d6483f2b2a50..36314ae849680 100644 --- a/x-pack/plugins/file_upload/public/api/index.ts +++ b/x-pack/plugins/file_upload/public/api/index.ts @@ -5,10 +5,20 @@ * 2.0. */ +import { fromByteArray } from 'base64-js'; import { lazyLoadModules } from '../lazy_load_bundle'; import type { IImporter, ImportFactoryOptions } from '../importer'; -import type { HasImportPermission, FindFileStructureResponse } from '../../common/types'; -import type { getMaxBytes, getMaxBytesFormatted } from '../importer/get_max_bytes'; +import type { + HasImportPermission, + FindFileStructureResponse, + PreviewTikaResponse, +} from '../../common/types'; +import type { + getMaxBytes, + getMaxBytesFormatted, + getMaxTikaBytes, + getMaxTikaBytesFormatted, +} from '../importer/get_max_bytes'; import { GeoUploadWizardAsyncWrapper } from './geo_upload_wizard_async_wrapper'; import { IndexNameFormAsyncWrapper } from './index_name_form_async_wrapper'; @@ -18,10 +28,13 @@ export interface FileUploadStartApi { importerFactory: typeof importerFactory; getMaxBytes: typeof getMaxBytes; getMaxBytesFormatted: typeof getMaxBytesFormatted; + getMaxTikaBytes: typeof getMaxTikaBytes; + getMaxTikaBytesFormatted: typeof getMaxTikaBytesFormatted; hasImportPermission: typeof hasImportPermission; checkIndexExists: typeof checkIndexExists; getTimeFieldRange: typeof getTimeFieldRange; analyzeFile: typeof analyzeFile; + previewTikaFile: typeof previewTikaFile; } export interface GetTimeFieldRangeResponse { @@ -36,7 +49,7 @@ export const IndexNameFormComponent = IndexNameFormAsyncWrapper; export async function importerFactory( format: string, options: ImportFactoryOptions -): Promise { +): Promise { const fileUploadModules = await lazyLoadModules(); return fileUploadModules.importerFactory(format, options); } @@ -62,6 +75,24 @@ export async function analyzeFile( }); } +export async function previewTikaFile( + data: ArrayBuffer, + params: Record = {} +): Promise { + const { getHttp } = await lazyLoadModules(); + const base64File = fromByteArray(new Uint8Array(data)); + const body = JSON.stringify({ + base64File, + }); + return await getHttp().fetch({ + path: `/internal/file_upload/preview_tika_contents`, + method: 'POST', + version: '1', + body, + query: params, + }); +} + export async function hasImportPermission(params: HasImportPermissionParams): Promise { const fileUploadModules = await lazyLoadModules(); try { diff --git a/x-pack/plugins/file_upload/public/importer/get_max_bytes.ts b/x-pack/plugins/file_upload/public/importer/get_max_bytes.ts index e05f1978dcf95..d4f7457384533 100644 --- a/x-pack/plugins/file_upload/public/importer/get_max_bytes.ts +++ b/x-pack/plugins/file_upload/public/importer/get_max_bytes.ts @@ -12,6 +12,7 @@ import { MAX_FILE_SIZE, MAX_FILE_SIZE_BYTES, UI_SETTING_MAX_FILE_SIZE, + MAX_TIKA_FILE_SIZE_BYTES, } from '../../common/constants'; import { getUiSettings } from '../kibana_services'; @@ -28,3 +29,11 @@ export function getMaxBytes() { export function getMaxBytesFormatted() { return numeral(getMaxBytes()).format(FILE_SIZE_DISPLAY_FORMAT); } + +export function getMaxTikaBytes() { + return MAX_TIKA_FILE_SIZE_BYTES; +} + +export function getMaxTikaBytesFormatted() { + return numeral(getMaxTikaBytes()).format(FILE_SIZE_DISPLAY_FORMAT); +} diff --git a/x-pack/plugins/file_upload/public/importer/importer.ts b/x-pack/plugins/file_upload/public/importer/importer.ts index 94a15b9905ff0..6337e892868fe 100644 --- a/x-pack/plugins/file_upload/public/importer/importer.ts +++ b/x-pack/plugins/file_upload/public/importer/importer.ts @@ -27,7 +27,7 @@ const DEFAULT_TIME_FIELD = '@timestamp'; export abstract class Importer implements IImporter { protected _docArray: ImportDoc[] = []; - private _chunkSize = CHUNK_SIZE; + protected _chunkSize = CHUNK_SIZE; private _index: string | undefined; private _pipeline: IngestPipeline | undefined; private _timeFieldName: string | undefined; @@ -282,6 +282,10 @@ function updatePipelineTimezone(ingestPipeline: IngestPipeline) { } function createDocumentChunks(docArray: ImportDoc[], chunkSize: number) { + if (chunkSize === 0) { + return [docArray]; + } + const chunks: ImportDoc[][] = []; // chop docArray into chunks const tempChunks = chunk(docArray, chunkSize); diff --git a/x-pack/plugins/file_upload/public/importer/importer_factory.ts b/x-pack/plugins/file_upload/public/importer/importer_factory.ts index 0ad05676244be..28c7364b2eb21 100644 --- a/x-pack/plugins/file_upload/public/importer/importer_factory.ts +++ b/x-pack/plugins/file_upload/public/importer/importer_factory.ts @@ -7,6 +7,7 @@ import { MessageImporter } from './message_importer'; import { NdjsonImporter } from './ndjson_importer'; +import { TikaImporter } from './tika_importer'; import { ImportFactoryOptions } from './types'; import { FILE_FORMATS } from '../../common/constants'; @@ -21,7 +22,9 @@ export function importerFactory(format: string, options: ImportFactoryOptions) { return new MessageImporter(options); case FILE_FORMATS.NDJSON: return new NdjsonImporter(); + case FILE_FORMATS.TIKA: + return new TikaImporter(); default: - return; + throw new Error('Importer not found for format'); } } diff --git a/x-pack/plugins/file_upload/public/importer/tika_importer.ts b/x-pack/plugins/file_upload/public/importer/tika_importer.ts new file mode 100644 index 0000000000000..78ccf86003385 --- /dev/null +++ b/x-pack/plugins/file_upload/public/importer/tika_importer.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 { fromByteArray } from 'base64-js'; +import { ImportDocTika } from '../../common/types'; +import { Importer } from './importer'; +import { CreateDocsResponse } from './types'; + +export class TikaImporter extends Importer { + constructor() { + super(); + } + + public read(data: ArrayBuffer) { + this._chunkSize = 0; + const pdfBase64 = fromByteArray(new Uint8Array(data)); + const { success, docs } = this._createDocs(pdfBase64); + if (success) { + this._docArray = this._docArray.concat(docs); + } else { + return { success: false }; + } + return { success: true }; + } + + protected _createDocs(base64String: string): CreateDocsResponse { + const remainder = 0; + try { + const docs = [{ data: base64String }]; + return { + success: true, + docs, + remainder, + }; + } catch (error) { + return { + success: false, + docs: [], + remainder, + error, + }; + } + } +} diff --git a/x-pack/plugins/file_upload/public/lazy_load_bundle/index.ts b/x-pack/plugins/file_upload/public/lazy_load_bundle/index.ts index 0066a2efbc5cb..d7886ec35b675 100644 --- a/x-pack/plugins/file_upload/public/lazy_load_bundle/index.ts +++ b/x-pack/plugins/file_upload/public/lazy_load_bundle/index.ts @@ -35,7 +35,7 @@ let loadModulesPromise: Promise; export interface LazyLoadedFileUploadModules { GeoUploadWizard: React.ComponentType; IndexNameForm: React.ComponentType; - importerFactory: (format: string, options: ImportFactoryOptions) => IImporter | undefined; + importerFactory: (format: string, options: ImportFactoryOptions) => IImporter; getHttp: () => HttpStart; } diff --git a/x-pack/plugins/file_upload/public/plugin.ts b/x-pack/plugins/file_upload/public/plugin.ts index cbf64371fc4c3..cfb3e2fcf723d 100644 --- a/x-pack/plugins/file_upload/public/plugin.ts +++ b/x-pack/plugins/file_upload/public/plugin.ts @@ -16,9 +16,15 @@ import { checkIndexExists, getTimeFieldRange, analyzeFile, + previewTikaFile, } from './api'; import { setStartServices } from './kibana_services'; -import { getMaxBytes, getMaxBytesFormatted } from './importer/get_max_bytes'; +import { + getMaxBytes, + getMaxBytesFormatted, + getMaxTikaBytes, + getMaxTikaBytesFormatted, +} from './importer/get_max_bytes'; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface FileUploadSetupDependencies {} @@ -48,10 +54,13 @@ export class FileUploadPlugin importerFactory, getMaxBytes, getMaxBytesFormatted, + getMaxTikaBytes, + getMaxTikaBytesFormatted, hasImportPermission, checkIndexExists, getTimeFieldRange, analyzeFile, + previewTikaFile, }; } } diff --git a/x-pack/plugins/file_upload/server/preview_tika_contents.ts b/x-pack/plugins/file_upload/server/preview_tika_contents.ts new file mode 100644 index 0000000000000..f99a070d90414 --- /dev/null +++ b/x-pack/plugins/file_upload/server/preview_tika_contents.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 type { IScopedClusterClient } from '@kbn/core/server'; +import type { PreviewTikaResponse } from '../common/types'; + +/** + * Returns the contents of a file using the attachment ingest processor + * @param client IScopedClusterClient + * @param base64File bae64 encoded file + */ +export async function previewTikaContents( + client: IScopedClusterClient, + base64File: string +): Promise { + const pipeline = { + description: '', + processors: [ + { + attachment: { + field: 'data', + remove_binary: true, + }, + }, + ], + }; + + const resp = await client.asInternalUser.ingest.simulate({ + pipeline, + docs: [ + { + _index: 'index', + _id: 'id', + _source: { + data: base64File, + }, + }, + ], + }); + + if (!resp.docs[0].doc?._source.attachment) { + throw new Error('Failed to extract text from file.'); + } + + return resp.docs[0].doc?._source.attachment; +} diff --git a/x-pack/plugins/file_upload/server/routes.ts b/x-pack/plugins/file_upload/server/routes.ts index 6d80f8f05cb3a..4336049b7fe58 100644 --- a/x-pack/plugins/file_upload/server/routes.ts +++ b/x-pack/plugins/file_upload/server/routes.ts @@ -12,7 +12,7 @@ import type { IndicesIndexSettings, MappingTypeMapping, } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { MAX_FILE_SIZE_BYTES } from '../common/constants'; +import { MAX_FILE_SIZE_BYTES, MAX_TIKA_FILE_SIZE_BYTES } from '../common/constants'; import type { IngestPipelineWrapper, InputData } from '../common/types'; import { wrapError } from './error_wrapper'; import { importDataProvider } from './import_data'; @@ -29,6 +29,7 @@ import { import type { StartDeps } from './types'; import { checkFileUploadPrivileges } from './check_privileges'; import { previewIndexTimeRange } from './preview_index_time_range'; +import { previewTikaContents } from './preview_tika_contents'; function importData( client: IScopedClusterClient, @@ -314,6 +315,51 @@ export function fileUploadRoutes(coreSetup: CoreSetup, logge const esClient = (await context.core).elasticsearch.client; const resp = await previewIndexTimeRange(esClient, timeField, pipeline, docs); + return response.ok({ + body: resp, + }); + } catch (e) { + return response.customError(wrapError(e)); + } + } + ); + + /** + * @apiGroup FileDataVisualizer + * + * @api {post} /internal/file_upload/preview_tika_contents Returns the contents of a file using the attachment ingest processor + * @apiName PreviewTikaContents + * @apiDescription Preview the contents of a file using the attachment ingest processor + */ + router.versioned + .post({ + path: '/internal/file_upload/preview_tika_contents', + access: 'internal', + options: { + tags: ['access:fileUpload:analyzeFile'], + body: { + accepts: ['application/json'], + maxBytes: MAX_TIKA_FILE_SIZE_BYTES, + }, + }, + }) + .addVersion( + { + version: '1', + validate: { + request: { + body: schema.object({ + base64File: schema.string(), + }), + }, + }, + }, + async (context, request, response) => { + try { + const { base64File } = request.body; + const esClient = (await context.core).elasticsearch.client; + const resp = await previewTikaContents(esClient, base64File); + return response.ok({ body: resp, }); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 580e8255cb29a..a0443e37fa617 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -14992,8 +14992,6 @@ "xpack.dataVisualizer.file.welcomeContent.delimitedTextFilesDescription": "Fichiers texte délimités, tels que CSV et TSV", "xpack.dataVisualizer.file.welcomeContent.logFilesWithCommonFormatDescription": "Fichiers log avec un format d'horodatage courant", "xpack.dataVisualizer.file.welcomeContent.newlineDelimitedJsonDescription": "JSON délimité par une nouvelle ligne", - "xpack.dataVisualizer.file.welcomeContent.supportedFileFormatDescription": "Les formats de fichier suivants sont pris en charge :", - "xpack.dataVisualizer.file.welcomeContent.uploadedFilesAllowedSizeDescription": "Vous pouvez charger des fichiers d'une taille allant jusqu'à {maxFileSize}.", "xpack.dataVisualizer.file.welcomeContent.visualizeAndImportDataFromLogFileDescription": "Chargez votre fichier, analysez ses données et, si vous le souhaitez, importez les données dans un index Elasticsearch.", "xpack.dataVisualizer.file.welcomeContent.visualizeDataFromLogFileDescription": "Téléchargez votre fichier et analysez ses données.", "xpack.dataVisualizer.file.welcomeContent.visualizeDataFromLogFileTitle": "Charger les données à partir d'un fichier", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 7eea338195202..e662987308271 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -14978,8 +14978,6 @@ "xpack.dataVisualizer.file.welcomeContent.delimitedTextFilesDescription": "CSV や TSV などの区切られたテキストファイル", "xpack.dataVisualizer.file.welcomeContent.logFilesWithCommonFormatDescription": "タイムスタンプの一般的フォーマットのログファイル", "xpack.dataVisualizer.file.welcomeContent.newlineDelimitedJsonDescription": "改行区切りの JSON", - "xpack.dataVisualizer.file.welcomeContent.supportedFileFormatDescription": "次のファイル形式がサポートされます。", - "xpack.dataVisualizer.file.welcomeContent.uploadedFilesAllowedSizeDescription": "最大{maxFileSize}のファイルをアップロードできます。", "xpack.dataVisualizer.file.welcomeContent.visualizeAndImportDataFromLogFileDescription": "ファイルをアップロードして、データを分析し、任意でデータをElasticsearchインデックスにインポートできます。", "xpack.dataVisualizer.file.welcomeContent.visualizeDataFromLogFileDescription": "ファイルをアップロードし、データを分析します。", "xpack.dataVisualizer.file.welcomeContent.visualizeDataFromLogFileTitle": "ファイルからデータをアップロード", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 76ac5c13e4e13..ef6badee07f44 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -15003,8 +15003,6 @@ "xpack.dataVisualizer.file.welcomeContent.delimitedTextFilesDescription": "分隔的文本文件,例如 CSV 和 TSV", "xpack.dataVisualizer.file.welcomeContent.logFilesWithCommonFormatDescription": "具有时间戳通用格式的日志文件", "xpack.dataVisualizer.file.welcomeContent.newlineDelimitedJsonDescription": "换行符分隔的 JSON", - "xpack.dataVisualizer.file.welcomeContent.supportedFileFormatDescription": "支持以下文件格式:", - "xpack.dataVisualizer.file.welcomeContent.uploadedFilesAllowedSizeDescription": "您可以上传不超过 {maxFileSize} 的文件。", "xpack.dataVisualizer.file.welcomeContent.visualizeAndImportDataFromLogFileDescription": "上传文件、分析文件数据,然后根据需要将数据导入 Elasticsearch 索引。", "xpack.dataVisualizer.file.welcomeContent.visualizeDataFromLogFileDescription": "上传您的文件并分析其数据。", "xpack.dataVisualizer.file.welcomeContent.visualizeDataFromLogFileTitle": "从文件上传数据", diff --git a/x-pack/test/api_integration/apis/file_upload/index.ts b/x-pack/test/api_integration/apis/file_upload/index.ts index f2232c0cfcbce..9e1a913664a83 100644 --- a/x-pack/test/api_integration/apis/file_upload/index.ts +++ b/x-pack/test/api_integration/apis/file_upload/index.ts @@ -12,5 +12,6 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./has_import_permission')); loadTestFile(require.resolve('./index_exists')); loadTestFile(require.resolve('./preview_index_time_range')); + loadTestFile(require.resolve('./preview_tika_contents')); }); } diff --git a/x-pack/test/api_integration/apis/file_upload/pdf_base64.ts b/x-pack/test/api_integration/apis/file_upload/pdf_base64.ts new file mode 100644 index 0000000000000..8d6e40b2c9162 --- /dev/null +++ b/x-pack/test/api_integration/apis/file_upload/pdf_base64.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 pdfBase64 = + 'JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhlbi1VUykgL1N0cnVjdFRyZWVSb290IDkgMCBSL01hcmtJbmZvPDwvTWFya2VkIHRydWU+Pj4+DQplbmRvYmoNCjIgMCBvYmoNCjw8L1R5cGUvUGFnZXMvQ291bnQgMS9LaWRzWyAzIDAgUl0gPj4NCmVuZG9iag0KMyAwIG9iag0KPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9SZXNvdXJjZXM8PC9Gb250PDwvRjEgNSAwIFI+Pi9FeHRHU3RhdGU8PC9HUzcgNyAwIFI+Pi9Qcm9jU2V0Wy9QREYvVGV4dC9JbWFnZUIvSW1hZ2VDL0ltYWdlSV0gPj4vTWVkaWFCb3hbIDAgMCA2MTIgNzkyXSAvQ29udGVudHMgNCAwIFIvR3JvdXA8PC9UeXBlL0dyb3VwL1MvVHJhbnNwYXJlbmN5L0NTL0RldmljZVJHQj4+L1RhYnMvUy9TdHJ1Y3RQYXJlbnRzIDA+Pg0KZW5kb2JqDQo0IDAgb2JqDQo8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDE3Mz4+DQpzdHJlYW0NCnicdY0/C4MwFMT3QL7DjclgTGIaGxAH/9KCUKibdOigVmgn/f40DoU6hPd4HLy73yG+IcvirrxUkHmOoipR9JTEjYJSQhr0EyUK0o9CqoXUBql04uQ/H+9r7ynmlRKJeT8tJQPrX8sKv09wx7aRRwlbNy/BH+ivlNS+YC/5YZV2Qtt/7MBu3LKKR4Y1oZCxIj0fQ8EC40RytE7Lmxs2hgI2ESrMRt2V+AImUj6DDQplbmRzdHJlYW0NCmVuZG9iag0KNSAwIG9iag0KPDwvVHlwZS9Gb250L1N1YnR5cGUvVHJ1ZVR5cGUvTmFtZS9GMS9CYXNlRm9udC9BQkNERUUrQ2FsaWJyaS9FbmNvZGluZy9XaW5BbnNpRW5jb2RpbmcvRm9udERlc2NyaXB0b3IgNiAwIFIvRmlyc3RDaGFyIDMyL0xhc3RDaGFyIDExNi9XaWR0aHMgMTYgMCBSPj4NCmVuZG9iag0KNiAwIG9iag0KPDwvVHlwZS9Gb250RGVzY3JpcHRvci9Gb250TmFtZS9BQkNERUUrQ2Fs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Erk//bAXh+79HSell91UZD3O8yatTeW/E9N55w97TyxUKJv2aM/DyX1CDo/UtBYtm9id2CPx84zWxgCp9h/VE18FH3V4sVs3tv+cy6SUvLAEVSfu421MDY7vlGZWHzWqCniX0/Hkl5n412Pdk5JkQ2ZdeSostPDa3HXf/4dbMbu/vPou4nOanWO6d9z2fXtvtuo+Cd9xYuLqpMIs++XCHIfOa58pvTezq7KioHmt26xDm5s7/dyttJuDFY1W/Ht13L6kjOnAulVFwbE7Mo7XvTa0zZil3vB5C9uG55d3COo0XcrZv/5+4aYXzUkrtjGWGdzicwjeFM36+fsWsxTWYEXR7nS3PIGs3EjhoLwtvAwAgfW2Aw0KZW5kc3RyZWFtDQplbmRvYmoNCjE4IDAgb2JqDQo8PC9UeXBlL1hSZWYvU2l6ZSAxOC9XWyAxIDQgMl0gL1Jvb3QgMSAwIFIvSW5mbyA4IDAgUi9JRFs8REUwMjI4M0E3RkU4QTM0NDg1NERENUI3MzdEQkM4QUU+PERFMDIyODNBN0ZFOEEzNDQ4NTRERDVCNzM3REJDOEFFPl0gL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNzU+Pg0Kc3RyZWFtDQp4nGNgAIL//xmBpCADA4iqgVBbwBTjJjDFtBJMMQeCKRYHCFUKlACq5GdgglDMEIoFQjFCKKgSVqAGVj+wPrazYIp9BQMDAGJaCAQNCmVuZHN0cmVhbQ0KZW5kb2JqDQp4cmVmDQowIDE5DQowMDAwMDAwMDA5IDY1NTM1IGYNCjAwMDAwMDAwMTcgMDAwMDAgbg0KMDAwMDAwMDEyNCAwMDAwMCBuDQowMDAwMDAwMTgwIDAwMDAwIG4NCjAwMDAwMDA0MzQgMDAwMDAgbg0KMDAwMDAwMDY4MSAwMDAwMCBuDQowMDAwMDAwODQ5IDAwMDAwIG4NCjAwMDAwMDEwODggMDAwMDAgbg0KMDAwMDAwMTE0MSAwMDAwMCBuDQowMDAwMDAwMDEwIDY1NTM1IGYNCjAwMDAwMDAwMTEgNjU1MzUgZg0KMDAwMDAwMDAxMiA2NTUzNSBmDQowMDAwMDAwMDEzIDY1NTM1IGYNCjAwMDAwMDAwMTQgNjU1MzUgZg0KMDAwMDAwMDAxNSA2NTUzNSBmDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDE3NDEgMDAwMDAgbg0KMDAwMDAwMTk2MCAwMDAwMCBuDQowMDAwMDgyMTk4IDAwMDAwIG4NCnRyYWlsZXINCjw8L1NpemUgMTkvUm9vdCAxIDAgUi9JbmZvIDggMCBSL0lEWzxERTAyMjgzQTdGRThBMzQ0ODU0REQ1QjczN0RCQzhBRT48REUwMjI4M0E3RkU4QTM0NDg1NERENUI3MzdEQkM4QUU+XSA+Pg0Kc3RhcnR4cmVmDQo4MjQ3Mg0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAxOS9Sb290IDEgMCBSL0luZm8gOCAwIFIvSURbPERFMDIyODNBN0ZFOEEzNDQ4NTRERDVCNzM3REJDOEFFPjxERTAyMjgzQTdGRThBMzQ0ODU0REQ1QjczN0RCQzhBRT5dIC9QcmV2IDgyNDcyL1hSZWZTdG0gODIxOTg+Pg0Kc3RhcnR4cmVmDQo4MzAwOA0KJSVFT0Y='; diff --git a/x-pack/test/api_integration/apis/file_upload/preview_tika_contents.ts b/x-pack/test/api_integration/apis/file_upload/preview_tika_contents.ts new file mode 100644 index 0000000000000..b961ca8f3225b --- /dev/null +++ b/x-pack/test/api_integration/apis/file_upload/preview_tika_contents.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 { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../ftr_provider_context'; +import { pdfBase64 } from './pdf_base64'; + +export default ({ getService }: FtrProviderContext) => { + const supertest = getService('supertest'); + + async function runRequest(base64File: string, expectedResponseCode: number = 200) { + const { body } = await supertest + .post(`/internal/file_upload/preview_tika_contents`) + .set('kbn-xsrf', 'kibana') + .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .send({ base64File }) + .expect(expectedResponseCode); + + return body; + } + const expectedResponse = { + date: '2010-12-01T13:33:24Z', + content_type: 'application/pdf', + author: 'John', + format: 'application/pdf; version=1.5', + modified: '2010-12-01T13:33:24Z', + language: 'en', + creator_tool: 'Microsoft® Word 2010', + content: 'This is a test PDF file', + content_length: 28, + }; + + describe('POST /internal/file_upload/preview_tika_content', () => { + it('should return the text content from the file', async () => { + const resp = await runRequest(pdfBase64); + + expect(resp).to.eql(expectedResponse); + }); + + it('should fail to return text when bad data is sent', async () => { + await runRequest('bad data', 500); + }); + }); +}; From 00975ad1a4a2528b7a61f1f0e645b8cfff7aef2e Mon Sep 17 00:00:00 2001 From: Carlos Crespo Date: Thu, 22 Aug 2024 12:15:13 +0200 Subject: [PATCH 08/59] [Infra] Add a link to host metrics docs (#190993) ## Summary The link is not shown for K8s pods image The link is shown for hosts image ### How to test - Navigate to `Inventory` - Click on Alerts and Rules > Infrastructure > Create Inventory rule - Click on the metric to open the metric selection popover - Validate if the link appears and redirects to the docs page - Do the same with other asset types (Containers, Docker, etc) --- .../inventory/components/expression.tsx | 10 ++++---- .../alerting/inventory/components/metric.tsx | 23 ++++++++++++++++++- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/expression.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/expression.tsx index 5d07c2801e947..f89cd7e778763 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/expression.tsx +++ b/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/expression.tsx @@ -444,7 +444,8 @@ const StyledHealthCss = css` export const ExpressionRow: FC> = (props) => { const [isExpanded, toggle] = useToggle(true); - const { children, setRuleParams, expression, errors, expressionId, remove, canDelete } = props; + const { children, setRuleParams, expression, errors, expressionId, remove, canDelete, nodeType } = + props; const { metric, comparator = COMPARATORS.GREATER_THAN, @@ -554,7 +555,7 @@ export const ExpressionRow: FC> = (props) const ofFields = useMemo(() => { let myMetrics: SnapshotMetricType[] = hostSnapshotMetricTypes; - switch (props.nodeType) { + switch (nodeType) { case 'awsEC2': myMetrics = awsEC2SnapshotMetricTypes; break; @@ -577,8 +578,8 @@ export const ExpressionRow: FC> = (props) myMetrics = containerSnapshotMetricTypes; break; } - return myMetrics.map((myMetric) => toMetricOpt(myMetric, props.nodeType)); - }, [props.nodeType]); + return myMetrics.map((myMetric) => toMetricOpt(myMetric, nodeType)); + }, [nodeType]); return ( <> @@ -608,6 +609,7 @@ export const ExpressionRow: FC> = (props) text: string; }> } + nodeType={nodeType} onChange={updateMetric} onChangeCustom={updateCustomMetric} errors={errors} diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/metric.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/metric.tsx index b6b24b9d721e2..bed80c31066ab 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/metric.tsx +++ b/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/metric.tsx @@ -13,6 +13,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiFormRow, + EuiLink, EuiPopover, EuiPopoverTitle, EuiSelect, @@ -24,6 +25,8 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { debounce } from 'lodash'; import React, { useCallback, useMemo, useState } from 'react'; import { IErrorObject } from '@kbn/triggers-actions-ui-plugin/public'; +import type { InventoryItemType } from '@kbn/metrics-data-access-plugin/common'; +import { HOST_METRICS_DOC_HREF } from '../../../common/visualizations'; import { useMetricsDataViewContext } from '../../../containers/metrics_source'; import { getCustomMetricLabel } from '../../../../common/formatters/get_custom_metric_label'; import { @@ -37,6 +40,7 @@ import { interface Props { metric?: { value: string; text: string }; metrics: Array<{ value: string; text: string }>; + nodeType: InventoryItemType; errors: IErrorObject; onChange: (metric?: string) => void; onChangeCustom: (customMetric?: SnapshotCustomMetricInput) => void; @@ -91,6 +95,7 @@ export const MetricExpression = ({ onChange, onChangeCustom, popupPosition, + nodeType, }: Props) => { const [popoverOpen, setPopoverOpen] = useState(false); const [customMetricTabOpen, setCustomMetricTabOpen] = useState(metric?.value === 'custom'); @@ -312,7 +317,23 @@ export const MetricExpression = ({ ) : ( - + + {nodeType === 'host' && ( + + + {i18n.translate( + 'xpack.infra.metrics.alertFlyout.expression.metric.whatAreTheseMetricsLink', + { + defaultMessage: 'What are these metrics?', + } + )} + + + )} Date: Thu, 22 Aug 2024 12:20:24 +0200 Subject: [PATCH 09/59] Add alert grouping functionality to the observability alerts page (#189958) Closes #190995 ## Summary This PR adds grouping functionality to the alerts page alert table based on @umbopepato's implementation in this [draft PR](https://github.com/elastic/kibana/pull/183114) (basically, he implemented the feature and I adjusted a bit for our use case :D). For now, we only added the **rule** and **source** as default grouping, and I will create a ticket to add tags as well. The challenge with tags is that since it is an array, the value of the alert is joined by a comma as the group, which does not match with what we want for tags. ![image](https://github.com/user-attachments/assets/c08c3cb1-4c6c-4918-8071-3c5913de41f6) Here is how we show the rules that don't have a group by field selected for them: (We used "ungrouped" similar to what we have in SLOs) ![image](https://github.com/user-attachments/assets/280bbd34-6c3b-41c1-803b-dcc6448f6fb4) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: DeDe Morton Co-authored-by: Shahzad --- .../src/components/alerts_grouping.test.tsx | 2 +- .../src/components/alerts_grouping.tsx | 2 +- .../src/components/alerts_grouping_level.tsx | 3 +- .../src/contexts/alerts_grouping_context.tsx | 1 - packages/kbn-alerts-grouping/src/types.ts | 2 +- .../observability/common/typings.ts | 2 + .../components/alert_search_bar/constants.ts | 37 ++++++++ .../get_alerts_page_table_configuration.tsx | 27 +++++- .../alerts/get_persistent_controls.ts | 66 ++++++++++++++ .../get_alerts_page_table_configuration.tsx | 58 +++++++++++++ .../register_alerts_table_configuration.tsx | 23 ++++- .../public/components/alerts_table/types.ts | 36 ++++++++ .../observability/public/components/tags.tsx | 47 ++++++---- .../observability/public/constants.ts | 1 + .../public/pages/alerts/alerts.tsx | 80 ++++++++++++----- .../public/pages/alerts/grouping/constants.ts | 32 +++++++ .../get_aggregations_by_grouping_field.ts | 53 +++++++++++ .../pages/alerts/grouping/get_group_stats.tsx | 57 ++++++++++++ .../alerts/grouping/render_group_panel.tsx | 87 +++++++++++++++++++ .../alerts/helpers/merge_bool_queries.ts | 25 ++++++ .../observability/public/plugin.ts | 10 ++- .../observability/tsconfig.json | 3 + .../server/alert_data_client/alerts_client.ts | 2 +- .../get_alerts_group_aggregations.test.ts | 2 +- .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - 27 files changed, 605 insertions(+), 59 deletions(-) create mode 100644 x-pack/plugins/observability_solution/observability/public/components/alerts_table/alerts/get_persistent_controls.ts create mode 100644 x-pack/plugins/observability_solution/observability/public/components/alerts_table/observability/get_alerts_page_table_configuration.tsx create mode 100644 x-pack/plugins/observability_solution/observability/public/components/alerts_table/types.ts create mode 100644 x-pack/plugins/observability_solution/observability/public/pages/alerts/grouping/constants.ts create mode 100644 x-pack/plugins/observability_solution/observability/public/pages/alerts/grouping/get_aggregations_by_grouping_field.ts create mode 100644 x-pack/plugins/observability_solution/observability/public/pages/alerts/grouping/get_group_stats.tsx create mode 100644 x-pack/plugins/observability_solution/observability/public/pages/alerts/grouping/render_group_panel.tsx create mode 100644 x-pack/plugins/observability_solution/observability/public/pages/alerts/helpers/merge_bool_queries.ts diff --git a/packages/kbn-alerts-grouping/src/components/alerts_grouping.test.tsx b/packages/kbn-alerts-grouping/src/components/alerts_grouping.test.tsx index 87517def778cd..47e2d5c1b4082 100644 --- a/packages/kbn-alerts-grouping/src/components/alerts_grouping.test.tsx +++ b/packages/kbn-alerts-grouping/src/components/alerts_grouping.test.tsx @@ -158,7 +158,7 @@ describe('AlertsGrouping', () => { }, { range: { - '@timestamp': { + 'kibana.alert.time_range': { gte: mockDate.from, lte: mockDate.to, }, diff --git a/packages/kbn-alerts-grouping/src/components/alerts_grouping.tsx b/packages/kbn-alerts-grouping/src/components/alerts_grouping.tsx index 5db1ef5a5d0ff..17a4d35f73e8a 100644 --- a/packages/kbn-alerts-grouping/src/components/alerts_grouping.tsx +++ b/packages/kbn-alerts-grouping/src/components/alerts_grouping.tsx @@ -199,7 +199,7 @@ const AlertsGroupingInternal = ( }; return ( - {...props} getGrouping={getGrouping} groupingLevel={level} diff --git a/packages/kbn-alerts-grouping/src/components/alerts_grouping_level.tsx b/packages/kbn-alerts-grouping/src/components/alerts_grouping_level.tsx index a82818215cbf4..c0ebf0e6fa234 100644 --- a/packages/kbn-alerts-grouping/src/components/alerts_grouping_level.tsx +++ b/packages/kbn-alerts-grouping/src/components/alerts_grouping_level.tsx @@ -14,6 +14,7 @@ import { type GroupingAggregation } from '@kbn/grouping'; import { isNoneGroup } from '@kbn/grouping'; import type { DynamicGroupingProps } from '@kbn/grouping/src'; import { parseGroupingQuery } from '@kbn/grouping/src'; +import { ALERT_TIME_RANGE } from '@kbn/rule-data-utils'; import { useGetAlertsGroupAggregationsQuery, UseGetAlertsGroupAggregationsQueryProps, @@ -94,7 +95,7 @@ export const AlertsGroupingLevel = typedMemo( ...filters, { range: { - '@timestamp': { + [ALERT_TIME_RANGE]: { gte: from, lte: to, }, diff --git a/packages/kbn-alerts-grouping/src/contexts/alerts_grouping_context.tsx b/packages/kbn-alerts-grouping/src/contexts/alerts_grouping_context.tsx index cc5e06e652cd4..2d1315e3ece6d 100644 --- a/packages/kbn-alerts-grouping/src/contexts/alerts_grouping_context.tsx +++ b/packages/kbn-alerts-grouping/src/contexts/alerts_grouping_context.tsx @@ -54,7 +54,6 @@ export const useAlertsGroupingState = (groupingId: string) => { setGroupingState((prevState) => ({ ...prevState, [groupingId]: { - // @ts-expect-error options might not be defined options: [], // @ts-expect-error activeGroups might not be defined activeGroups: initialActiveGroups, diff --git a/packages/kbn-alerts-grouping/src/types.ts b/packages/kbn-alerts-grouping/src/types.ts index 835941e8db95d..24239364bb6c2 100644 --- a/packages/kbn-alerts-grouping/src/types.ts +++ b/packages/kbn-alerts-grouping/src/types.ts @@ -22,7 +22,7 @@ import { ReactElement } from 'react'; export interface GroupModel { activeGroups: string[]; - options: Array<{ key: string; label: string }>; + options?: Array<{ key: string; label: string }>; } export interface AlertsGroupingState { diff --git a/x-pack/plugins/observability_solution/observability/common/typings.ts b/x-pack/plugins/observability_solution/observability/common/typings.ts index bfdcd6d5209dc..03981f5941dc2 100644 --- a/x-pack/plugins/observability_solution/observability/common/typings.ts +++ b/x-pack/plugins/observability_solution/observability/common/typings.ts @@ -11,6 +11,7 @@ import { ALERT_STATUS_RECOVERED, ALERT_STATUS_UNTRACKED, } from '@kbn/rule-data-utils'; +import { Filter } from '@kbn/es-query'; import { ALERT_STATUS_ALL } from './constants'; export type Maybe = T | null | undefined; @@ -39,6 +40,7 @@ export type AlertStatus = export interface AlertStatusFilter { status: AlertStatus; query: string; + filter: Filter[]; label: string; } diff --git a/x-pack/plugins/observability_solution/observability/public/components/alert_search_bar/constants.ts b/x-pack/plugins/observability_solution/observability/public/components/alert_search_bar/constants.ts index 85ea6464d5ac0..dc6af6316c41c 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/alert_search_bar/constants.ts +++ b/x-pack/plugins/observability_solution/observability/public/components/alert_search_bar/constants.ts @@ -22,6 +22,7 @@ export const DEFAULT_QUERY_STRING = ''; export const ALL_ALERTS: AlertStatusFilter = { status: ALERT_STATUS_ALL, query: '', + filter: [], label: i18n.translate('xpack.observability.alerts.alertStatusFilter.showAll', { defaultMessage: 'Show all', }), @@ -30,6 +31,16 @@ export const ALL_ALERTS: AlertStatusFilter = { export const ACTIVE_ALERTS: AlertStatusFilter = { status: ALERT_STATUS_ACTIVE, query: `${ALERT_STATUS}: "${ALERT_STATUS_ACTIVE}"`, + filter: [ + { + query: { + match_phrase: { + [ALERT_STATUS]: ALERT_STATUS_ACTIVE, + }, + }, + meta: {}, + }, + ], label: i18n.translate('xpack.observability.alerts.alertStatusFilter.active', { defaultMessage: 'Active', }), @@ -38,6 +49,16 @@ export const ACTIVE_ALERTS: AlertStatusFilter = { export const RECOVERED_ALERTS: AlertStatusFilter = { status: ALERT_STATUS_RECOVERED, query: `${ALERT_STATUS}: "${ALERT_STATUS_RECOVERED}"`, + filter: [ + { + query: { + match_phrase: { + [ALERT_STATUS]: ALERT_STATUS_RECOVERED, + }, + }, + meta: {}, + }, + ], label: i18n.translate('xpack.observability.alerts.alertStatusFilter.recovered', { defaultMessage: 'Recovered', }), @@ -46,6 +67,16 @@ export const RECOVERED_ALERTS: AlertStatusFilter = { export const UNTRACKED_ALERTS: AlertStatusFilter = { status: ALERT_STATUS_UNTRACKED, query: `${ALERT_STATUS}: "${ALERT_STATUS_UNTRACKED}"`, + filter: [ + { + query: { + match_phrase: { + [ALERT_STATUS]: ALERT_STATUS_UNTRACKED, + }, + }, + meta: {}, + }, + ], label: i18n.translate('xpack.observability.alerts.alertStatusFilter.untracked', { defaultMessage: 'Untracked', }), @@ -56,3 +87,9 @@ export const ALERT_STATUS_QUERY = { [RECOVERED_ALERTS.status]: RECOVERED_ALERTS.query, [UNTRACKED_ALERTS.status]: UNTRACKED_ALERTS.query, }; + +export const ALERT_STATUS_FILTER = { + [ACTIVE_ALERTS.status]: ACTIVE_ALERTS.filter, + [RECOVERED_ALERTS.status]: RECOVERED_ALERTS.filter, + [UNTRACKED_ALERTS.status]: UNTRACKED_ALERTS.filter, +}; diff --git a/x-pack/plugins/observability_solution/observability/public/components/alerts_table/alerts/get_alerts_page_table_configuration.tsx b/x-pack/plugins/observability_solution/observability/public/components/alerts_table/alerts/get_alerts_page_table_configuration.tsx index cabf1d6d6f34e..30c912b510743 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/alerts_table/alerts/get_alerts_page_table_configuration.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/alerts_table/alerts/get_alerts_page_table_configuration.tsx @@ -12,17 +12,29 @@ import { AlertsTableConfigurationRegistry, RenderCustomActionsRowArgs, } from '@kbn/triggers-actions-ui-plugin/public/types'; -import { casesFeatureId, observabilityFeatureId } from '../../../../common'; +import { DataViewsServicePublic } from '@kbn/data-views-plugin/public/types'; +import { HttpSetup } from '@kbn/core-http-browser'; +import { NotificationsStart } from '@kbn/core-notifications-browser'; +import { + casesFeatureId, + observabilityAlertFeatureIds, + observabilityFeatureId, +} from '../../../../common'; import { AlertActions } from '../../../pages/alerts/components/alert_actions'; import { useGetAlertFlyoutComponents } from '../../alerts_flyout/use_get_alert_flyout_components'; import type { ObservabilityRuleTypeRegistry } from '../../../rules/create_observability_rule_type_registry'; +import { ALERTS_PAGE_ALERTS_TABLE_CONFIG_ID } from '../../../constants'; import type { ConfigSchema } from '../../../plugin'; import { getRenderCellValue } from '../common/render_cell_value'; import { getColumns } from '../common/get_columns'; +import { getPersistentControlsHook } from './get_persistent_controls'; export const getAlertsPageTableConfiguration = ( observabilityRuleTypeRegistry: ObservabilityRuleTypeRegistry, - config: ConfigSchema + config: ConfigSchema, + dataViews: DataViewsServicePublic, + http: HttpSetup, + notifications: NotificationsStart ): AlertsTableConfigurationRegistry => { const renderCustomActionsRow = (props: RenderCustomActionsRowArgs) => { return ( @@ -34,7 +46,7 @@ export const getAlertsPageTableConfiguration = ( ); }; return { - id: observabilityFeatureId, + id: ALERTS_PAGE_ALERTS_TABLE_CONFIG_ID, cases: { featureId: casesFeatureId, owner: [observabilityFeatureId] }, columns: getColumns({ showRuleName: true }), getRenderCellValue, @@ -53,6 +65,15 @@ export const getAlertsPageTableConfiguration = ( return { header, body, footer }; }, ruleTypeIds: observabilityRuleTypeRegistry.list(), + usePersistentControls: getPersistentControlsHook({ + groupingId: ALERTS_PAGE_ALERTS_TABLE_CONFIG_ID, + featureIds: observabilityAlertFeatureIds, + services: { + dataViews, + http, + notifications, + }, + }), showInspectButton: true, }; }; diff --git a/x-pack/plugins/observability_solution/observability/public/components/alerts_table/alerts/get_persistent_controls.ts b/x-pack/plugins/observability_solution/observability/public/components/alerts_table/alerts/get_persistent_controls.ts new file mode 100644 index 0000000000000..2141e0fb68d66 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability/public/components/alerts_table/alerts/get_persistent_controls.ts @@ -0,0 +1,66 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useMemo, useCallback } from 'react'; +import { type AlertsGroupingProps, useAlertsGroupingState } from '@kbn/alerts-grouping'; +import { useAlertsDataView } from '@kbn/alerts-ui-shared/src/common/hooks/use_alerts_data_view'; +import { useGetGroupSelectorStateless } from '@kbn/grouping/src/hooks/use_get_group_selector'; +import { AlertConsumers } from '@kbn/rule-data-utils'; +import { AlertsByGroupingAgg } from '../types'; + +interface GetPersistentControlsParams { + groupingId: string; + featureIds: AlertConsumers[]; + maxGroupingLevels?: number; + services: Pick< + AlertsGroupingProps['services'], + 'dataViews' | 'http' | 'notifications' + >; +} + +export const getPersistentControlsHook = + ({ + groupingId, + featureIds, + maxGroupingLevels = 3, + services: { dataViews, http, notifications }, + }: GetPersistentControlsParams) => + () => { + const { grouping, updateGrouping } = useAlertsGroupingState(groupingId); + + const onGroupChange = useCallback( + (selectedGroups: string[]) => { + updateGrouping({ + activeGroups: + grouping.activeGroups?.filter((g) => g !== 'none').concat(selectedGroups) ?? [], + }); + }, + [grouping, updateGrouping] + ); + + const { dataView } = useAlertsDataView({ + featureIds, + dataViewsService: dataViews, + http, + toasts: notifications.toasts, + }); + + const groupSelector = useGetGroupSelectorStateless({ + groupingId, + onGroupChange, + fields: dataView?.fields ?? [], + defaultGroupingOptions: + grouping.options?.filter((option) => !grouping.activeGroups.includes(option.key)) ?? [], + maxGroupingLevels, + }); + + return useMemo(() => { + return { + right: groupSelector, + }; + }, [groupSelector]); + }; diff --git a/x-pack/plugins/observability_solution/observability/public/components/alerts_table/observability/get_alerts_page_table_configuration.tsx b/x-pack/plugins/observability_solution/observability/public/components/alerts_table/observability/get_alerts_page_table_configuration.tsx new file mode 100644 index 0000000000000..9d761aa87f4cd --- /dev/null +++ b/x-pack/plugins/observability_solution/observability/public/components/alerts_table/observability/get_alerts_page_table_configuration.tsx @@ -0,0 +1,58 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { SortOrder } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { ALERT_START, AlertConsumers } from '@kbn/rule-data-utils'; +import { + AlertsTableConfigurationRegistry, + RenderCustomActionsRowArgs, +} from '@kbn/triggers-actions-ui-plugin/public/types'; +import { casesFeatureId, observabilityFeatureId } from '../../../../common'; +import { AlertActions } from '../../../pages/alerts/components/alert_actions'; +import { useGetAlertFlyoutComponents } from '../../alerts_flyout/use_get_alert_flyout_components'; +import type { ObservabilityRuleTypeRegistry } from '../../../rules/create_observability_rule_type_registry'; +import type { ConfigSchema } from '../../../plugin'; +import { getRenderCellValue } from '../common/render_cell_value'; +import { getColumns } from '../common/get_columns'; + +export const getObservabilityTableConfiguration = ( + observabilityRuleTypeRegistry: ObservabilityRuleTypeRegistry, + config: ConfigSchema +): AlertsTableConfigurationRegistry => { + const renderCustomActionsRow = (props: RenderCustomActionsRowArgs) => { + return ( + + ); + }; + return { + id: AlertConsumers.OBSERVABILITY, + cases: { featureId: casesFeatureId, owner: [observabilityFeatureId] }, + columns: getColumns({ showRuleName: true }), + getRenderCellValue, + sort: [ + { + [ALERT_START]: { + order: 'desc' as SortOrder, + }, + }, + ], + useActionsColumn: () => ({ + renderCustomActionsRow, + }), + useInternalFlyout: () => { + const { header, body, footer } = useGetAlertFlyoutComponents(observabilityRuleTypeRegistry); + return { header, body, footer }; + }, + ruleTypeIds: observabilityRuleTypeRegistry.list(), + showInspectButton: true, + }; +}; diff --git a/x-pack/plugins/observability_solution/observability/public/components/alerts_table/register_alerts_table_configuration.tsx b/x-pack/plugins/observability_solution/observability/public/components/alerts_table/register_alerts_table_configuration.tsx index 1fa574d1dd402..de687c4dd7944 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/alerts_table/register_alerts_table_configuration.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/alerts_table/register_alerts_table_configuration.tsx @@ -6,22 +6,39 @@ */ import { AlertTableConfigRegistry } from '@kbn/triggers-actions-ui-plugin/public/application/alert_table_config_registry'; +import type { DataViewsServicePublic } from '@kbn/data-views-plugin/public/types'; +import { HttpSetup } from '@kbn/core-http-browser'; +import { NotificationsStart } from '@kbn/core-notifications-browser'; import type { ConfigSchema } from '../../plugin'; import { ObservabilityRuleTypeRegistry } from '../..'; import { getAlertsPageTableConfiguration } from './alerts/get_alerts_page_table_configuration'; import { getRuleDetailsTableConfiguration } from './rule_details/get_rule_details_table_configuration'; import { getSloAlertsTableConfiguration } from './slo/get_slo_alerts_table_configuration'; +import { getObservabilityTableConfiguration } from './observability/get_alerts_page_table_configuration'; export const registerAlertsTableConfiguration = ( alertTableConfigRegistry: AlertTableConfigRegistry, observabilityRuleTypeRegistry: ObservabilityRuleTypeRegistry, - config: ConfigSchema + config: ConfigSchema, + dataViews: DataViewsServicePublic, + http: HttpSetup, + notifications: NotificationsStart ) => { - // Alert page - const alertsPageAlertsTableConfig = getAlertsPageTableConfiguration( + // Observability table + const observabilityAlertsTableConfig = getObservabilityTableConfiguration( observabilityRuleTypeRegistry, config ); + alertTableConfigRegistry.register(observabilityAlertsTableConfig); + + // Alerts page + const alertsPageAlertsTableConfig = getAlertsPageTableConfiguration( + observabilityRuleTypeRegistry, + config, + dataViews, + http, + notifications + ); alertTableConfigRegistry.register(alertsPageAlertsTableConfig); // Rule details page diff --git a/x-pack/plugins/observability_solution/observability/public/components/alerts_table/types.ts b/x-pack/plugins/observability_solution/observability/public/components/alerts_table/types.ts new file mode 100644 index 0000000000000..477117999a8ca --- /dev/null +++ b/x-pack/plugins/observability_solution/observability/public/components/alerts_table/types.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. + */ + +export interface BucketItem { + key: string; + doc_count: number; +} + +export interface AlertsByGroupingAgg extends Record { + groupByFields: { + doc_count_error_upper_bound: number; + sum_other_doc_count: number; + buckets: BucketItem[]; + }; + ruleTags: { + doc_count_error_upper_bound: number; + sum_other_doc_count: number; + buckets: BucketItem[]; + }; + rulesCountAggregation?: { + value: number; + }; + sourceCountAggregation?: { + value: number; + }; + groupsCount: { + value: number; + }; + unitsCount: { + value: number; + }; +} diff --git a/x-pack/plugins/observability_solution/observability/public/components/tags.tsx b/x-pack/plugins/observability_solution/observability/public/components/tags.tsx index e7059463ef7bd..015e911c535be 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/tags.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/tags.tsx @@ -10,38 +10,53 @@ import React, { useState } from 'react'; import { EuiBadge, EuiPopover } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -export function Tags({ tags }: { tags: string[] }) { +export function Tags({ + tags, + color, + size = 3, + oneLine = false, +}: { + tags: string[]; + color?: string; + size?: number; + oneLine?: boolean; +}) { const [isMoreTagsOpen, setIsMoreTagsOpen] = useState(false); - const onMoreTagsClick = () => setIsMoreTagsOpen((isPopoverOpen) => !isPopoverOpen); + const onMoreTagsClick = (e: any) => { + e.stopPropagation(); + setIsMoreTagsOpen((isPopoverOpen) => !isPopoverOpen); + }; const closePopover = () => setIsMoreTagsOpen(false); - const moreTags = tags.length > 3 && ( + const moreTags = tags.length > size && ( ); return ( <> - {tags.slice(0, 3).map((tag) => ( - {tag} + {tags.slice(0, size).map((tag) => ( + + {tag} + ))} -
+ {oneLine ? ' ' :
} - {tags.slice(3).map((tag) => ( - {tag} + {tags.slice(size).map((tag) => ( + + {tag} + ))} diff --git a/x-pack/plugins/observability_solution/observability/public/constants.ts b/x-pack/plugins/observability_solution/observability/public/constants.ts index 2da72ff858283..768094ec8a66b 100644 --- a/x-pack/plugins/observability_solution/observability/public/constants.ts +++ b/x-pack/plugins/observability_solution/observability/public/constants.ts @@ -8,4 +8,5 @@ export const DEFAULT_INTERVAL = '60s'; export const DEFAULT_DATE_FORMAT = 'YYYY-MM-DD HH:mm'; +export const ALERTS_PAGE_ALERTS_TABLE_CONFIG_ID = `alerts-page-alerts-table`; export const RULE_DETAILS_ALERTS_TABLE_CONFIG_ID = `rule-details-alerts-table`; diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alerts/alerts.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alerts/alerts.tsx index 0d3933b6204f4..c1d14165f5f6e 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alerts/alerts.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alerts/alerts.tsx @@ -11,20 +11,22 @@ import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { BoolQuery } from '@kbn/es-query'; import { i18n } from '@kbn/i18n'; import { loadRuleAggregations } from '@kbn/triggers-actions-ui-plugin/public'; -import { AlertConsumers } from '@kbn/rule-data-utils'; import { useBreadcrumbs } from '@kbn/observability-shared-plugin/public'; import { MaintenanceWindowCallout } from '@kbn/alerts-ui-shared'; import { DEFAULT_APP_CATEGORIES } from '@kbn/core-application-common'; +import { AlertsGrouping } from '@kbn/alerts-grouping'; +import { renderGroupPanel } from './grouping/render_group_panel'; import { rulesLocatorID } from '../../../common'; -import { RulesParams } from '../../locators/rules'; -import { useKibana } from '../../utils/kibana_react'; +import { ALERT_STATUS_FILTER } from '../../components/alert_search_bar/constants'; +import { AlertsByGroupingAgg } from '../../components/alerts_table/types'; +import { ObservabilityAlertSearchBar } from '../../components/alert_search_bar/alert_search_bar'; +import { useGetFilteredRuleTypes } from '../../hooks/use_get_filtered_rule_types'; import { usePluginContext } from '../../hooks/use_plugin_context'; import { useTimeBuckets } from '../../hooks/use_time_buckets'; -import { useGetFilteredRuleTypes } from '../../hooks/use_get_filtered_rule_types'; import { useToasts } from '../../hooks/use_toast'; -import { renderRuleStats, RuleStatsState } from './components/rule_stats'; -import { ObservabilityAlertSearchBar } from '../../components/alert_search_bar/alert_search_bar'; +import { RulesParams } from '../../locators/rules'; +import { useKibana } from '../../utils/kibana_react'; import { alertSearchBarStateContainer, Provider, @@ -34,8 +36,15 @@ import { calculateTimeRangeBucketSize } from '../overview/helpers/calculate_buck import { getAlertSummaryTimeRange } from '../../utils/alert_summary_widget'; import { observabilityAlertFeatureIds } from '../../../common/constants'; import { ALERTS_URL_STORAGE_KEY } from '../../../common/constants'; +import { ALERTS_PAGE_ALERTS_TABLE_CONFIG_ID } from '../../constants'; import { HeaderMenu } from '../overview/components/header_menu/header_menu'; import { useGetAvailableRulesWithDescriptions } from '../../hooks/use_get_available_rules_with_descriptions'; +import { buildEsQuery } from '../../utils/build_es_query'; +import { renderRuleStats, RuleStatsState } from './components/rule_stats'; +import { getGroupStats } from './grouping/get_group_stats'; +import { getAggregationsByGroupingField } from './grouping/get_aggregations_by_grouping_field'; +import { DEFAULT_GROUPING_OPTIONS } from './grouping/constants'; +import { mergeBoolQueries } from './helpers/merge_bool_queries'; const ALERTS_SEARCH_BAR_ID = 'alerts-search-bar-o11y'; const ALERTS_PER_PAGE = 50; @@ -48,13 +57,10 @@ function InternalAlertsPage() { const kibanaServices = useKibana().services; const { charts, - data: { - query: { - timefilter: { timefilter: timeFilterService }, - }, - }, + data, http, - notifications: { toasts }, + notifications, + dataViews, observabilityAIAssistant, share: { url: { locators }, @@ -67,6 +73,12 @@ function InternalAlertsPage() { }, uiSettings, } = kibanaServices; + const { toasts } = notifications; + const { + query: { + timefilter: { timefilter: timeFilterService }, + }, + } = data; const { ObservabilityPageTemplate, observabilityRuleTypeRegistry } = usePluginContext(); const alertSearchBarStateProps = useAlertSearchBarStateContainer(ALERTS_URL_STORAGE_KEY, { replace: false, @@ -241,16 +253,42 @@ function InternalAlertsPage() {
{esQuery && ( - featureIds={observabilityAlertFeatureIds} - query={esQuery} - showAlertStatusWithFlapping - initialPageSize={ALERTS_PER_PAGE} - cellContext={{ observabilityRuleTypeRegistry }} - /> + defaultFilters={ALERT_STATUS_FILTER[alertSearchBarStateProps.status] ?? []} + from={alertSearchBarStateProps.rangeFrom} + to={alertSearchBarStateProps.rangeTo} + globalFilters={alertSearchBarStateProps.filters} + globalQuery={{ query: alertSearchBarStateProps.kuery, language: 'kuery' }} + groupingId={ALERTS_PAGE_ALERTS_TABLE_CONFIG_ID} + defaultGroupingOptions={DEFAULT_GROUPING_OPTIONS} + getAggregationsByGroupingField={getAggregationsByGroupingField} + renderGroupPanel={renderGroupPanel} + getGroupStats={getGroupStats} + services={{ + notifications, + dataViews, + http, + }} + > + {(groupingFilters) => { + const groupQuery = buildEsQuery({ + filters: groupingFilters, + }); + return ( + + ); + }} + )}
diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alerts/grouping/constants.ts b/x-pack/plugins/observability_solution/observability/public/pages/alerts/grouping/constants.ts new file mode 100644 index 0000000000000..6bfe2f0febdd5 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability/public/pages/alerts/grouping/constants.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. + */ + +import { i18n } from '@kbn/i18n'; +import { ALERT_RULE_NAME, ALERT_INSTANCE_ID } from '@kbn/rule-data-utils'; + +export const ungrouped = i18n.translate('xpack.observability.alert.grouping.ungrouped.label', { + defaultMessage: 'Ungrouped', +}); + +export const ruleName = i18n.translate('xpack.observability.alert.grouping.ruleName.label', { + defaultMessage: 'Rule name', +}); + +export const source = i18n.translate('xpack.observability.alert.grouping.source.label', { + defaultMessage: 'Source', +}); + +export const DEFAULT_GROUPING_OPTIONS = [ + { + label: ruleName, + key: ALERT_RULE_NAME, + }, + { + label: source, + key: ALERT_INSTANCE_ID, + }, +]; diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alerts/grouping/get_aggregations_by_grouping_field.ts b/x-pack/plugins/observability_solution/observability/public/pages/alerts/grouping/get_aggregations_by_grouping_field.ts new file mode 100644 index 0000000000000..e4c8b27225ea5 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability/public/pages/alerts/grouping/get_aggregations_by_grouping_field.ts @@ -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 { NamedAggregation } from '@kbn/grouping'; +import { ALERT_INSTANCE_ID, ALERT_RULE_NAME, ALERT_RULE_UUID } from '@kbn/rule-data-utils'; + +export const getAggregationsByGroupingField = (field: string): NamedAggregation[] => { + switch (field) { + case ALERT_RULE_NAME: + return [ + { + sourceCountAggregation: { + cardinality: { + field: ALERT_INSTANCE_ID, + }, + }, + }, + { + ruleTags: { + terms: { + field: 'tags', + }, + }, + }, + ]; + break; + case ALERT_INSTANCE_ID: + return [ + { + rulesCountAggregation: { + cardinality: { + field: ALERT_RULE_UUID, + }, + }, + }, + ]; + break; + default: + return [ + { + rulesCountAggregation: { + cardinality: { + field: ALERT_RULE_UUID, + }, + }, + }, + ]; + } +}; diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alerts/grouping/get_group_stats.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alerts/grouping/get_group_stats.tsx new file mode 100644 index 0000000000000..3fe0a6d006825 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability/public/pages/alerts/grouping/get_group_stats.tsx @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { GetGroupStats } from '@kbn/grouping/src'; +import { ALERT_INSTANCE_ID, ALERT_RULE_NAME } from '@kbn/rule-data-utils'; +import { AlertsByGroupingAgg } from '../../../components/alerts_table/types'; + +export const getGroupStats: GetGroupStats = (selectedGroup, bucket) => { + const defaultBadges = [ + { + title: 'Alerts:', + badge: { + value: bucket.doc_count, + width: 50, + }, + }, + ]; + + switch (selectedGroup) { + case ALERT_RULE_NAME: + return [ + { + title: 'Sources:', + badge: { + value: bucket.sourceCountAggregation?.value ?? 0, + width: 50, + }, + }, + ...defaultBadges, + ]; + case ALERT_INSTANCE_ID: + return [ + { + title: 'Rules:', + badge: { + value: bucket.rulesCountAggregation?.value ?? 0, + width: 50, + }, + }, + ...defaultBadges, + ]; + } + return [ + { + title: 'Rules:', + badge: { + value: bucket.rulesCountAggregation?.value ?? 0, + width: 50, + }, + }, + ...defaultBadges, + ]; +}; diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alerts/grouping/render_group_panel.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alerts/grouping/render_group_panel.tsx new file mode 100644 index 0000000000000..17e674eb0a44e --- /dev/null +++ b/x-pack/plugins/observability_solution/observability/public/pages/alerts/grouping/render_group_panel.tsx @@ -0,0 +1,87 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { isArray } from 'lodash/fp'; +import { EuiFlexGroup, EuiIconTip, EuiFlexItem, EuiText, EuiTitle } from '@elastic/eui'; +import { firstNonNullValue, GroupPanelRenderer } from '@kbn/grouping/src'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { AlertsByGroupingAgg } from '../../../components/alerts_table/types'; +import { Tags } from '../../../components/tags'; +import { ungrouped } from './constants'; + +export const renderGroupPanel: GroupPanelRenderer = ( + selectedGroup, + bucket +) => { + switch (selectedGroup) { + case 'kibana.alert.rule.name': + return isArray(bucket.key) ? ( + tag.key)} + /> + ) : undefined; + case 'kibana.alert.instance.id': + return ; + } +}; + +const RuleNameGroupContent = React.memo<{ + ruleName: string; + tags?: string[] | undefined; +}>(({ ruleName, tags }) => { + return ( +
+ + + +
{ruleName}
+
+
+
+ + {!!tags && tags.length > 0 && ( + + + + )} +
+ ); +}); +RuleNameGroupContent.displayName = 'RuleNameGroup'; + +const InstanceIdGroupContent = React.memo<{ + instanceId?: string; +}>(({ instanceId }) => { + const isUngrouped = instanceId === '*'; + return ( +
+ + + +
+ {isUngrouped ? ungrouped : instanceId ?? '--'} +   + {isUngrouped && ( + + } + /> + )} +
+
+
+
+
+ ); +}); +InstanceIdGroupContent.displayName = 'InstanceIdGroupContent'; diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alerts/helpers/merge_bool_queries.ts b/x-pack/plugins/observability_solution/observability/public/pages/alerts/helpers/merge_bool_queries.ts new file mode 100644 index 0000000000000..bd748f4e5b928 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability/public/pages/alerts/helpers/merge_bool_queries.ts @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { BoolQuery } from '@kbn/es-query'; + +export const mergeBoolQueries = ( + firstQuery: { bool: BoolQuery }, + secondQuery: { bool: BoolQuery } +): { bool: BoolQuery } => { + const first = firstQuery.bool; + const second = secondQuery.bool; + + return { + bool: { + must: [...first.must, ...second.must], + must_not: [...first.must_not, ...second.must_not], + filter: [...first.filter, ...second.filter], + should: [...first.should, ...second.should], + }, + }; +}; diff --git a/x-pack/plugins/observability_solution/observability/public/plugin.ts b/x-pack/plugins/observability_solution/observability/public/plugin.ts index b2d0e526f3c64..43967f1339c5c 100644 --- a/x-pack/plugins/observability_solution/observability/public/plugin.ts +++ b/x-pack/plugins/observability_solution/observability/public/plugin.ts @@ -445,14 +445,18 @@ export class Plugin } public start(coreStart: CoreStart, pluginsStart: ObservabilityPublicPluginsStart) { - const { application } = coreStart; + const { application, http, notifications } = coreStart; + const { dataViews, triggersActionsUi } = pluginsStart; const config = this.initContext.config.get(); - const { alertsTableConfigurationRegistry } = pluginsStart.triggersActionsUi; + const { alertsTableConfigurationRegistry } = triggersActionsUi; this.lazyRegisterAlertsTableConfiguration().then(({ registerAlertsTableConfiguration }) => { return registerAlertsTableConfiguration( alertsTableConfigurationRegistry, this.observabilityRuleTypeRegistry, - config + config, + dataViews, + http, + notifications ); }); diff --git a/x-pack/plugins/observability_solution/observability/tsconfig.json b/x-pack/plugins/observability_solution/observability/tsconfig.json index 0a65077d42a1e..72609a3ada8bd 100644 --- a/x-pack/plugins/observability_solution/observability/tsconfig.json +++ b/x-pack/plugins/observability_solution/observability/tsconfig.json @@ -112,6 +112,9 @@ "@kbn/core-ui-settings-server-mocks", "@kbn/investigate-plugin", "@kbn/investigation-shared", + "@kbn/grouping", + "@kbn/alerts-grouping", + "@kbn/core-http-browser" ], "exclude": [ "target/**/*" diff --git a/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts b/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts index 76a39737190ce..8d61b2b4e5609 100644 --- a/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts +++ b/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts @@ -1133,7 +1133,7 @@ export class AlertsClient { script: { source: // When size()==0, emits a uniqueValue as the value to represent this group else join by uniqueValue. - "if (doc[params['selectedGroup']].size()==0) { emit(params['uniqueValue']) }" + + "if (!doc.containsKey(params['selectedGroup']) || doc[params['selectedGroup']].size()==0) { emit(params['uniqueValue']) }" + // Else, join the values with uniqueValue. We cannot simply emit the value like doc[params['selectedGroup']].value, // the runtime field will only return the first value in an array. // The docs advise that if the field has multiple values, "Scripts can call the emit method multiple times to emit multiple values." diff --git a/x-pack/plugins/rule_registry/server/alert_data_client/tests/get_alerts_group_aggregations.test.ts b/x-pack/plugins/rule_registry/server/alert_data_client/tests/get_alerts_group_aggregations.test.ts index af10edf372383..c351de1283c2b 100644 --- a/x-pack/plugins/rule_registry/server/alert_data_client/tests/get_alerts_group_aggregations.test.ts +++ b/x-pack/plugins/rule_registry/server/alert_data_client/tests/get_alerts_group_aggregations.test.ts @@ -127,7 +127,7 @@ describe('getGroupAggregations()', () => { type: 'keyword', script: { source: - "if (doc[params['selectedGroup']].size()==0) { emit(params['uniqueValue']) }" + + "if (!doc.containsKey(params['selectedGroup']) || doc[params['selectedGroup']].size()==0) { emit(params['uniqueValue']) }" + " else { emit(doc[params['selectedGroup']].join(params['uniqueValue']))}", params: { selectedGroup: groupByField, diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index a0443e37fa617..1ed13e47986fb 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -32363,8 +32363,6 @@ "xpack.observability.alertDetailContextualInsights.InsightButtonLabel": "Aidez moi à comprendre cette alerte", "xpack.observability.alertDetails.actionsButtonLabel": "Actions", "xpack.observability.alertDetails.addToCase": "Ajouter au cas", - "xpack.observability.alertDetails.alertSummaryField.moreTags": "+{number} de plus", - "xpack.observability.alertDetails.alertSummaryField.moreTags.ariaLabel": "badge plus de balises", "xpack.observability.alertDetails.alertSummaryField.rule": "Règle", "xpack.observability.alertDetails.alertSummaryField.source": "Source", "xpack.observability.alertDetails.alertSummaryField.tags": "Balises", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index e662987308271..b4224908c64a5 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -32347,8 +32347,6 @@ "xpack.observability.alertDetailContextualInsights.InsightButtonLabel": "このアラートを理解できるように支援してください", "xpack.observability.alertDetails.actionsButtonLabel": "アクション", "xpack.observability.alertDetails.addToCase": "ケースに追加", - "xpack.observability.alertDetails.alertSummaryField.moreTags": "その他{number}", - "xpack.observability.alertDetails.alertSummaryField.moreTags.ariaLabel": "その他のタグバッジ", "xpack.observability.alertDetails.alertSummaryField.rule": "ルール", "xpack.observability.alertDetails.alertSummaryField.source": "送信元", "xpack.observability.alertDetails.alertSummaryField.tags": "タグ", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index ef6badee07f44..78ff3faf194f1 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -32387,8 +32387,6 @@ "xpack.observability.alertDetailContextualInsights.InsightButtonLabel": "帮助我了解此告警", "xpack.observability.alertDetails.actionsButtonLabel": "操作", "xpack.observability.alertDetails.addToCase": "添加到案例", - "xpack.observability.alertDetails.alertSummaryField.moreTags": "+ 另外 {number} 个", - "xpack.observability.alertDetails.alertSummaryField.moreTags.ariaLabel": "更多标签徽章", "xpack.observability.alertDetails.alertSummaryField.rule": "规则", "xpack.observability.alertDetails.alertSummaryField.source": "源", "xpack.observability.alertDetails.alertSummaryField.tags": "标签", From cdcdfddd3feafe0165066c6d1f4865a84d0cdcf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Marcondes?= <55978943+cauemarcondes@users.noreply.github.com> Date: Thu, 22 Aug 2024 11:24:10 +0100 Subject: [PATCH 10/59] [APM][ECO] enabling FF by default (#191056) I missed changing these two files on my previous [PR](https://github.com/elastic/kibana/pull/190422). --- .../public/components/routing/templates/apm_main_template.tsx | 2 +- .../context/entity_manager_context/entity_manager_context.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template.tsx b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template.tsx index 257406ce1a8fc..dd18607c48011 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template.tsx @@ -77,7 +77,7 @@ export function ApmMainTemplate({ const { config, core } = useApmPluginContext(); const isEntityCentricExperienceSettingEnabled = core.uiSettings.get( entityCentricExperience, - false + true ); const { isEntityCentricExperienceViewEnabled, serviceInventoryViewLocalStorageSetting } = useEntityManagerEnablementContext(); diff --git a/x-pack/plugins/observability_solution/apm/public/context/entity_manager_context/entity_manager_context.tsx b/x-pack/plugins/observability_solution/apm/public/context/entity_manager_context/entity_manager_context.tsx index e8c297cb13a92..c2c3d6c1a57be 100644 --- a/x-pack/plugins/observability_solution/apm/public/context/entity_manager_context/entity_manager_context.tsx +++ b/x-pack/plugins/observability_solution/apm/public/context/entity_manager_context/entity_manager_context.tsx @@ -61,7 +61,7 @@ export function EntityManagerEnablementContextProvider({ const isEntityCentricExperienceSettingEnabled = core.uiSettings.get( entityCentricExperience, - false + true ); const isEntityCentricExperienceViewEnabled = From a524e27bed873137a296991a04830a49c4ff188e Mon Sep 17 00:00:00 2001 From: Saarika Bhasi <55930906+saarikabhasi@users.noreply.github.com> Date: Thu, 22 Aug 2024 07:27:33 -0400 Subject: [PATCH 11/59] [Search] Search assistant plugin setup (#190633) ## Summary Introducing new plugin for search assistant. in the future this will be extension of Observability AI solution solution [plugin](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/observability_ai_assistant) ### 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) --------- Co-authored-by: Elastic Machine Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Sander Philipse --- .github/CODEOWNERS | 1 + docs/developer/plugin-list.asciidoc | 4 ++ package.json | 1 + packages/kbn-optimizer/limits.yml | 1 + tsconfig.base.json | 2 + x-pack/.i18nrc.json | 1 + x-pack/plugins/search_assistant/README.md | 3 ++ .../plugins/search_assistant/common/index.ts | 8 ++++ x-pack/plugins/search_assistant/kibana.jsonc | 24 ++++++++++++ .../search_assistant/public/application.tsx | 37 +++++++++++++++++++ .../public/components/app.tsx | 15 ++++++++ .../public/components/search_assistant.tsx | 24 ++++++++++++ .../plugins/search_assistant/public/index.ts | 13 +++++++ .../plugins/search_assistant/public/plugin.ts | 29 +++++++++++++++ .../search_assistant/public/router.tsx | 20 ++++++++++ .../plugins/search_assistant/public/types.ts | 22 +++++++++++ .../plugins/search_assistant/server/config.ts | 19 ++++++++++ .../plugins/search_assistant/server/index.ts | 15 ++++++++ .../plugins/search_assistant/server/plugin.ts | 26 +++++++++++++ .../plugins/search_assistant/server/types.ts | 11 ++++++ x-pack/plugins/search_assistant/tsconfig.json | 28 ++++++++++++++ yarn.lock | 4 ++ 22 files changed, 308 insertions(+) create mode 100755 x-pack/plugins/search_assistant/README.md create mode 100644 x-pack/plugins/search_assistant/common/index.ts create mode 100644 x-pack/plugins/search_assistant/kibana.jsonc create mode 100644 x-pack/plugins/search_assistant/public/application.tsx create mode 100644 x-pack/plugins/search_assistant/public/components/app.tsx create mode 100644 x-pack/plugins/search_assistant/public/components/search_assistant.tsx create mode 100644 x-pack/plugins/search_assistant/public/index.ts create mode 100644 x-pack/plugins/search_assistant/public/plugin.ts create mode 100644 x-pack/plugins/search_assistant/public/router.tsx create mode 100644 x-pack/plugins/search_assistant/public/types.ts create mode 100644 x-pack/plugins/search_assistant/server/config.ts create mode 100644 x-pack/plugins/search_assistant/server/index.ts create mode 100644 x-pack/plugins/search_assistant/server/plugin.ts create mode 100644 x-pack/plugins/search_assistant/server/types.ts create mode 100644 x-pack/plugins/search_assistant/tsconfig.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ba352582bd651..bc5dc9e82c8c2 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -733,6 +733,7 @@ src/plugins/screenshot_mode @elastic/appex-sharedux x-pack/examples/screenshotting_example @elastic/appex-sharedux x-pack/plugins/screenshotting @elastic/kibana-reporting-services packages/kbn-search-api-panels @elastic/search-kibana +x-pack/plugins/search_assistant @elastic/search-kibana packages/kbn-search-connectors @elastic/search-kibana x-pack/plugins/search_connectors @elastic/search-kibana packages/kbn-search-errors @elastic/kibana-data-discovery diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index 49b5755243076..fc89188c4d219 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -795,6 +795,10 @@ Elastic. It uses Chromium and Puppeteer underneath to run the browser in headless mode. +|{kib-repo}blob/{branch}/x-pack/plugins/search_assistant/README.md[searchAssistant] +|This holds the Search AI Assistant which targets Search users and Serverless Elasticsearch. + + |{kib-repo}blob/{branch}/x-pack/plugins/search_connectors/README.mdx[searchConnectors] |This plugin contains common assets and endpoints for the use of connectors in Kibana. Primarily used by the enterprise_search and serverless_search plugins. diff --git a/package.json b/package.json index 0b93cb96d4e47..0edb050fe9aea 100644 --- a/package.json +++ b/package.json @@ -751,6 +751,7 @@ "@kbn/screenshotting-example-plugin": "link:x-pack/examples/screenshotting_example", "@kbn/screenshotting-plugin": "link:x-pack/plugins/screenshotting", "@kbn/search-api-panels": "link:packages/kbn-search-api-panels", + "@kbn/search-assistant": "link:x-pack/plugins/search_assistant", "@kbn/search-connectors": "link:packages/kbn-search-connectors", "@kbn/search-connectors-plugin": "link:x-pack/plugins/search_connectors", "@kbn/search-errors": "link:packages/kbn-search-errors", diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index a33156e376972..d6aa58cb5d307 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -136,6 +136,7 @@ pageLoadAssetSize: savedSearch: 16225 screenshotMode: 17856 screenshotting: 22870 + searchAssistant: 19831 searchConnectors: 30000 searchHomepage: 19831 searchInferenceEndpoints: 20470 diff --git a/tsconfig.base.json b/tsconfig.base.json index fb98e0160cb76..f433970fae490 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1460,6 +1460,8 @@ "@kbn/screenshotting-plugin/*": ["x-pack/plugins/screenshotting/*"], "@kbn/search-api-panels": ["packages/kbn-search-api-panels"], "@kbn/search-api-panels/*": ["packages/kbn-search-api-panels/*"], + "@kbn/search-assistant": ["x-pack/plugins/search_assistant"], + "@kbn/search-assistant/*": ["x-pack/plugins/search_assistant/*"], "@kbn/search-connectors": ["packages/kbn-search-connectors"], "@kbn/search-connectors/*": ["packages/kbn-search-connectors/*"], "@kbn/search-connectors-plugin": ["x-pack/plugins/search_connectors"], diff --git a/x-pack/.i18nrc.json b/x-pack/.i18nrc.json index 97a7a92c93b5a..c90ce916b712b 100644 --- a/x-pack/.i18nrc.json +++ b/x-pack/.i18nrc.json @@ -105,6 +105,7 @@ "xpack.searchNotebooks": "plugins/search_notebooks", "xpack.searchPlayground": "plugins/search_playground", "xpack.searchInferenceEndpoints": "plugins/search_inference_endpoints", + "xpack.searchAssistant": "plugins/search_assistant", "xpack.searchProfiler": "plugins/searchprofiler", "xpack.security": ["plugins/security", "packages/security"], "xpack.server": "legacy/server", diff --git a/x-pack/plugins/search_assistant/README.md b/x-pack/plugins/search_assistant/README.md new file mode 100755 index 0000000000000..faf956ad6ec48 --- /dev/null +++ b/x-pack/plugins/search_assistant/README.md @@ -0,0 +1,3 @@ +# SearchAssistant + +This holds the Search AI Assistant which targets Search users and Serverless Elasticsearch. diff --git a/x-pack/plugins/search_assistant/common/index.ts b/x-pack/plugins/search_assistant/common/index.ts new file mode 100644 index 0000000000000..27bbca34ce7d1 --- /dev/null +++ b/x-pack/plugins/search_assistant/common/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 const PLUGIN_ID = 'searchAssistant'; +export const PLUGIN_NAME = 'searchAssistant'; diff --git a/x-pack/plugins/search_assistant/kibana.jsonc b/x-pack/plugins/search_assistant/kibana.jsonc new file mode 100644 index 0000000000000..85579b76a1e80 --- /dev/null +++ b/x-pack/plugins/search_assistant/kibana.jsonc @@ -0,0 +1,24 @@ +{ + "type": "plugin", + "id": "@kbn/search-assistant", + "owner": "@elastic/search-kibana", + "description": "AI Assistant for Search", + "plugin": { + "id": "searchAssistant", + "server": true, + "browser": true, + "configPath": [ + "xpack", + "searchAssistant" + ], + "requiredPlugins": [ + "observabilityAIAssistant", + "observabilityAIAssistantApp" + ], + "optionalPlugins": [ + "cloud", + "usageCollection", + ], + "requiredBundles": [] + } +} diff --git a/x-pack/plugins/search_assistant/public/application.tsx b/x-pack/plugins/search_assistant/public/application.tsx new file mode 100644 index 0000000000000..071c51f4b6e13 --- /dev/null +++ b/x-pack/plugins/search_assistant/public/application.tsx @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import ReactDOM from 'react-dom'; +import type { CoreStart } from '@kbn/core/public'; +import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { I18nProvider } from '@kbn/i18n-react'; +import { Router } from '@kbn/shared-ux-router'; +import type { SearchAssistantPluginStartDependencies } from './types'; +import { SearchAssistantRouter } from './router'; + +export const renderApp = ( + core: CoreStart, + services: SearchAssistantPluginStartDependencies, + element: HTMLElement +) => { + ReactDOM.render( + + + + + + + + + , + element + ); + + return () => ReactDOM.unmountComponentAtNode(element); +}; diff --git a/x-pack/plugins/search_assistant/public/components/app.tsx b/x-pack/plugins/search_assistant/public/components/app.tsx new file mode 100644 index 0000000000000..7d9497c0e1457 --- /dev/null +++ b/x-pack/plugins/search_assistant/public/components/app.tsx @@ -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 React from 'react'; +import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; +export const App: React.FC = () => { + return ( + +
+ + ); +}; diff --git a/x-pack/plugins/search_assistant/public/components/search_assistant.tsx b/x-pack/plugins/search_assistant/public/components/search_assistant.tsx new file mode 100644 index 0000000000000..9c227a4e7b73f --- /dev/null +++ b/x-pack/plugins/search_assistant/public/components/search_assistant.tsx @@ -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 { EuiPageTemplate } from '@elastic/eui'; +import React from 'react'; +import { App } from './app'; + +export const SearchAssistantPage: React.FC = () => { + return ( + + + + ); +}; diff --git a/x-pack/plugins/search_assistant/public/index.ts b/x-pack/plugins/search_assistant/public/index.ts new file mode 100644 index 0000000000000..c2b16e857b53e --- /dev/null +++ b/x-pack/plugins/search_assistant/public/index.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 { SearchAssistantPlugin } from './plugin'; + +export function plugin() { + return new SearchAssistantPlugin(); +} +export type { SearchAssistantPluginSetup, SearchAssistantPluginStart } from './types'; diff --git a/x-pack/plugins/search_assistant/public/plugin.ts b/x-pack/plugins/search_assistant/public/plugin.ts new file mode 100644 index 0000000000000..8ba22a48df9ff --- /dev/null +++ b/x-pack/plugins/search_assistant/public/plugin.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { CoreSetup, Plugin } from '@kbn/core/public'; +import type { + SearchAssistantPluginSetup, + SearchAssistantPluginStart, + SearchAssistantPluginStartDependencies, +} from './types'; + +export class SearchAssistantPlugin + implements Plugin +{ + public setup( + core: CoreSetup + ): SearchAssistantPluginSetup { + return {}; + } + + public start(): SearchAssistantPluginStart { + return {}; + } + + public stop() {} +} diff --git a/x-pack/plugins/search_assistant/public/router.tsx b/x-pack/plugins/search_assistant/public/router.tsx new file mode 100644 index 0000000000000..a25f865b4f74a --- /dev/null +++ b/x-pack/plugins/search_assistant/public/router.tsx @@ -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 { Route, Routes } from '@kbn/shared-ux-router'; +import React from 'react'; +import { SearchAssistantPage } from './components/search_assistant'; + +export const SearchAssistantRouter: React.FC = () => { + return ( + + + + + + ); +}; diff --git a/x-pack/plugins/search_assistant/public/types.ts b/x-pack/plugins/search_assistant/public/types.ts new file mode 100644 index 0000000000000..f05592414a9dc --- /dev/null +++ b/x-pack/plugins/search_assistant/public/types.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 { AppMountParameters } from '@kbn/core/public'; +import { UsageCollectionStart } from '@kbn/usage-collection-plugin/public'; +import { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public'; + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SearchAssistantPluginSetup {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SearchAssistantPluginStart {} + +export interface SearchAssistantPluginStartDependencies { + history: AppMountParameters['history']; + observabilityAIAssistant: ObservabilityAIAssistantPublicStart; + usageCollection?: UsageCollectionStart; +} diff --git a/x-pack/plugins/search_assistant/server/config.ts b/x-pack/plugins/search_assistant/server/config.ts new file mode 100644 index 0000000000000..a09b7ac51b7b7 --- /dev/null +++ b/x-pack/plugins/search_assistant/server/config.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema, TypeOf } from '@kbn/config-schema'; +import { PluginConfigDescriptor } from '@kbn/core/server'; + +const configSchema = schema.object({ + enabled: schema.boolean({ defaultValue: false }), +}); + +export type SearchAssistantConfig = TypeOf; + +export const config: PluginConfigDescriptor = { + schema: configSchema, +}; diff --git a/x-pack/plugins/search_assistant/server/index.ts b/x-pack/plugins/search_assistant/server/index.ts new file mode 100644 index 0000000000000..027b51cfdd7d7 --- /dev/null +++ b/x-pack/plugins/search_assistant/server/index.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 { SearchAssistantPlugin } from './plugin'; + +export { config } from './config'; + +export function plugin() { + return new SearchAssistantPlugin(); +} + +export type { SearchAssistantPluginSetup, SearchAssistantPluginStart } from './types'; diff --git a/x-pack/plugins/search_assistant/server/plugin.ts b/x-pack/plugins/search_assistant/server/plugin.ts new file mode 100644 index 0000000000000..cdd6c3ea115b2 --- /dev/null +++ b/x-pack/plugins/search_assistant/server/plugin.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Plugin } from '@kbn/core/server'; + +import type { SearchAssistantPluginSetup, SearchAssistantPluginStart } from './types'; + +export class SearchAssistantPlugin + implements Plugin +{ + constructor() {} + + public setup() { + return {}; + } + + public start() { + return {}; + } + + public stop() {} +} diff --git a/x-pack/plugins/search_assistant/server/types.ts b/x-pack/plugins/search_assistant/server/types.ts new file mode 100644 index 0000000000000..03c2e5a46f91d --- /dev/null +++ b/x-pack/plugins/search_assistant/server/types.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. + */ + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SearchAssistantPluginSetup {} +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SearchAssistantPluginStart {} diff --git a/x-pack/plugins/search_assistant/tsconfig.json b/x-pack/plugins/search_assistant/tsconfig.json new file mode 100644 index 0000000000000..090356cf1f440 --- /dev/null +++ b/x-pack/plugins/search_assistant/tsconfig.json @@ -0,0 +1,28 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types" + }, + "include": [ + "index.ts", + "common/**/*.ts", + "public/**/*.ts", + "public/**/*.tsx", + "server/**/*.ts", + "../../typings/**/*" + ], + "kbn_references": [ + "@kbn/core", + "@kbn/react-kibana-context-render", + "@kbn/kibana-react-plugin", + "@kbn/i18n-react", + "@kbn/shared-ux-router", + "@kbn/shared-ux-page-kibana-template", + "@kbn/usage-collection-plugin", + "@kbn/observability-ai-assistant-plugin", + "@kbn/config-schema" + ], + "exclude": [ + "target/**/*", + ] +} diff --git a/yarn.lock b/yarn.lock index 73366acb9d613..9a876f07ecb25 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6216,6 +6216,10 @@ version "0.0.0" uid "" +"@kbn/search-assistant@link:x-pack/plugins/search_assistant": + version "0.0.0" + uid "" + "@kbn/search-connectors-plugin@link:x-pack/plugins/search_connectors": version "0.0.0" uid "" From 432faea77b95de2a9c05cac4c402a7368d7b4922 Mon Sep 17 00:00:00 2001 From: Maxim Kholod Date: Thu, 22 Aug 2024 14:34:32 +0200 Subject: [PATCH 12/59] [Cloud Security] align vertically controls on bechmark pages (#191066) ## Summary - part of https://github.com/elastic/security-team/issues/10316 - fixes https://github.com/elastic/security-team/issues/9428#issuecomment-2107656242 ## Screenshots Screenshot 2024-08-22 at 12 34 47 Screenshot 2024-08-22 at 12 34 54 --- .../public/pages/rules/rules_table_header.tsx | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx index fc714263f38be..116bae053fd32 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx @@ -23,7 +23,6 @@ import useDebounce from 'react-use/lib/useDebounce'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { css } from '@emotion/react'; -import { euiThemeVars } from '@kbn/ui-theme'; import { useKibana } from '../../common/hooks/use_kibana'; import { getFindingsDetectionRuleSearchTagsFromArrayOfRules } from '../../../common/utils/detection_rules'; import { @@ -294,9 +293,6 @@ const CurrentPageOfTotal = ({ size="xs" iconType="arrowDown" iconSide="right" - css={css` - padding-bottom: ${euiThemeVars.euiSizeS}; - `} data-test-subj={RULES_BULK_ACTION_BUTTON} > Bulk actions @@ -326,7 +322,7 @@ const CurrentPageOfTotal = ({ return ( - + setSelectedRules([])} size="xs" iconType="cross" - css={css` - padding-bottom: ${euiThemeVars.euiSizeS}; - `} data-test-subj={RULES_CLEAR_ALL_RULES_SELECTION} > Date: Thu, 22 Aug 2024 08:07:14 -0500 Subject: [PATCH 13/59] [ci] Upgrade axios to 1.7.4 (#191023) --- .buildkite/package-lock.json | 18 +++++++++--------- .buildkite/package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.buildkite/package-lock.json b/.buildkite/package-lock.json index 437e56299cb6c..de45e39fb4092 100644 --- a/.buildkite/package-lock.json +++ b/.buildkite/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "dependencies": { "@octokit/rest": "^18.10.0", - "axios": "^1.6.3", + "axios": "^1.7.4", "globby": "^11.1.0", "js-yaml": "^4.1.0", "minimatch": "^5.0.1", @@ -351,11 +351,11 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", + "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -1946,11 +1946,11 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", + "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", "requires": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } diff --git a/.buildkite/package.json b/.buildkite/package.json index efd66f1c17a09..158a55c777e6a 100644 --- a/.buildkite/package.json +++ b/.buildkite/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@octokit/rest": "^18.10.0", - "axios": "^1.6.3", + "axios": "^1.7.4", "globby": "^11.1.0", "js-yaml": "^4.1.0", "minimatch": "^5.0.1", From e932b932f0f84c8fdf697292546512c7531aa1f6 Mon Sep 17 00:00:00 2001 From: Sander Philipse <94373878+sphilipse@users.noreply.github.com> Date: Thu, 22 Aug 2024 15:33:31 +0200 Subject: [PATCH 14/59] [Search] Fix one instance of div nesting inside p warning (#191061) ## Summary This fixes one error of a div being nested inside of a p, and fixes some header order issues. --- .../components/shared/ingestion_card/ingestion_card.tsx | 1 + .../components/product_selector/product_selector.tsx | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/ingestion_card/ingestion_card.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/ingestion_card/ingestion_card.tsx index 819b46f6b393a..0d01eea4e6787 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/ingestion_card/ingestion_card.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/ingestion_card/ingestion_card.tsx @@ -46,6 +46,7 @@ export const IngestionCard: React.FC = ({ hasBorder isDisabled={isDisabled} textAlign="left" + titleElement="h3" title={ <> diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx index f6762e0e59bab..71139a8b36402 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx @@ -62,11 +62,11 @@ export const ProductSelector: React.FC = () => { -

+

{i18n.translate('xpack.enterpriseSearch.productSelector.overview.title', { defaultMessage: 'Ingest your content', })} -

+
From 08fbd9caae04ca9f077333ced6c53b4635e0cc9e Mon Sep 17 00:00:00 2001 From: Vadim Kibana <82822460+vadimkibana@users.noreply.github.com> Date: Thu, 22 Aug 2024 15:35:14 +0200 Subject: [PATCH 15/59] [ES|QL] Correctly parse `source` nodes (#190941) ## Summary Fixes `source` node parsing. Correctly handles cluster part and unescapes the quoted index string part. 1. First removes the cluster string part. 2. Unquotes and unescapes the index string part (if it is quoted and escaped). Those two were not done before: the index patter string was unquoted as a whole (with cluster part attached); and, the index string was not unescaped. ### 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 ### 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) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../src/__tests__/ast_parser.source.test.ts | 265 ++++++++++++++++++ packages/kbn-esql-ast/src/ast_helpers.ts | 48 ++++ packages/kbn-esql-ast/src/types.ts | 19 ++ 3 files changed, 332 insertions(+) create mode 100644 packages/kbn-esql-ast/src/__tests__/ast_parser.source.test.ts diff --git a/packages/kbn-esql-ast/src/__tests__/ast_parser.source.test.ts b/packages/kbn-esql-ast/src/__tests__/ast_parser.source.test.ts new file mode 100644 index 0000000000000..8d01e655e6fff --- /dev/null +++ b/packages/kbn-esql-ast/src/__tests__/ast_parser.source.test.ts @@ -0,0 +1,265 @@ +/* + * Copyright 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 { getAstAndSyntaxErrors as parse } from '../ast_parser'; + +describe('source nodes', () => { + it('cluster vs quoted source', () => { + const text = 'FROM cluster:index, "cluster:index"'; + const { ast } = parse(text); + + expect(ast).toMatchObject([ + { + type: 'command', + name: 'from', + args: [ + { + type: 'source', + name: 'cluster:index', + cluster: 'cluster', + index: 'index', + }, + { + type: 'source', + name: 'cluster:index', + cluster: '', + index: 'cluster:index', + }, + ], + }, + ]); + }); + + it('date-math syntax', () => { + const text = 'FROM '; + const { ast } = parse(text); + + expect(ast).toMatchObject([ + { + type: 'command', + name: 'from', + args: [ + { + type: 'source', + name: '', + cluster: '', + index: '', + }, + ], + }, + ]); + }); + + describe('unquoted', () => { + it('basic', () => { + const text = 'FROM a'; + const { ast } = parse(text); + + expect(ast).toMatchObject([ + { + type: 'command', + name: 'from', + args: [ + { + type: 'source', + name: 'a', + cluster: '', + index: 'a', + }, + ], + }, + ]); + }); + + it('with slash', () => { + const text = 'FROM a/b'; + const { ast } = parse(text); + + expect(ast).toMatchObject([ + { + type: 'command', + name: 'from', + args: [ + { + type: 'source', + name: 'a/b', + cluster: '', + index: 'a/b', + }, + ], + }, + ]); + }); + + it('dot and star', () => { + const text = 'FROM a.b-*'; + const { ast } = parse(text); + + expect(ast).toMatchObject([ + { + type: 'command', + name: 'from', + args: [ + { + type: 'source', + name: 'a.b-*', + cluster: '', + index: 'a.b-*', + }, + ], + }, + ]); + }); + }); + + describe('double quoted', () => { + it('basic', () => { + const text = 'FROM "a"'; + const { ast } = parse(text); + + expect(ast).toMatchObject([ + { + type: 'command', + name: 'from', + args: [ + { + type: 'source', + name: 'a', + cluster: '', + index: 'a', + }, + ], + }, + ]); + }); + + it('allows escaped chars', () => { + const text = 'FROM "a \\" \\r \\n \\t \\\\ b"'; + const { ast } = parse(text); + + expect(ast).toMatchObject([ + { + type: 'command', + name: 'from', + args: [ + { + type: 'source', + name: expect.any(String), + cluster: '', + index: 'a " \r \n \t \\ b', + }, + ], + }, + ]); + }); + }); + + describe('triple-double quoted', () => { + it('basic', () => { + const text = 'FROM """a"""'; + const { ast } = parse(text); + + expect(ast).toMatchObject([ + { + type: 'command', + name: 'from', + args: [ + { + type: 'source', + name: 'a', + cluster: '', + index: 'a', + }, + ], + }, + ]); + }); + + it('with double quote in the middle', () => { + const text = 'FROM """a"b"""'; + const { ast } = parse(text); + + expect(ast).toMatchObject([ + { + type: 'command', + name: 'from', + args: [ + { + type: 'source', + name: 'a"b', + cluster: '', + index: 'a"b', + }, + ], + }, + ]); + }); + + it('allows special chars', () => { + const text = 'FROM """a:\\/b"""'; + const { ast } = parse(text); + + expect(ast).toMatchObject([ + { + type: 'command', + name: 'from', + args: [ + { + type: 'source', + name: 'a:\\/b', + cluster: '', + index: 'a:\\/b', + }, + ], + }, + ]); + }); + + it('allows emojis', () => { + const text = 'FROM """a👍b"""'; + const { ast } = parse(text); + + expect(ast).toMatchObject([ + { + type: 'command', + name: 'from', + args: [ + { + type: 'source', + name: 'a👍b', + cluster: '', + index: 'a👍b', + }, + ], + }, + ]); + }); + }); + + describe('cluster string', () => { + it('basic', () => { + const text = 'FROM cluster:a'; + const { ast } = parse(text); + + expect(ast).toMatchObject([ + { + type: 'command', + name: 'from', + args: [ + { + type: 'source', + name: 'cluster:a', + cluster: 'cluster', + index: 'a', + }, + ], + }, + ]); + }); + }); +}); diff --git a/packages/kbn-esql-ast/src/ast_helpers.ts b/packages/kbn-esql-ast/src/ast_helpers.ts index 44f9a2663db17..e338d2eacd4a4 100644 --- a/packages/kbn-esql-ast/src/ast_helpers.ts +++ b/packages/kbn-esql-ast/src/ast_helpers.ts @@ -12,6 +12,7 @@ import { type Token, type ParserRuleContext, type TerminalNode } from 'antlr4'; import { + IndexPatternContext, QualifiedNameContext, type ArithmeticUnaryContext, type DecimalValueContext, @@ -306,6 +307,34 @@ function sanitizeSourceString(ctx: ParserRuleContext) { return contextText; } +const unquoteIndexString = (indexString: string): string => { + const isStringQuoted = indexString[0] === '"'; + + if (!isStringQuoted) { + return indexString; + } + + // If wrapped by triple double quotes, simply remove them. + if (indexString.startsWith(`"""`) && indexString.endsWith(`"""`)) { + return indexString.slice(3, -3); + } + + // If wrapped by double quote, remove them and unescape the string. + if (indexString[indexString.length - 1] === '"') { + indexString = indexString.slice(1, -1); + indexString = indexString + .replace(/\\"/g, '"') + .replace(/\\r/g, '\r') + .replace(/\\n/g, '\n') + .replace(/\\t/g, '\t') + .replace(/\\\\/g, '\\'); + return indexString; + } + + // This should never happen, but if it does, return the original string. + return indexString; +}; + export function sanitizeIdentifierString(ctx: ParserRuleContext) { const result = getUnquotedText(ctx)?.getText() || @@ -352,8 +381,27 @@ export function createSource( type: 'index' | 'policy' = 'index' ): ESQLSource { const text = sanitizeSourceString(ctx); + + let cluster: string = ''; + let index: string = ''; + + if (ctx instanceof IndexPatternContext) { + const clusterString = ctx.clusterString(); + const indexString = ctx.indexString(); + + if (clusterString) { + cluster = clusterString.getText(); + } + if (indexString) { + index = indexString.getText(); + index = unquoteIndexString(index); + } + } + return { type: 'source', + cluster, + index, name: text, sourceType: type, text, diff --git a/packages/kbn-esql-ast/src/types.ts b/packages/kbn-esql-ast/src/types.ts index ae675a375a430..e9c0db1d216d3 100644 --- a/packages/kbn-esql-ast/src/types.ts +++ b/packages/kbn-esql-ast/src/types.ts @@ -175,6 +175,25 @@ export interface ESQLTimeInterval extends ESQLAstBaseItem { export interface ESQLSource extends ESQLAstBaseItem { type: 'source'; sourceType: 'index' | 'policy'; + + /** + * Represents the cluster part of the source identifier. Empty string if not + * present. + * + * ``` + * FROM [:] + * ``` + */ + cluster?: string; + + /** + * Represents the index part of the source identifier. Unescaped and unquoted. + * + * ``` + * FROM [:] + * ``` + */ + index?: string; } export interface ESQLColumn extends ESQLAstBaseItem { From 7217ad0c052bc9ec3ec94f549574fa2151a69eda Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Thu, 22 Aug 2024 15:43:08 +0200 Subject: [PATCH 16/59] Change the ownership of the `inference` plugin (#191071) ## Summary Change the ownership from `@elastic/kibana-core` to `@elastic/appex-ai-infra` --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 6 ++++-- x-pack/plugins/inference/kibana.jsonc | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index bc5dc9e82c8c2..aceeaf933cc49 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -508,7 +508,7 @@ x-pack/packages/index-management @elastic/kibana-management x-pack/plugins/index_management @elastic/kibana-management test/plugin_functional/plugins/index_patterns @elastic/kibana-data-discovery x-pack/packages/ml/inference_integration_flyout @elastic/ml-ui -x-pack/plugins/inference @elastic/kibana-core +x-pack/plugins/inference @elastic/appex-ai-infra x-pack/packages/kbn-infra-forge @elastic/obs-ux-management-team x-pack/plugins/observability_solution/infra @elastic/obs-ux-logs-team @elastic/obs-ux-infra_services-team x-pack/plugins/ingest_pipelines @elastic/kibana-management @@ -1307,7 +1307,6 @@ x-pack/test/**/deployment_agnostic/ @elastic/appex-qa #temporarily to monitor te /x-pack/test_serverless/**/test_suites/common/saved_objects_management/ @elastic/kibana-core /x-pack/test_serverless/api_integration/test_suites/common/core/ @elastic/kibana-core /x-pack/test_serverless/api_integration/test_suites/**/telemetry/ @elastic/kibana-core -/x-pack/plugins/inference @elastic/kibana-core @elastic/obs-ai-assistant @elastic/security-generative-ai #CC# /src/core/server/csp/ @elastic/kibana-core #CC# /src/plugins/saved_objects/ @elastic/kibana-core #CC# /x-pack/plugins/cloud/ @elastic/kibana-core @@ -1316,6 +1315,9 @@ x-pack/test/**/deployment_agnostic/ @elastic/appex-qa #temporarily to monitor te #CC# /src/plugins/newsfeed @elastic/kibana-core #CC# /x-pack/plugins/global_search_providers/ @elastic/kibana-core +# AppEx AI Infra +/x-pack/plugins/inference @elastic/appex-ai-infra @elastic/obs-ai-assistant @elastic/security-generative-ai + # AppEx Platform Services Security x-pack/test_serverless/api_integration/test_suites/common/security_response_headers.ts @elastic/kibana-security diff --git a/x-pack/plugins/inference/kibana.jsonc b/x-pack/plugins/inference/kibana.jsonc index c52b194be7dc7..6e4e389bdc5ff 100644 --- a/x-pack/plugins/inference/kibana.jsonc +++ b/x-pack/plugins/inference/kibana.jsonc @@ -1,7 +1,7 @@ { "type": "plugin", "id": "@kbn/inference-plugin", - "owner": "@elastic/kibana-core", + "owner": "@elastic/appex-ai-infra", "plugin": { "id": "inference", "server": true, From 44fafb88d5aa9f357d22c33c2ebb377481036db0 Mon Sep 17 00:00:00 2001 From: "Eyo O. Eyo" <7893459+eokoneyo@users.noreply.github.com> Date: Thu, 22 Aug 2024 15:44:54 +0200 Subject: [PATCH 17/59] Extract authorization logic and it's peripherals into packages (#190028) ## Summary This PR is a precursor to https://github.com/elastic/kibana/pull/189871, as part of the spaces improvement initiative there's a need to be able to share the user privilege assignment component between the roles experience and the new spaces experience to prevent duplication of business logic and cohesiveness in the privilege assignment experience. The aforementioned PR extracts the required component into it's own package so it might be consumed as needed, this PR is particularly concerned with extracting business logic said UI component depends on that exists still within the security plugin. For context; the security plugin already depends on the spaces plugin, so having the spaces plugin in turn statically depend on the security plugin creates a cyclic dependency. That being said to complement the eventual state of said component so it might be imported elsewhere outside of the security plugin there's a need to extract further logic into standalone packages, so that the spaces plugin can consume this plugin without the afore mentioned cyclic dependency problem. #### Visually; ##### Problem; ![image](https://github.com/user-attachments/assets/6be85fb0-3ba3-4d5f-b614-3c0ff2cf7c69) ##### Proposal ![image](https://github.com/user-attachments/assets/5c4f423d-4ad4-48f4-b5bd-2ea0a99b196e)[^legend] [^legend]: items marked in blue are the packages created in this PR, whilst the entire diagram is the proposed future state --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 2 + package.json | 2 + tsconfig.base.json | 4 + .../security/authorization_core/README.md | 3 + .../security/authorization_core/index.ts | 15 ++ .../authorization_core/jest.config.js | 15 ++ .../security/authorization_core/kibana.jsonc | 5 + .../security/authorization_core/package.json | 6 + .../src/__fixtures__/licensing.mock.ts | 55 ++++++ .../__snapshots__/alerting.test.ts.snap | 0 .../actions/__snapshots__/api.test.ts.snap | 0 .../actions/__snapshots__/app.test.ts.snap | 0 .../actions/__snapshots__/cases.test.ts.snap | 0 .../actions/__snapshots__/ui.test.ts.snap | 0 .../src}/actions/actions.mock.ts | 0 .../src}/actions/actions.test.ts | 0 .../src}/actions/actions.ts | 0 .../src}/actions/alerting.test.ts | 0 .../src}/actions/alerting.ts | 0 .../src}/actions/api.test.ts | 0 .../authorization_core/src}/actions/api.ts | 0 .../src}/actions/app.test.ts | 0 .../authorization_core/src}/actions/app.ts | 0 .../src}/actions/cases.test.ts | 0 .../authorization_core/src}/actions/cases.ts | 0 .../authorization_core/src}/actions/index.ts | 0 .../src}/actions/saved_object.test.ts | 0 .../src}/actions/saved_object.ts | 0 .../src}/actions/space.test.ts | 0 .../authorization_core/src}/actions/space.ts | 0 .../src}/actions/ui.test.ts | 0 .../authorization_core/src}/actions/ui.ts | 0 .../__snapshots__/cases.test.ts.snap | 0 .../alerting.test.ts | 0 .../feature_privilege_builder/alerting.ts | 0 .../feature_privilege_builder/api.ts | 0 .../feature_privilege_builder/app.ts | 0 .../feature_privilege_builder/cases.test.ts | 0 .../feature_privilege_builder/cases.ts | 0 .../feature_privilege_builder/catalogue.ts | 0 .../feature_privilege_builder.ts | 0 .../feature_privilege_builder/index.ts | 0 .../feature_privilege_builder/management.ts | 0 .../feature_privilege_builder/navlink.ts | 0 .../feature_privilege_builder/saved_object.ts | 0 .../feature_privilege_builder/ui.ts | 0 .../src}/privileges/index.ts | 1 + .../src}/privileges/privileges.test.ts | 2 +- .../src}/privileges/privileges.ts | 4 +- .../src/privileges}/raw_kibana_privileges.ts | 0 .../security/authorization_core/tsconfig.json | 16 ++ .../security/role_management_model/README.md | 3 + .../security/role_management_model/index.ts | 15 ++ .../role_management_model/jest.config.js | 16 ++ .../role_management_model/kibana.jsonc | 5 + .../role_management_model/package.json | 6 + .../src/__fixtures__/index.ts | 9 + .../src}/__fixtures__/kibana_features.ts | 0 .../src}/__fixtures__/kibana_privileges.ts | 26 ++- .../src}/kibana_privilege.ts | 0 .../src/kibana_privileges.test.ts | 187 ++++++++++++++++++ .../src}/kibana_privileges.ts | 15 +- .../src}/primary_feature_privilege.ts | 0 .../src}/privilege_collection.test.ts | 0 .../src}/privilege_collection.ts | 0 .../src}/secured_feature.ts | 0 .../src}/secured_sub_feature.ts | 0 .../src}/sub_feature_privilege.ts | 0 .../src}/sub_feature_privilege_group.ts | 0 .../role_management_model/tsconfig.json | 15 ++ x-pack/plugins/security/common/index.ts | 3 +- .../security/common/licensing/index.mock.ts | 49 +---- x-pack/plugins/security/common/model/index.ts | 5 +- .../roles/edit_role/edit_role_page.test.tsx | 2 +- .../roles/edit_role/edit_role_page.tsx | 2 +- .../roles/edit_role/privilege_utils.test.ts | 50 ----- .../roles/edit_role/privilege_utils.ts | 19 -- .../feature_table/change_all_privileges.tsx | 2 +- .../feature_table/feature_table.test.tsx | 7 +- .../kibana/feature_table/feature_table.tsx | 4 +- .../feature_table_expanded_row.test.tsx | 6 +- .../feature_table_expanded_row.tsx | 2 +- .../feature_table/sub_feature_form.test.tsx | 10 +- .../kibana/feature_table/sub_feature_form.tsx | 4 +- .../feature_table_cell.test.tsx | 4 +- .../feature_table_cell/feature_table_cell.tsx | 2 +- .../kibana/kibana_privileges_region.test.tsx | 4 +- .../kibana/kibana_privileges_region.tsx | 2 +- .../privilege_form_calculator.test.ts | 7 +- .../privilege_form_calculator.ts | 9 +- .../privilege_summary.test.tsx | 6 +- .../privilege_summary/privilege_summary.tsx | 4 +- .../privilege_summary_calculator.test.ts | 9 +- .../privilege_summary_calculator.ts | 13 +- .../privilege_summary_expanded_row.tsx | 6 +- .../privilege_summary_table.test.tsx | 8 +- .../privilege_summary_table.tsx | 10 +- .../privilege_summary/space_column_header.tsx | 4 +- .../simple_privilege_section.test.tsx | 4 +- .../simple_privilege_section.tsx | 6 +- .../privilege_space_form.test.tsx | 7 +- .../privilege_space_form.tsx | 2 +- .../privilege_space_table.test.tsx | 4 +- .../privilege_space_table.tsx | 4 +- .../space_aware_privilege_section.test.tsx | 6 +- .../space_aware_privilege_section.tsx | 4 +- .../public/management/roles/model/index.ts | 15 -- .../roles/model/kibana_privileges.test.ts | 144 -------------- .../management/roles/privileges_api_client.ts | 3 +- .../authorization_service.test.ts | 2 +- .../authorization/authorization_service.tsx | 10 +- .../disable_ui_capabilities.test.ts | 2 +- .../server/authorization/index.mock.ts | 3 +- .../security/server/authorization/index.ts | 3 +- .../register_privileges_with_cluster.ts | 2 +- .../authorization/service.test.mocks.ts | 10 +- x-pack/plugins/security/tsconfig.json | 4 +- yarn.lock | 8 + 118 files changed, 554 insertions(+), 369 deletions(-) create mode 100644 x-pack/packages/security/authorization_core/README.md create mode 100644 x-pack/packages/security/authorization_core/index.ts create mode 100644 x-pack/packages/security/authorization_core/jest.config.js create mode 100644 x-pack/packages/security/authorization_core/kibana.jsonc create mode 100644 x-pack/packages/security/authorization_core/package.json create mode 100644 x-pack/packages/security/authorization_core/src/__fixtures__/licensing.mock.ts rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/__snapshots__/alerting.test.ts.snap (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/__snapshots__/api.test.ts.snap (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/__snapshots__/app.test.ts.snap (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/__snapshots__/cases.test.ts.snap (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/__snapshots__/ui.test.ts.snap (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/actions.mock.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/actions.test.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/actions.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/alerting.test.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/alerting.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/api.test.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/api.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/app.test.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/app.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/cases.test.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/cases.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/index.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/saved_object.test.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/saved_object.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/space.test.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/space.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/ui.test.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/actions/ui.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/privileges/feature_privilege_builder/__snapshots__/cases.test.ts.snap (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/privileges/feature_privilege_builder/alerting.test.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/privileges/feature_privilege_builder/alerting.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/privileges/feature_privilege_builder/api.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/privileges/feature_privilege_builder/app.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/privileges/feature_privilege_builder/cases.test.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/privileges/feature_privilege_builder/cases.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/privileges/feature_privilege_builder/catalogue.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/privileges/feature_privilege_builder/feature_privilege_builder.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/privileges/feature_privilege_builder/index.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/privileges/feature_privilege_builder/management.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/privileges/feature_privilege_builder/navlink.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/privileges/feature_privilege_builder/saved_object.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/privileges/feature_privilege_builder/ui.ts (100%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/privileges/index.ts (81%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/privileges/privileges.test.ts (99%) rename x-pack/{plugins/security/server/authorization => packages/security/authorization_core/src}/privileges/privileges.ts (98%) rename x-pack/{plugins/security/common/model => packages/security/authorization_core/src/privileges}/raw_kibana_privileges.ts (100%) create mode 100644 x-pack/packages/security/authorization_core/tsconfig.json create mode 100644 x-pack/packages/security/role_management_model/README.md create mode 100644 x-pack/packages/security/role_management_model/index.ts create mode 100644 x-pack/packages/security/role_management_model/jest.config.js create mode 100644 x-pack/packages/security/role_management_model/kibana.jsonc create mode 100644 x-pack/packages/security/role_management_model/package.json create mode 100644 x-pack/packages/security/role_management_model/src/__fixtures__/index.ts rename x-pack/{plugins/security/public/management/roles => packages/security/role_management_model/src}/__fixtures__/kibana_features.ts (100%) rename x-pack/{plugins/security/public/management/roles => packages/security/role_management_model/src}/__fixtures__/kibana_privileges.ts (54%) rename x-pack/{plugins/security/public/management/roles/model => packages/security/role_management_model/src}/kibana_privilege.ts (100%) create mode 100644 x-pack/packages/security/role_management_model/src/kibana_privileges.test.ts rename x-pack/{plugins/security/public/management/roles/model => packages/security/role_management_model/src}/kibana_privileges.ts (86%) rename x-pack/{plugins/security/public/management/roles/model => packages/security/role_management_model/src}/primary_feature_privilege.ts (100%) rename x-pack/{plugins/security/public/management/roles/model => packages/security/role_management_model/src}/privilege_collection.test.ts (100%) rename x-pack/{plugins/security/public/management/roles/model => packages/security/role_management_model/src}/privilege_collection.ts (100%) rename x-pack/{plugins/security/public/management/roles/model => packages/security/role_management_model/src}/secured_feature.ts (100%) rename x-pack/{plugins/security/public/management/roles/model => packages/security/role_management_model/src}/secured_sub_feature.ts (100%) rename x-pack/{plugins/security/public/management/roles/model => packages/security/role_management_model/src}/sub_feature_privilege.ts (100%) rename x-pack/{plugins/security/public/management/roles/model => packages/security/role_management_model/src}/sub_feature_privilege_group.ts (100%) create mode 100644 x-pack/packages/security/role_management_model/tsconfig.json delete mode 100644 x-pack/plugins/security/public/management/roles/edit_role/privilege_utils.test.ts delete mode 100644 x-pack/plugins/security/public/management/roles/edit_role/privilege_utils.ts delete mode 100644 x-pack/plugins/security/public/management/roles/model/index.ts delete mode 100644 x-pack/plugins/security/public/management/roles/model/kibana_privileges.test.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index aceeaf933cc49..f366f654c7770 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -748,12 +748,14 @@ packages/kbn-search-types @elastic/kibana-data-discovery x-pack/plugins/searchprofiler @elastic/kibana-management x-pack/test/security_api_integration/packages/helpers @elastic/kibana-security x-pack/packages/security/api_key_management @elastic/kibana-security +x-pack/packages/security/authorization_core @elastic/kibana-security x-pack/packages/security/form_components @elastic/kibana-security packages/kbn-security-hardening @elastic/kibana-security x-pack/plugins/security @elastic/kibana-security x-pack/packages/security/plugin_types_common @elastic/kibana-security x-pack/packages/security/plugin_types_public @elastic/kibana-security x-pack/packages/security/plugin_types_server @elastic/kibana-security +x-pack/packages/security/role_management_model @elastic/kibana-security x-pack/packages/security-solution/distribution_bar @elastic/kibana-cloud-security-posture x-pack/plugins/security_solution_ess @elastic/security-solution x-pack/packages/security-solution/features @elastic/security-threat-hunting-explore diff --git a/package.json b/package.json index 0edb050fe9aea..949f7bbaad953 100644 --- a/package.json +++ b/package.json @@ -765,12 +765,14 @@ "@kbn/search-types": "link:packages/kbn-search-types", "@kbn/searchprofiler-plugin": "link:x-pack/plugins/searchprofiler", "@kbn/security-api-key-management": "link:x-pack/packages/security/api_key_management", + "@kbn/security-authorization-core": "link:x-pack/packages/security/authorization_core", "@kbn/security-form-components": "link:x-pack/packages/security/form_components", "@kbn/security-hardening": "link:packages/kbn-security-hardening", "@kbn/security-plugin": "link:x-pack/plugins/security", "@kbn/security-plugin-types-common": "link:x-pack/packages/security/plugin_types_common", "@kbn/security-plugin-types-public": "link:x-pack/packages/security/plugin_types_public", "@kbn/security-plugin-types-server": "link:x-pack/packages/security/plugin_types_server", + "@kbn/security-role-management-model": "link:x-pack/packages/security/role_management_model", "@kbn/security-solution-distribution-bar": "link:x-pack/packages/security-solution/distribution_bar", "@kbn/security-solution-ess": "link:x-pack/plugins/security_solution_ess", "@kbn/security-solution-features": "link:x-pack/packages/security-solution/features", diff --git a/tsconfig.base.json b/tsconfig.base.json index f433970fae490..9f37b2ad90f59 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1490,6 +1490,8 @@ "@kbn/security-api-integration-helpers/*": ["x-pack/test/security_api_integration/packages/helpers/*"], "@kbn/security-api-key-management": ["x-pack/packages/security/api_key_management"], "@kbn/security-api-key-management/*": ["x-pack/packages/security/api_key_management/*"], + "@kbn/security-authorization-core": ["x-pack/packages/security/authorization_core"], + "@kbn/security-authorization-core/*": ["x-pack/packages/security/authorization_core/*"], "@kbn/security-form-components": ["x-pack/packages/security/form_components"], "@kbn/security-form-components/*": ["x-pack/packages/security/form_components/*"], "@kbn/security-hardening": ["packages/kbn-security-hardening"], @@ -1502,6 +1504,8 @@ "@kbn/security-plugin-types-public/*": ["x-pack/packages/security/plugin_types_public/*"], "@kbn/security-plugin-types-server": ["x-pack/packages/security/plugin_types_server"], "@kbn/security-plugin-types-server/*": ["x-pack/packages/security/plugin_types_server/*"], + "@kbn/security-role-management-model": ["x-pack/packages/security/role_management_model"], + "@kbn/security-role-management-model/*": ["x-pack/packages/security/role_management_model/*"], "@kbn/security-solution-distribution-bar": ["x-pack/packages/security-solution/distribution_bar"], "@kbn/security-solution-distribution-bar/*": ["x-pack/packages/security-solution/distribution_bar/*"], "@kbn/security-solution-ess": ["x-pack/plugins/security_solution_ess"], diff --git a/x-pack/packages/security/authorization_core/README.md b/x-pack/packages/security/authorization_core/README.md new file mode 100644 index 0000000000000..ce2c2dd277198 --- /dev/null +++ b/x-pack/packages/security/authorization_core/README.md @@ -0,0 +1,3 @@ +# @kbn/security-authorization-core + +Contains core authorization logic diff --git a/x-pack/packages/security/authorization_core/index.ts b/x-pack/packages/security/authorization_core/index.ts new file mode 100644 index 0000000000000..ccb68eb3bbcec --- /dev/null +++ b/x-pack/packages/security/authorization_core/index.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 { Actions } from './src/actions'; +export { privilegesFactory } from './src/privileges'; +export type { + CasesSupportedOperations, + PrivilegesService, + RawKibanaPrivileges, + RawKibanaFeaturePrivileges, +} from './src/privileges'; diff --git a/x-pack/packages/security/authorization_core/jest.config.js b/x-pack/packages/security/authorization_core/jest.config.js new file mode 100644 index 0000000000000..db3272ac46d92 --- /dev/null +++ b/x-pack/packages/security/authorization_core/jest.config.js @@ -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. + */ + +module.exports = { + coverageDirectory: '/x-pack/packages/security/authorization_core', + coverageReporters: ['text', 'html'], + collectCoverageFrom: ['/x-pack/packages/security/authorization_core/**/*.{ts,tsx}'], + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/x-pack/packages/security/authorization_core'], +}; diff --git a/x-pack/packages/security/authorization_core/kibana.jsonc b/x-pack/packages/security/authorization_core/kibana.jsonc new file mode 100644 index 0000000000000..f2e33db5c8a81 --- /dev/null +++ b/x-pack/packages/security/authorization_core/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-server", + "id": "@kbn/security-authorization-core", + "owner": "@elastic/kibana-security" +} diff --git a/x-pack/packages/security/authorization_core/package.json b/x-pack/packages/security/authorization_core/package.json new file mode 100644 index 0000000000000..4b270288d4763 --- /dev/null +++ b/x-pack/packages/security/authorization_core/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/security-authorization-core", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0" +} diff --git a/x-pack/packages/security/authorization_core/src/__fixtures__/licensing.mock.ts b/x-pack/packages/security/authorization_core/src/__fixtures__/licensing.mock.ts new file mode 100644 index 0000000000000..6ee9910b768bd --- /dev/null +++ b/x-pack/packages/security/authorization_core/src/__fixtures__/licensing.mock.ts @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Observable, of } from 'rxjs'; + +import type { LicenseType } from '@kbn/licensing-plugin/common/types'; +import { LICENSE_TYPE } from '@kbn/licensing-plugin/common/types'; +import type { SecurityLicense, SecurityLicenseFeatures } from '@kbn/security-plugin-types-common'; + +export const licenseMock = { + create: ( + features: Partial | Observable> = {}, + licenseType: LicenseType = 'basic', // default to basic if this is not specified, + isAvailable: Observable = of(true) + ): jest.Mocked => ({ + isLicenseAvailable: jest.fn().mockImplementation(() => { + let result = true; + + isAvailable.subscribe((next) => { + result = next; + }); + + return result; + }), + getLicenseType: jest.fn().mockReturnValue(licenseType), + getUnavailableReason: jest.fn(), + isEnabled: jest.fn().mockReturnValue(true), + getFeatures: + features instanceof Observable + ? jest.fn().mockImplementation(() => { + let subbedFeatures: Partial = {}; + + features.subscribe((next) => { + subbedFeatures = next; + }); + + return subbedFeatures; + }) + : jest.fn().mockReturnValue(features), + hasAtLeast: jest + .fn() + .mockImplementation( + (licenseTypeToCheck: LicenseType) => + LICENSE_TYPE[licenseTypeToCheck] <= LICENSE_TYPE[licenseType] + ), + features$: + features instanceof Observable + ? (features as Observable) + : of((features ?? {}) as SecurityLicenseFeatures), + }), +}; diff --git a/x-pack/plugins/security/server/authorization/actions/__snapshots__/alerting.test.ts.snap b/x-pack/packages/security/authorization_core/src/actions/__snapshots__/alerting.test.ts.snap similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/__snapshots__/alerting.test.ts.snap rename to x-pack/packages/security/authorization_core/src/actions/__snapshots__/alerting.test.ts.snap diff --git a/x-pack/plugins/security/server/authorization/actions/__snapshots__/api.test.ts.snap b/x-pack/packages/security/authorization_core/src/actions/__snapshots__/api.test.ts.snap similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/__snapshots__/api.test.ts.snap rename to x-pack/packages/security/authorization_core/src/actions/__snapshots__/api.test.ts.snap diff --git a/x-pack/plugins/security/server/authorization/actions/__snapshots__/app.test.ts.snap b/x-pack/packages/security/authorization_core/src/actions/__snapshots__/app.test.ts.snap similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/__snapshots__/app.test.ts.snap rename to x-pack/packages/security/authorization_core/src/actions/__snapshots__/app.test.ts.snap diff --git a/x-pack/plugins/security/server/authorization/actions/__snapshots__/cases.test.ts.snap b/x-pack/packages/security/authorization_core/src/actions/__snapshots__/cases.test.ts.snap similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/__snapshots__/cases.test.ts.snap rename to x-pack/packages/security/authorization_core/src/actions/__snapshots__/cases.test.ts.snap diff --git a/x-pack/plugins/security/server/authorization/actions/__snapshots__/ui.test.ts.snap b/x-pack/packages/security/authorization_core/src/actions/__snapshots__/ui.test.ts.snap similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/__snapshots__/ui.test.ts.snap rename to x-pack/packages/security/authorization_core/src/actions/__snapshots__/ui.test.ts.snap diff --git a/x-pack/plugins/security/server/authorization/actions/actions.mock.ts b/x-pack/packages/security/authorization_core/src/actions/actions.mock.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/actions.mock.ts rename to x-pack/packages/security/authorization_core/src/actions/actions.mock.ts diff --git a/x-pack/plugins/security/server/authorization/actions/actions.test.ts b/x-pack/packages/security/authorization_core/src/actions/actions.test.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/actions.test.ts rename to x-pack/packages/security/authorization_core/src/actions/actions.test.ts diff --git a/x-pack/plugins/security/server/authorization/actions/actions.ts b/x-pack/packages/security/authorization_core/src/actions/actions.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/actions.ts rename to x-pack/packages/security/authorization_core/src/actions/actions.ts diff --git a/x-pack/plugins/security/server/authorization/actions/alerting.test.ts b/x-pack/packages/security/authorization_core/src/actions/alerting.test.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/alerting.test.ts rename to x-pack/packages/security/authorization_core/src/actions/alerting.test.ts diff --git a/x-pack/plugins/security/server/authorization/actions/alerting.ts b/x-pack/packages/security/authorization_core/src/actions/alerting.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/alerting.ts rename to x-pack/packages/security/authorization_core/src/actions/alerting.ts diff --git a/x-pack/plugins/security/server/authorization/actions/api.test.ts b/x-pack/packages/security/authorization_core/src/actions/api.test.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/api.test.ts rename to x-pack/packages/security/authorization_core/src/actions/api.test.ts diff --git a/x-pack/plugins/security/server/authorization/actions/api.ts b/x-pack/packages/security/authorization_core/src/actions/api.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/api.ts rename to x-pack/packages/security/authorization_core/src/actions/api.ts diff --git a/x-pack/plugins/security/server/authorization/actions/app.test.ts b/x-pack/packages/security/authorization_core/src/actions/app.test.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/app.test.ts rename to x-pack/packages/security/authorization_core/src/actions/app.test.ts diff --git a/x-pack/plugins/security/server/authorization/actions/app.ts b/x-pack/packages/security/authorization_core/src/actions/app.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/app.ts rename to x-pack/packages/security/authorization_core/src/actions/app.ts diff --git a/x-pack/plugins/security/server/authorization/actions/cases.test.ts b/x-pack/packages/security/authorization_core/src/actions/cases.test.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/cases.test.ts rename to x-pack/packages/security/authorization_core/src/actions/cases.test.ts diff --git a/x-pack/plugins/security/server/authorization/actions/cases.ts b/x-pack/packages/security/authorization_core/src/actions/cases.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/cases.ts rename to x-pack/packages/security/authorization_core/src/actions/cases.ts diff --git a/x-pack/plugins/security/server/authorization/actions/index.ts b/x-pack/packages/security/authorization_core/src/actions/index.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/index.ts rename to x-pack/packages/security/authorization_core/src/actions/index.ts diff --git a/x-pack/plugins/security/server/authorization/actions/saved_object.test.ts b/x-pack/packages/security/authorization_core/src/actions/saved_object.test.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/saved_object.test.ts rename to x-pack/packages/security/authorization_core/src/actions/saved_object.test.ts diff --git a/x-pack/plugins/security/server/authorization/actions/saved_object.ts b/x-pack/packages/security/authorization_core/src/actions/saved_object.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/saved_object.ts rename to x-pack/packages/security/authorization_core/src/actions/saved_object.ts diff --git a/x-pack/plugins/security/server/authorization/actions/space.test.ts b/x-pack/packages/security/authorization_core/src/actions/space.test.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/space.test.ts rename to x-pack/packages/security/authorization_core/src/actions/space.test.ts diff --git a/x-pack/plugins/security/server/authorization/actions/space.ts b/x-pack/packages/security/authorization_core/src/actions/space.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/space.ts rename to x-pack/packages/security/authorization_core/src/actions/space.ts diff --git a/x-pack/plugins/security/server/authorization/actions/ui.test.ts b/x-pack/packages/security/authorization_core/src/actions/ui.test.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/ui.test.ts rename to x-pack/packages/security/authorization_core/src/actions/ui.test.ts diff --git a/x-pack/plugins/security/server/authorization/actions/ui.ts b/x-pack/packages/security/authorization_core/src/actions/ui.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/actions/ui.ts rename to x-pack/packages/security/authorization_core/src/actions/ui.ts diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/__snapshots__/cases.test.ts.snap b/x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/__snapshots__/cases.test.ts.snap similarity index 100% rename from x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/__snapshots__/cases.test.ts.snap rename to x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/__snapshots__/cases.test.ts.snap diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.test.ts b/x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/alerting.test.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.test.ts rename to x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/alerting.test.ts diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.ts b/x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/alerting.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.ts rename to x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/alerting.ts diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/api.ts b/x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/api.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/api.ts rename to x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/api.ts diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/app.ts b/x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/app.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/app.ts rename to x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/app.ts diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/cases.test.ts b/x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/cases.test.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/cases.test.ts rename to x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/cases.test.ts diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/cases.ts b/x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/cases.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/cases.ts rename to x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/cases.ts diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/catalogue.ts b/x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/catalogue.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/catalogue.ts rename to x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/catalogue.ts diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/feature_privilege_builder.ts b/x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/feature_privilege_builder.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/feature_privilege_builder.ts rename to x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/feature_privilege_builder.ts diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/index.ts b/x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/index.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/index.ts rename to x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/index.ts diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/management.ts b/x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/management.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/management.ts rename to x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/management.ts diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/navlink.ts b/x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/navlink.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/navlink.ts rename to x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/navlink.ts diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/saved_object.ts b/x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/saved_object.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/saved_object.ts rename to x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/saved_object.ts diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/ui.ts b/x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/ui.ts similarity index 100% rename from x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/ui.ts rename to x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/ui.ts diff --git a/x-pack/plugins/security/server/authorization/privileges/index.ts b/x-pack/packages/security/authorization_core/src/privileges/index.ts similarity index 81% rename from x-pack/plugins/security/server/authorization/privileges/index.ts rename to x-pack/packages/security/authorization_core/src/privileges/index.ts index 1056aa6dcd9af..7113b1b348bec 100644 --- a/x-pack/plugins/security/server/authorization/privileges/index.ts +++ b/x-pack/packages/security/authorization_core/src/privileges/index.ts @@ -8,3 +8,4 @@ export type { PrivilegesService } from './privileges'; export type { CasesSupportedOperations } from './feature_privilege_builder'; export { privilegesFactory } from './privileges'; +export type { RawKibanaPrivileges, RawKibanaFeaturePrivileges } from './raw_kibana_privileges'; diff --git a/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts b/x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts similarity index 99% rename from x-pack/plugins/security/server/authorization/privileges/privileges.test.ts rename to x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts index 93efd86f52f54..118d63503db22 100644 --- a/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts +++ b/x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts @@ -9,7 +9,7 @@ import { KibanaFeature } from '@kbn/features-plugin/server'; import { featuresPluginMock } from '@kbn/features-plugin/server/mocks'; import { privilegesFactory } from './privileges'; -import { licenseMock } from '../../../common/licensing/index.mock'; +import { licenseMock } from '../__fixtures__/licensing.mock'; import { Actions } from '../actions'; const actions = new Actions(); diff --git a/x-pack/plugins/security/server/authorization/privileges/privileges.ts b/x-pack/packages/security/authorization_core/src/privileges/privileges.ts similarity index 98% rename from x-pack/plugins/security/server/authorization/privileges/privileges.ts rename to x-pack/packages/security/authorization_core/src/privileges/privileges.ts index 4295ae7c89bb4..9fb8dd9f083e2 100644 --- a/x-pack/plugins/security/server/authorization/privileges/privileges.ts +++ b/x-pack/packages/security/authorization_core/src/privileges/privileges.ts @@ -13,9 +13,9 @@ import type { } from '@kbn/features-plugin/common'; import type { FeaturesPluginSetup, KibanaFeature } from '@kbn/features-plugin/server'; +import type { SecurityLicense } from '@kbn/security-plugin-types-common'; import { featurePrivilegeBuilderFactory } from './feature_privilege_builder'; -import type { SecurityLicense } from '../../../common'; -import type { RawKibanaPrivileges } from '../../../common/model'; +import type { RawKibanaPrivileges } from './raw_kibana_privileges'; import type { Actions } from '../actions'; export interface PrivilegesService { diff --git a/x-pack/plugins/security/common/model/raw_kibana_privileges.ts b/x-pack/packages/security/authorization_core/src/privileges/raw_kibana_privileges.ts similarity index 100% rename from x-pack/plugins/security/common/model/raw_kibana_privileges.ts rename to x-pack/packages/security/authorization_core/src/privileges/raw_kibana_privileges.ts diff --git a/x-pack/packages/security/authorization_core/tsconfig.json b/x-pack/packages/security/authorization_core/tsconfig.json new file mode 100644 index 0000000000000..03870180c12c5 --- /dev/null +++ b/x-pack/packages/security/authorization_core/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": ["jest", "node", "react"] + }, + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["target/**/*"], + "kbn_references": [ + "@kbn/core", + "@kbn/features-plugin", + "@kbn/security-plugin-types-common", + "@kbn/security-plugin-types-server", + "@kbn/licensing-plugin", + ] +} diff --git a/x-pack/packages/security/role_management_model/README.md b/x-pack/packages/security/role_management_model/README.md new file mode 100644 index 0000000000000..f87e15a76e453 --- /dev/null +++ b/x-pack/packages/security/role_management_model/README.md @@ -0,0 +1,3 @@ +# @kbn/security-role-management + +Contains business logic for RBAC administration within Kibana. diff --git a/x-pack/packages/security/role_management_model/index.ts b/x-pack/packages/security/role_management_model/index.ts new file mode 100644 index 0000000000000..fa69415d3f8cc --- /dev/null +++ b/x-pack/packages/security/role_management_model/index.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 { SecuredFeature } from './src/secured_feature'; +export { SecuredSubFeature } from './src/secured_sub_feature'; +export { SubFeaturePrivilegeGroup } from './src/sub_feature_privilege_group'; +export { SubFeaturePrivilege } from './src/sub_feature_privilege'; +export { PrimaryFeaturePrivilege } from './src/primary_feature_privilege'; +export { KibanaPrivileges, isGlobalPrivilegeDefinition } from './src/kibana_privileges'; +export { KibanaPrivilege } from './src/kibana_privilege'; +export { PrivilegeCollection } from './src/privilege_collection'; diff --git a/x-pack/packages/security/role_management_model/jest.config.js b/x-pack/packages/security/role_management_model/jest.config.js new file mode 100644 index 0000000000000..4223e717dec5e --- /dev/null +++ b/x-pack/packages/security/role_management_model/jest.config.js @@ -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. + */ + +module.exports = { + coverageDirectory: + '/target/kibana-coverage/jest/x-pack/packages/security/role_management_model', + coverageReporters: ['text', 'html'], + collectCoverageFrom: ['/x-pack/packages/security/role_management_model/**/*.{ts,tsx}'], + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/x-pack/packages/security/role_management_model'], +}; diff --git a/x-pack/packages/security/role_management_model/kibana.jsonc b/x-pack/packages/security/role_management_model/kibana.jsonc new file mode 100644 index 0000000000000..9ba7936494167 --- /dev/null +++ b/x-pack/packages/security/role_management_model/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/security-role-management-model", + "owner": "@elastic/kibana-security" +} diff --git a/x-pack/packages/security/role_management_model/package.json b/x-pack/packages/security/role_management_model/package.json new file mode 100644 index 0000000000000..d231b70912484 --- /dev/null +++ b/x-pack/packages/security/role_management_model/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/security-role-management-model", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0" +} diff --git a/x-pack/packages/security/role_management_model/src/__fixtures__/index.ts b/x-pack/packages/security/role_management_model/src/__fixtures__/index.ts new file mode 100644 index 0000000000000..32f8d17be94b2 --- /dev/null +++ b/x-pack/packages/security/role_management_model/src/__fixtures__/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { createFeature, kibanaFeatures } from './kibana_features'; +export { createKibanaPrivileges, createRawKibanaPrivileges } from './kibana_privileges'; diff --git a/x-pack/plugins/security/public/management/roles/__fixtures__/kibana_features.ts b/x-pack/packages/security/role_management_model/src/__fixtures__/kibana_features.ts similarity index 100% rename from x-pack/plugins/security/public/management/roles/__fixtures__/kibana_features.ts rename to x-pack/packages/security/role_management_model/src/__fixtures__/kibana_features.ts diff --git a/x-pack/plugins/security/public/management/roles/__fixtures__/kibana_privileges.ts b/x-pack/packages/security/role_management_model/src/__fixtures__/kibana_privileges.ts similarity index 54% rename from x-pack/plugins/security/public/management/roles/__fixtures__/kibana_privileges.ts rename to x-pack/packages/security/role_management_model/src/__fixtures__/kibana_privileges.ts index 559d479182c89..2dc5078038033 100644 --- a/x-pack/plugins/security/public/management/roles/__fixtures__/kibana_privileges.ts +++ b/x-pack/packages/security/role_management_model/src/__fixtures__/kibana_privileges.ts @@ -6,19 +6,33 @@ */ import type { KibanaFeature } from '@kbn/features-plugin/public'; -import { featuresPluginMock } from '@kbn/features-plugin/server/mocks'; +import { type FeaturesPluginSetup } from '@kbn/features-plugin/server'; +import { + featurePrivilegeIterator, + subFeaturePrivilegeIterator, +} from '@kbn/features-plugin/server/feature_privilege_iterator'; import type { LicenseType } from '@kbn/licensing-plugin/server'; +import type { SecurityLicenseFeatures } from '@kbn/security-plugin-types-common'; +import { Actions, privilegesFactory } from '@kbn/security-authorization-core'; +import { KibanaPrivileges } from '../kibana_privileges'; -import type { SecurityLicenseFeatures } from '../../../../common'; -import { Actions } from '../../../../server/authorization'; -import { privilegesFactory } from '../../../../server/authorization/privileges'; -import { KibanaPrivileges } from '../model'; +const featuresPluginService = (): jest.Mocked => { + return { + getKibanaFeatures: jest.fn(), + getElasticsearchFeatures: jest.fn(), + registerKibanaFeature: jest.fn(), + registerElasticsearchFeature: jest.fn(), + enableReportingUiCapabilities: jest.fn(), + featurePrivilegeIterator: jest.fn().mockImplementation(featurePrivilegeIterator), + subFeaturePrivilegeIterator: jest.fn().mockImplementation(subFeaturePrivilegeIterator), + }; +}; export const createRawKibanaPrivileges = ( features: KibanaFeature[], { allowSubFeaturePrivileges = true } = {} ) => { - const featuresService = featuresPluginMock.createSetup(); + const featuresService = featuresPluginService(); featuresService.getKibanaFeatures.mockReturnValue(features); const licensingService = { diff --git a/x-pack/plugins/security/public/management/roles/model/kibana_privilege.ts b/x-pack/packages/security/role_management_model/src/kibana_privilege.ts similarity index 100% rename from x-pack/plugins/security/public/management/roles/model/kibana_privilege.ts rename to x-pack/packages/security/role_management_model/src/kibana_privilege.ts diff --git a/x-pack/packages/security/role_management_model/src/kibana_privileges.test.ts b/x-pack/packages/security/role_management_model/src/kibana_privileges.test.ts new file mode 100644 index 0000000000000..6102c853db51b --- /dev/null +++ b/x-pack/packages/security/role_management_model/src/kibana_privileges.test.ts @@ -0,0 +1,187 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { KibanaPrivilege } from './kibana_privilege'; +import { KibanaPrivileges, isGlobalPrivilegeDefinition } from './kibana_privileges'; +import type { RoleKibanaPrivilege } from '@kbn/security-plugin-types-common'; +import { createRawKibanaPrivileges, kibanaFeatures } from './__fixtures__'; + +describe('kibana_privilege', () => { + describe('isGlobalPrivilegeDefinition', () => { + it('returns true if no spaces are defined', () => { + expect( + // @ts-ignore + isGlobalPrivilegeDefinition({ + base: [], + feature: {}, + }) + ).toEqual(true); + }); + + it('returns true if spaces is an empty array', () => { + expect( + isGlobalPrivilegeDefinition({ + spaces: [], + base: [], + feature: {}, + }) + ).toEqual(true); + }); + + it('returns true if spaces contains "*"', () => { + expect( + isGlobalPrivilegeDefinition({ + spaces: ['*'], + base: [], + feature: {}, + }) + ).toEqual(true); + }); + + it('returns false if spaces does not contain "*"', () => { + expect( + isGlobalPrivilegeDefinition({ + spaces: ['foo', 'bar'], + base: [], + feature: {}, + }) + ).toEqual(false); + }); + }); + + describe('KibanaPrivileges', () => { + describe('#getBasePrivileges', () => { + it('returns the space base privileges for a non-global entry', () => { + const rawPrivileges = createRawKibanaPrivileges(kibanaFeatures); + const kibanaPrivileges = new KibanaPrivileges(rawPrivileges, kibanaFeatures); + + const entry: RoleKibanaPrivilege = { + base: [], + feature: {}, + spaces: ['foo'], + }; + + const basePrivileges = kibanaPrivileges.getBasePrivileges(entry); + + const expectedPrivileges = rawPrivileges.space; + + expect(basePrivileges).toHaveLength(2); + expect(basePrivileges[0]).toMatchObject({ + id: 'all', + actions: expectedPrivileges.all, + }); + expect(basePrivileges[1]).toMatchObject({ + id: 'read', + actions: expectedPrivileges.read, + }); + }); + + it('returns the global base privileges for a global entry', () => { + const rawPrivileges = createRawKibanaPrivileges(kibanaFeatures); + const kibanaPrivileges = new KibanaPrivileges(rawPrivileges, kibanaFeatures); + + const entry: RoleKibanaPrivilege = { + base: [], + feature: {}, + spaces: ['*'], + }; + + const basePrivileges = kibanaPrivileges.getBasePrivileges(entry); + + const expectedPrivileges = rawPrivileges.global; + + expect(basePrivileges).toHaveLength(2); + expect(basePrivileges[0]).toMatchObject({ + id: 'all', + actions: expectedPrivileges.all, + }); + expect(basePrivileges[1]).toMatchObject({ + id: 'read', + actions: expectedPrivileges.read, + }); + }); + }); + + describe('#createCollectionFromRoleKibanaPrivileges', () => { + it('creates a collection from a role with no privileges assigned', () => { + const rawPrivileges = createRawKibanaPrivileges(kibanaFeatures); + const kibanaPrivileges = new KibanaPrivileges(rawPrivileges, kibanaFeatures); + + const assignedPrivileges: RoleKibanaPrivilege[] = []; + kibanaPrivileges.createCollectionFromRoleKibanaPrivileges(assignedPrivileges); + }); + + it('creates a collection ignoring unknown privileges', () => { + const rawPrivileges = createRawKibanaPrivileges(kibanaFeatures); + const kibanaPrivileges = new KibanaPrivileges(rawPrivileges, kibanaFeatures); + + const assignedPrivileges: RoleKibanaPrivilege[] = [ + { + base: ['read', 'some-unknown-base-privilege'], + feature: {}, + spaces: ['*'], + }, + { + base: [], + feature: { + with_sub_features: ['read', 'cool_all', 'some-unknown-feature-privilege'], + some_unknown_feature: ['all'], + }, + spaces: ['foo'], + }, + ]; + kibanaPrivileges.createCollectionFromRoleKibanaPrivileges(assignedPrivileges); + }); + + it('creates a collection using all assigned privileges, and only the assigned privileges', () => { + const rawPrivileges = createRawKibanaPrivileges(kibanaFeatures); + const kibanaPrivileges = new KibanaPrivileges(rawPrivileges, kibanaFeatures); + + const assignedPrivileges: RoleKibanaPrivilege[] = [ + { + base: ['read'], + feature: {}, + spaces: ['*'], + }, + { + base: [], + feature: { + with_sub_features: ['read', 'cool_all'], + }, + spaces: ['foo'], + }, + ]; + const collection = + kibanaPrivileges.createCollectionFromRoleKibanaPrivileges(assignedPrivileges); + + expect( + collection.grantsPrivilege( + new KibanaPrivilege('test', [...rawPrivileges.features.with_excluded_sub_features.read]) + ) + ).toEqual(true); + + expect( + collection.grantsPrivilege( + new KibanaPrivilege('test', [...rawPrivileges.features.with_excluded_sub_features.all]) + ) + ).toEqual(false); + + expect( + collection.grantsPrivilege( + new KibanaPrivilege('test', [...rawPrivileges.features.with_sub_features.cool_all]) + ) + ).toEqual(true); + + expect( + collection.grantsPrivilege( + new KibanaPrivilege('test', [...rawPrivileges.features.with_sub_features.cool_toggle_1]) + ) + ).toEqual(false); + }); + }); + }); +}); diff --git a/x-pack/plugins/security/public/management/roles/model/kibana_privileges.ts b/x-pack/packages/security/role_management_model/src/kibana_privileges.ts similarity index 86% rename from x-pack/plugins/security/public/management/roles/model/kibana_privileges.ts rename to x-pack/packages/security/role_management_model/src/kibana_privileges.ts index 78b312c123a3f..e78ee9b105bbf 100644 --- a/x-pack/plugins/security/public/management/roles/model/kibana_privileges.ts +++ b/x-pack/packages/security/role_management_model/src/kibana_privileges.ts @@ -7,11 +7,11 @@ import type { KibanaFeature } from '@kbn/features-plugin/common'; +import type { RoleKibanaPrivilege } from '@kbn/security-plugin-types-common'; +import type { RawKibanaPrivileges } from '@kbn/security-authorization-core'; import { KibanaPrivilege } from './kibana_privilege'; import { PrivilegeCollection } from './privilege_collection'; import { SecuredFeature } from './secured_feature'; -import type { RawKibanaPrivileges, RoleKibanaPrivilege } from '../../../../common'; -import { isGlobalPrivilegeDefinition } from '../edit_role/privilege_utils'; function toBasePrivilege(entry: [string, string[]]): [string, KibanaPrivilege] { const [privilegeId, actions] = entry; @@ -24,6 +24,17 @@ function recordsToBasePrivilegeMap( return new Map(Object.entries(record).map((entry) => toBasePrivilege(entry))); } +/** + * Determines if the passed privilege spec defines global privileges. + * @param privilegeSpec + */ +export function isGlobalPrivilegeDefinition(privilegeSpec: RoleKibanaPrivilege): boolean { + if (!privilegeSpec.spaces || privilegeSpec.spaces.length === 0) { + return true; + } + return privilegeSpec.spaces.includes('*'); +} + export class KibanaPrivileges { private global: ReadonlyMap; diff --git a/x-pack/plugins/security/public/management/roles/model/primary_feature_privilege.ts b/x-pack/packages/security/role_management_model/src/primary_feature_privilege.ts similarity index 100% rename from x-pack/plugins/security/public/management/roles/model/primary_feature_privilege.ts rename to x-pack/packages/security/role_management_model/src/primary_feature_privilege.ts diff --git a/x-pack/plugins/security/public/management/roles/model/privilege_collection.test.ts b/x-pack/packages/security/role_management_model/src/privilege_collection.test.ts similarity index 100% rename from x-pack/plugins/security/public/management/roles/model/privilege_collection.test.ts rename to x-pack/packages/security/role_management_model/src/privilege_collection.test.ts diff --git a/x-pack/plugins/security/public/management/roles/model/privilege_collection.ts b/x-pack/packages/security/role_management_model/src/privilege_collection.ts similarity index 100% rename from x-pack/plugins/security/public/management/roles/model/privilege_collection.ts rename to x-pack/packages/security/role_management_model/src/privilege_collection.ts diff --git a/x-pack/plugins/security/public/management/roles/model/secured_feature.ts b/x-pack/packages/security/role_management_model/src/secured_feature.ts similarity index 100% rename from x-pack/plugins/security/public/management/roles/model/secured_feature.ts rename to x-pack/packages/security/role_management_model/src/secured_feature.ts diff --git a/x-pack/plugins/security/public/management/roles/model/secured_sub_feature.ts b/x-pack/packages/security/role_management_model/src/secured_sub_feature.ts similarity index 100% rename from x-pack/plugins/security/public/management/roles/model/secured_sub_feature.ts rename to x-pack/packages/security/role_management_model/src/secured_sub_feature.ts diff --git a/x-pack/plugins/security/public/management/roles/model/sub_feature_privilege.ts b/x-pack/packages/security/role_management_model/src/sub_feature_privilege.ts similarity index 100% rename from x-pack/plugins/security/public/management/roles/model/sub_feature_privilege.ts rename to x-pack/packages/security/role_management_model/src/sub_feature_privilege.ts diff --git a/x-pack/plugins/security/public/management/roles/model/sub_feature_privilege_group.ts b/x-pack/packages/security/role_management_model/src/sub_feature_privilege_group.ts similarity index 100% rename from x-pack/plugins/security/public/management/roles/model/sub_feature_privilege_group.ts rename to x-pack/packages/security/role_management_model/src/sub_feature_privilege_group.ts diff --git a/x-pack/packages/security/role_management_model/tsconfig.json b/x-pack/packages/security/role_management_model/tsconfig.json new file mode 100644 index 0000000000000..f18ed64fae713 --- /dev/null +++ b/x-pack/packages/security/role_management_model/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": ["jest", "node", "react"] + }, + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["target/**/*"], + "kbn_references": [ + "@kbn/features-plugin", + "@kbn/security-plugin-types-common", + "@kbn/security-authorization-core", + "@kbn/licensing-plugin", + ] +} diff --git a/x-pack/plugins/security/common/index.ts b/x-pack/plugins/security/common/index.ts index 2d5e6fd6ec7f1..c4d76f7c9fd66 100644 --- a/x-pack/plugins/security/common/index.ts +++ b/x-pack/plugins/security/common/index.ts @@ -10,7 +10,6 @@ export type { GetUserDisplayNameParams, EditUser, BuiltinESPrivileges, - RawKibanaPrivileges, RoleMapping, RoleMappingRule, RoleMappingAllRule, @@ -25,6 +24,8 @@ export type { export { getUserDisplayName, isRoleReserved, isRoleWithWildcardBasePrivilege } from './model'; +export type { RawKibanaPrivileges } from '@kbn/security-authorization-core'; + // Re-export types from the plugin directly to enhance the developer experience for consumers of the Security plugin. export type { AuthenticatedUser, diff --git a/x-pack/plugins/security/common/licensing/index.mock.ts b/x-pack/plugins/security/common/licensing/index.mock.ts index 6ee9910b768bd..49f0b578075b0 100644 --- a/x-pack/plugins/security/common/licensing/index.mock.ts +++ b/x-pack/plugins/security/common/licensing/index.mock.ts @@ -5,51 +5,4 @@ * 2.0. */ -import { Observable, of } from 'rxjs'; - -import type { LicenseType } from '@kbn/licensing-plugin/common/types'; -import { LICENSE_TYPE } from '@kbn/licensing-plugin/common/types'; -import type { SecurityLicense, SecurityLicenseFeatures } from '@kbn/security-plugin-types-common'; - -export const licenseMock = { - create: ( - features: Partial | Observable> = {}, - licenseType: LicenseType = 'basic', // default to basic if this is not specified, - isAvailable: Observable = of(true) - ): jest.Mocked => ({ - isLicenseAvailable: jest.fn().mockImplementation(() => { - let result = true; - - isAvailable.subscribe((next) => { - result = next; - }); - - return result; - }), - getLicenseType: jest.fn().mockReturnValue(licenseType), - getUnavailableReason: jest.fn(), - isEnabled: jest.fn().mockReturnValue(true), - getFeatures: - features instanceof Observable - ? jest.fn().mockImplementation(() => { - let subbedFeatures: Partial = {}; - - features.subscribe((next) => { - subbedFeatures = next; - }); - - return subbedFeatures; - }) - : jest.fn().mockReturnValue(features), - hasAtLeast: jest - .fn() - .mockImplementation( - (licenseTypeToCheck: LicenseType) => - LICENSE_TYPE[licenseTypeToCheck] <= LICENSE_TYPE[licenseType] - ), - features$: - features instanceof Observable - ? (features as Observable) - : of((features ?? {}) as SecurityLicenseFeatures), - }), -}; +export { licenseMock } from '@kbn/security-authorization-core/src/__fixtures__/licensing.mock'; diff --git a/x-pack/plugins/security/common/model/index.ts b/x-pack/plugins/security/common/model/index.ts index 1e73ead22655e..1331d60d624b6 100644 --- a/x-pack/plugins/security/common/model/index.ts +++ b/x-pack/plugins/security/common/model/index.ts @@ -21,7 +21,10 @@ export { } from './authenticated_user'; export { shouldProviderUseLoginForm } from './authentication_provider'; export type { BuiltinESPrivileges } from './builtin_es_privileges'; -export type { RawKibanaPrivileges, RawKibanaFeaturePrivileges } from './raw_kibana_privileges'; +export type { + RawKibanaPrivileges, + RawKibanaFeaturePrivileges, +} from '@kbn/security-authorization-core'; export { copyRole, isRoleDeprecated, diff --git a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.test.tsx index 5f345020d6d8f..9a9abab064fa8 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.test.tsx @@ -19,6 +19,7 @@ import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; import { KibanaFeature } from '@kbn/features-plugin/public'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { REMOTE_CLUSTERS_PATH } from '@kbn/remote-clusters-plugin/public'; +import { createRawKibanaPrivileges } from '@kbn/security-role-management-model/src/__fixtures__'; import type { Space } from '@kbn/spaces-plugin/public'; import { spacesManagerMock } from '@kbn/spaces-plugin/public/spaces_manager/mocks'; import { getUiApi } from '@kbn/spaces-plugin/public/ui_api'; @@ -31,7 +32,6 @@ import { TransformErrorSection } from './privileges/kibana/transform_error_secti import type { Role } from '../../../../common'; import { licenseMock } from '../../../../common/licensing/index.mock'; import { userAPIClientMock } from '../../users/index.mock'; -import { createRawKibanaPrivileges } from '../__fixtures__/kibana_privileges'; import { indicesAPIClientMock, privilegesAPIClientMock, rolesAPIClientMock } from '../index.mock'; const spacesManager = spacesManagerMock.create(); diff --git a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx index ccdc71d119f08..b724acc58f507 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx @@ -44,6 +44,7 @@ import { reactRouterNavigate, useDarkMode } from '@kbn/kibana-react-plugin/publi import { toMountPoint } from '@kbn/react-kibana-mount'; import type { Cluster } from '@kbn/remote-clusters-plugin/public'; import { REMOTE_CLUSTERS_PATH } from '@kbn/remote-clusters-plugin/public'; +import { KibanaPrivileges } from '@kbn/security-role-management-model'; import type { Space, SpacesApiUi } from '@kbn/spaces-plugin/public'; import type { PublicMethodsOf } from '@kbn/utility-types'; @@ -72,7 +73,6 @@ import { useCapabilities } from '../../../components/use_capabilities'; import type { CheckSecurityFeaturesResponse } from '../../security_features'; import type { UserAPIClient } from '../../users'; import type { IndicesAPIClient } from '../indices_api_client'; -import { KibanaPrivileges } from '../model'; import type { PrivilegesAPIClient } from '../privileges_api_client'; import type { RolesAPIClient } from '../roles_api_client'; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privilege_utils.test.ts b/x-pack/plugins/security/public/management/roles/edit_role/privilege_utils.test.ts deleted file mode 100644 index 7ddbb393bac9f..0000000000000 --- a/x-pack/plugins/security/public/management/roles/edit_role/privilege_utils.test.ts +++ /dev/null @@ -1,50 +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 { isGlobalPrivilegeDefinition } from './privilege_utils'; - -describe('isGlobalPrivilegeDefinition', () => { - it('returns true if no spaces are defined', () => { - expect( - // @ts-ignore - isGlobalPrivilegeDefinition({ - base: [], - feature: {}, - }) - ).toEqual(true); - }); - - it('returns true if spaces is an empty array', () => { - expect( - isGlobalPrivilegeDefinition({ - spaces: [], - base: [], - feature: {}, - }) - ).toEqual(true); - }); - - it('returns true if spaces contains "*"', () => { - expect( - isGlobalPrivilegeDefinition({ - spaces: ['*'], - base: [], - feature: {}, - }) - ).toEqual(true); - }); - - it('returns false if spaces does not contain "*"', () => { - expect( - isGlobalPrivilegeDefinition({ - spaces: ['foo', 'bar'], - base: [], - feature: {}, - }) - ).toEqual(false); - }); -}); diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privilege_utils.ts b/x-pack/plugins/security/public/management/roles/edit_role/privilege_utils.ts deleted file mode 100644 index da912650fee48..0000000000000 --- a/x-pack/plugins/security/public/management/roles/edit_role/privilege_utils.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 { RoleKibanaPrivilege } from '../../../../common'; - -/** - * Determines if the passed privilege spec defines global privileges. - * @param privilegeSpec - */ -export function isGlobalPrivilegeDefinition(privilegeSpec: RoleKibanaPrivilege): boolean { - if (!privilegeSpec.spaces || privilegeSpec.spaces.length === 0) { - return true; - } - return privilegeSpec.spaces.includes('*'); -} diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/change_all_privileges.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/change_all_privileges.tsx index 00494c48b9efb..4793f86a7a2a5 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/change_all_privileges.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/change_all_privileges.tsx @@ -19,8 +19,8 @@ import _ from 'lodash'; import React, { Component } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; +import type { KibanaPrivilege } from '@kbn/security-role-management-model'; -import type { KibanaPrivilege } from '../../../../model'; import { NO_PRIVILEGE_VALUE } from '../constants'; interface Props { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table.test.tsx index 8b40b6d16d403..5a43e7931d474 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table.test.tsx @@ -9,13 +9,16 @@ import { EuiAccordion, EuiIconTip } from '@elastic/eui'; import React from 'react'; import type { KibanaFeature, SubFeatureConfig } from '@kbn/features-plugin/public'; +import { + createFeature, + createKibanaPrivileges, + kibanaFeatures, +} from '@kbn/security-role-management-model/src/__fixtures__'; import { findTestSubject, mountWithIntl } from '@kbn/test-jest-helpers'; import { getDisplayedFeaturePrivileges } from './__fixtures__'; import { FeatureTable } from './feature_table'; import type { Role } from '../../../../../../../common'; -import { createFeature, kibanaFeatures } from '../../../../__fixtures__/kibana_features'; -import { createKibanaPrivileges } from '../../../../__fixtures__/kibana_privileges'; import { PrivilegeFormCalculator } from '../privilege_form_calculator'; const createRole = (kibana: Role['kibana'] = []): Role => { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table.tsx index 7734d415bf385..6b4e7af240eb5 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table.tsx @@ -29,11 +29,11 @@ import React, { Component } from 'react'; import type { AppCategory } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import type { Role } from '@kbn/security-plugin-types-common'; +import type { KibanaPrivileges, SecuredFeature } from '@kbn/security-role-management-model'; import { ChangeAllPrivilegesControl } from './change_all_privileges'; import { FeatureTableExpandedRow } from './feature_table_expanded_row'; -import type { Role } from '../../../../../../../common'; -import type { KibanaPrivileges, SecuredFeature } from '../../../../model'; import { NO_PRIVILEGE_VALUE } from '../constants'; import { FeatureTableCell } from '../feature_table_cell'; import type { PrivilegeFormCalculator } from '../privilege_form_calculator'; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table_expanded_row.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table_expanded_row.test.tsx index b3856bb59f1f3..92a33136c7678 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table_expanded_row.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table_expanded_row.test.tsx @@ -8,12 +8,14 @@ import { act } from '@testing-library/react'; import React from 'react'; +import { + createKibanaPrivileges, + kibanaFeatures, +} from '@kbn/security-role-management-model/src/__fixtures__'; import { findTestSubject, mountWithIntl } from '@kbn/test-jest-helpers'; import { FeatureTableExpandedRow } from './feature_table_expanded_row'; import type { Role } from '../../../../../../../common'; -import { kibanaFeatures } from '../../../../__fixtures__/kibana_features'; -import { createKibanaPrivileges } from '../../../../__fixtures__/kibana_privileges'; import { PrivilegeFormCalculator } from '../privilege_form_calculator'; const createRole = (kibana: Role['kibana'] = []): Role => { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table_expanded_row.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table_expanded_row.tsx index 42090f8c6c044..8e00327fd334b 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table_expanded_row.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table_expanded_row.tsx @@ -11,9 +11,9 @@ import React, { useEffect, useState } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import type { SecuredFeature } from '@kbn/security-role-management-model'; import { SubFeatureForm } from './sub_feature_form'; -import type { SecuredFeature } from '../../../../model'; import type { PrivilegeFormCalculator } from '../privilege_form_calculator'; interface Props { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/sub_feature_form.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/sub_feature_form.test.tsx index 53e44aefbf1c8..8f741f1d48f9d 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/sub_feature_form.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/sub_feature_form.test.tsx @@ -10,13 +10,15 @@ import { act } from '@testing-library/react'; import React from 'react'; import { KibanaFeature } from '@kbn/features-plugin/public'; +import type { Role } from '@kbn/security-plugin-types-common'; +import { SecuredSubFeature } from '@kbn/security-role-management-model'; +import { + createKibanaPrivileges, + kibanaFeatures, +} from '@kbn/security-role-management-model/src/__fixtures__'; import { mountWithIntl } from '@kbn/test-jest-helpers'; import { SubFeatureForm } from './sub_feature_form'; -import type { Role } from '../../../../../../../common'; -import { kibanaFeatures } from '../../../../__fixtures__/kibana_features'; -import { createKibanaPrivileges } from '../../../../__fixtures__/kibana_privileges'; -import { SecuredSubFeature } from '../../../../model'; import { PrivilegeFormCalculator } from '../privilege_form_calculator'; // Note: these tests are not concerned with the proper display of privileges, diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/sub_feature_form.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/sub_feature_form.tsx index 4f3c1eb103a75..9155d8ae52835 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/sub_feature_form.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/sub_feature_form.tsx @@ -16,12 +16,12 @@ import { import React from 'react'; import { i18n } from '@kbn/i18n'; - import type { SecuredSubFeature, SubFeaturePrivilege, SubFeaturePrivilegeGroup, -} from '../../../../model'; +} from '@kbn/security-role-management-model'; + import { NO_PRIVILEGE_VALUE } from '../constants'; import type { PrivilegeFormCalculator } from '../privilege_form_calculator'; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell/feature_table_cell.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell/feature_table_cell.test.tsx index 372b24048fe5b..0c1eac9a70d4e 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell/feature_table_cell.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell/feature_table_cell.test.tsx @@ -8,11 +8,11 @@ import { EuiIconTip } from '@elastic/eui'; import React from 'react'; +import { SecuredFeature } from '@kbn/security-role-management-model'; +import { createFeature } from '@kbn/security-role-management-model/src/__fixtures__'; import { mountWithIntl } from '@kbn/test-jest-helpers'; import { FeatureTableCell } from './feature_table_cell'; -import { createFeature } from '../../../../__fixtures__/kibana_features'; -import { SecuredFeature } from '../../../../model'; describe('FeatureTableCell', () => { it('renders the feature name', () => { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell/feature_table_cell.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell/feature_table_cell.tsx index 062597ce46ad2..177b6fb95a413 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell/feature_table_cell.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell/feature_table_cell.tsx @@ -10,7 +10,7 @@ import './feature_table_cell.scss'; import { EuiFlexGroup, EuiFlexItem, EuiIconTip, EuiText } from '@elastic/eui'; import React from 'react'; -import type { SecuredFeature } from '../../../../model'; +import type { SecuredFeature } from '@kbn/security-role-management-model'; interface Props { feature: SecuredFeature; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/kibana_privileges_region.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/kibana_privileges_region.test.tsx index b12c4f91a3a7a..2c903b170cb2b 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/kibana_privileges_region.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/kibana_privileges_region.test.tsx @@ -9,6 +9,8 @@ import { shallow } from 'enzyme'; import React from 'react'; import { coreMock } from '@kbn/core/public/mocks'; +import type { Role } from '@kbn/security-plugin-types-common'; +import { KibanaPrivileges } from '@kbn/security-role-management-model'; import { spacesManagerMock } from '@kbn/spaces-plugin/public/spaces_manager/mocks'; import { getUiApi } from '@kbn/spaces-plugin/public/ui_api'; @@ -16,8 +18,6 @@ import { KibanaPrivilegesRegion } from './kibana_privileges_region'; import { SimplePrivilegeSection } from './simple_privilege_section'; import { SpaceAwarePrivilegeSection } from './space_aware_privilege_section'; import { TransformErrorSection } from './transform_error_section'; -import type { Role } from '../../../../../../common'; -import { KibanaPrivileges } from '../../../model'; import { RoleValidator } from '../../validate_role'; const spacesManager = spacesManagerMock.create(); diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/kibana_privileges_region.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/kibana_privileges_region.tsx index d7439b19b0d00..5344e582a3b8c 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/kibana_privileges_region.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/kibana_privileges_region.tsx @@ -8,13 +8,13 @@ import React, { Component } from 'react'; import type { Capabilities } from '@kbn/core/public'; +import type { KibanaPrivileges } from '@kbn/security-role-management-model'; import type { Space, SpacesApiUi } from '@kbn/spaces-plugin/public'; import { SimplePrivilegeSection } from './simple_privilege_section'; import { SpaceAwarePrivilegeSection } from './space_aware_privilege_section'; import { TransformErrorSection } from './transform_error_section'; import type { Role } from '../../../../../../common'; -import type { KibanaPrivileges } from '../../../model'; import { CollapsiblePanel } from '../../collapsible_panel'; import type { RoleValidator } from '../../validate_role'; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_form_calculator/privilege_form_calculator.test.ts b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_form_calculator/privilege_form_calculator.test.ts index 20c54fd2ea529..b47501e08f376 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_form_calculator/privilege_form_calculator.test.ts +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_form_calculator/privilege_form_calculator.test.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { + createKibanaPrivileges, + kibanaFeatures, +} from '@kbn/security-role-management-model/src/__fixtures__'; + import { PrivilegeFormCalculator } from './privilege_form_calculator'; import type { Role } from '../../../../../../../common'; -import { kibanaFeatures } from '../../../../__fixtures__/kibana_features'; -import { createKibanaPrivileges } from '../../../../__fixtures__/kibana_privileges'; const createRole = (kibana: Role['kibana'] = []): Role => { return { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_form_calculator/privilege_form_calculator.ts b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_form_calculator/privilege_form_calculator.ts index 227c2be381546..75cdcac34031e 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_form_calculator/privilege_form_calculator.ts +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_form_calculator/privilege_form_calculator.ts @@ -5,9 +5,12 @@ * 2.0. */ -import type { Role } from '../../../../../../../common'; -import type { KibanaPrivileges, SubFeaturePrivilegeGroup } from '../../../../model'; -import { isGlobalPrivilegeDefinition } from '../../../privilege_utils'; +import type { Role } from '@kbn/security-plugin-types-common'; +import { + isGlobalPrivilegeDefinition, + type KibanaPrivileges, + type SubFeaturePrivilegeGroup, +} from '@kbn/security-role-management-model'; /** * Calculator responsible for determining the displayed and effective privilege values for the following interfaces: diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary.test.tsx index 9f6aa8ed69ed9..f42a95693b87b 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary.test.tsx @@ -9,6 +9,10 @@ import { act } from '@testing-library/react'; import React from 'react'; import { coreMock } from '@kbn/core/public/mocks'; +import { + createKibanaPrivileges, + kibanaFeatures, +} from '@kbn/security-role-management-model/src/__fixtures__'; import { spacesManagerMock } from '@kbn/spaces-plugin/public/spaces_manager/mocks'; import { getUiApi } from '@kbn/spaces-plugin/public/ui_api'; import { findTestSubject, mountWithIntl } from '@kbn/test-jest-helpers'; @@ -16,8 +20,6 @@ import { findTestSubject, mountWithIntl } from '@kbn/test-jest-helpers'; import { PrivilegeSummary } from './privilege_summary'; import { PrivilegeSummaryTable } from './privilege_summary_table'; import type { RoleKibanaPrivilege } from '../../../../../../../common'; -import { kibanaFeatures } from '../../../../__fixtures__/kibana_features'; -import { createKibanaPrivileges } from '../../../../__fixtures__/kibana_privileges'; const createRole = (roleKibanaPrivileges: RoleKibanaPrivilege[]) => ({ name: 'some-role', diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary.tsx index 5c6d03569b10a..1ae88a0be781d 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary.tsx @@ -17,11 +17,11 @@ import { import React, { Fragment, useState } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; +import type { Role } from '@kbn/security-plugin-types-common'; +import type { KibanaPrivileges } from '@kbn/security-role-management-model'; import type { Space, SpacesApiUi } from '@kbn/spaces-plugin/public'; import { PrivilegeSummaryTable } from './privilege_summary_table'; -import type { Role } from '../../../../../../../common'; -import type { KibanaPrivileges } from '../../../../model'; interface Props { role: Role; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_calculator.test.ts b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_calculator.test.ts index b0418eac51c62..13269dffa5e8c 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_calculator.test.ts +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_calculator.test.ts @@ -5,10 +5,13 @@ * 2.0. */ +import type { Role } from '@kbn/security-plugin-types-common'; +import { + createKibanaPrivileges, + kibanaFeatures, +} from '@kbn/security-role-management-model/src/__fixtures__'; + import { PrivilegeSummaryCalculator } from './privilege_summary_calculator'; -import type { Role } from '../../../../../../../common'; -import { kibanaFeatures } from '../../../../__fixtures__/kibana_features'; -import { createKibanaPrivileges } from '../../../../__fixtures__/kibana_privileges'; const createRole = (kibana: Role['kibana'] = []): Role => { return { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_calculator.ts b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_calculator.ts index 053cd19c98d58..ce8e2fa0e22c4 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_calculator.ts +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_calculator.ts @@ -5,10 +5,14 @@ * 2.0. */ -import type { Role, RoleKibanaPrivilege } from '../../../../../../../common'; -import type { KibanaPrivileges, PrimaryFeaturePrivilege, SecuredFeature } from '../../../../model'; -import type { PrivilegeCollection } from '../../../../model/privilege_collection'; -import { isGlobalPrivilegeDefinition } from '../../../privilege_utils'; +import type { Role, RoleKibanaPrivilege } from '@kbn/security-plugin-types-common'; +import { + isGlobalPrivilegeDefinition, + type KibanaPrivileges, + type PrimaryFeaturePrivilege, + type PrivilegeCollection, + type SecuredFeature, +} from '@kbn/security-role-management-model'; export interface EffectiveFeaturePrivileges { [featureId: string]: { @@ -17,6 +21,7 @@ export interface EffectiveFeaturePrivileges { hasCustomizedSubFeaturePrivileges: boolean; }; } + export class PrivilegeSummaryCalculator { constructor(private readonly kibanaPrivileges: KibanaPrivileges, private readonly role: Role) {} diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_expanded_row.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_expanded_row.tsx index 727bcdc1b103d..83f1e26ad1284 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_expanded_row.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_expanded_row.tsx @@ -9,13 +9,13 @@ import { EuiFlexGroup, EuiFlexItem, EuiIconTip, EuiText } from '@elastic/eui'; import React from 'react'; import { i18n } from '@kbn/i18n'; - -import type { EffectiveFeaturePrivileges } from './privilege_summary_calculator'; import type { SecuredFeature, SubFeaturePrivilege, SubFeaturePrivilegeGroup, -} from '../../../../model'; +} from '@kbn/security-role-management-model'; + +import type { EffectiveFeaturePrivileges } from './privilege_summary_calculator'; interface Props { feature: SecuredFeature; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_table.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_table.test.tsx index b76ac9f1a1fc8..e1ca5300ee9f7 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_table.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_table.test.tsx @@ -9,6 +9,11 @@ import { act } from '@testing-library/react'; import React from 'react'; import { coreMock } from '@kbn/core/public/mocks'; +import type { RoleKibanaPrivilege } from '@kbn/security-plugin-types-common'; +import { + createKibanaPrivileges, + kibanaFeatures, +} from '@kbn/security-role-management-model/src/__fixtures__'; import { spacesManagerMock } from '@kbn/spaces-plugin/public/spaces_manager/mocks'; import { getUiApi } from '@kbn/spaces-plugin/public/ui_api'; import { mountWithIntl } from '@kbn/test-jest-helpers'; @@ -16,9 +21,6 @@ import { mountWithIntl } from '@kbn/test-jest-helpers'; import { getDisplayedFeaturePrivileges } from './__fixtures__'; import type { PrivilegeSummaryTableProps } from './privilege_summary_table'; import { PrivilegeSummaryTable } from './privilege_summary_table'; -import type { RoleKibanaPrivilege } from '../../../../../../../common'; -import { kibanaFeatures } from '../../../../__fixtures__/kibana_features'; -import { createKibanaPrivileges } from '../../../../__fixtures__/kibana_privileges'; const createRole = (roleKibanaPrivileges: RoleKibanaPrivilege[]) => ({ name: 'some-role', diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_table.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_table.tsx index 7dcbbe85d553c..af15cf82b9be6 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_table.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_table.tsx @@ -20,16 +20,20 @@ import { import React, { Fragment, useMemo, useState } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; +import type { Role, RoleKibanaPrivilege } from '@kbn/security-plugin-types-common'; +import { + isGlobalPrivilegeDefinition, + type KibanaPrivileges, + type PrimaryFeaturePrivilege, + type SecuredFeature, +} from '@kbn/security-role-management-model'; import type { Space, SpacesApiUi } from '@kbn/spaces-plugin/public'; import type { EffectiveFeaturePrivileges } from './privilege_summary_calculator'; import { PrivilegeSummaryCalculator } from './privilege_summary_calculator'; import { PrivilegeSummaryExpandedRow } from './privilege_summary_expanded_row'; import { SpaceColumnHeader } from './space_column_header'; -import type { Role, RoleKibanaPrivilege } from '../../../../../../../common'; import { ALL_SPACES_ID } from '../../../../../../../common/constants'; -import type { KibanaPrivileges, PrimaryFeaturePrivilege, SecuredFeature } from '../../../../model'; -import { isGlobalPrivilegeDefinition } from '../../../privilege_utils'; import { FeatureTableCell } from '../feature_table_cell'; export interface PrivilegeSummaryTableProps { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/space_column_header.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/space_column_header.tsx index ca4a2d6011c58..e65b7b255efe6 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/space_column_header.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/space_column_header.tsx @@ -9,10 +9,10 @@ import React, { Fragment, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import type { RoleKibanaPrivilege } from '@kbn/security-plugin-types-common'; +import { isGlobalPrivilegeDefinition } from '@kbn/security-role-management-model'; import type { Space, SpacesApiUi } from '@kbn/spaces-plugin/public'; -import type { RoleKibanaPrivilege } from '../../../../../../../common'; -import { isGlobalPrivilegeDefinition } from '../../../privilege_utils'; import { SpacesPopoverList } from '../../../spaces_popover_list'; export interface SpaceColumnHeaderProps { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/simple_privilege_section/simple_privilege_section.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/simple_privilege_section/simple_privilege_section.test.tsx index e0b0156db7568..3ca7cf5c8b92f 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/simple_privilege_section/simple_privilege_section.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/simple_privilege_section/simple_privilege_section.test.tsx @@ -9,12 +9,12 @@ import type { EuiButtonGroupProps } from '@elastic/eui'; import { EuiButtonGroup, EuiComboBox, EuiSuperSelect } from '@elastic/eui'; import React from 'react'; +import type { Role } from '@kbn/security-plugin-types-common'; +import { KibanaPrivileges, SecuredFeature } from '@kbn/security-role-management-model'; import { mountWithIntl, shallowWithIntl } from '@kbn/test-jest-helpers'; import { SimplePrivilegeSection } from './simple_privilege_section'; import { UnsupportedSpacePrivilegesWarning } from './unsupported_space_privileges_warning'; -import type { Role } from '../../../../../../../common'; -import { KibanaPrivileges, SecuredFeature } from '../../../../model'; const buildProps = (customProps: any = {}) => { const features = [ diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/simple_privilege_section/simple_privilege_section.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/simple_privilege_section/simple_privilege_section.tsx index 2e8b395ea07a7..b5b57921705e5 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/simple_privilege_section/simple_privilege_section.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/simple_privilege_section/simple_privilege_section.tsx @@ -16,12 +16,14 @@ import { import React, { Component, Fragment } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; +import { + isGlobalPrivilegeDefinition, + type KibanaPrivileges, +} from '@kbn/security-role-management-model'; import { UnsupportedSpacePrivilegesWarning } from './unsupported_space_privileges_warning'; import type { Role, RoleKibanaPrivilege } from '../../../../../../../common'; import { copyRole } from '../../../../../../../common/model'; -import type { KibanaPrivileges } from '../../../../model'; -import { isGlobalPrivilegeDefinition } from '../../../privilege_utils'; import { CUSTOM_PRIVILEGE_VALUE, NO_PRIVILEGE_VALUE } from '../constants'; import { FeatureTable } from '../feature_table'; import { PrivilegeFormCalculator } from '../privilege_form_calculator'; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.test.tsx index 6c633d6513692..7d9d6d015c03e 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.test.tsx @@ -8,14 +8,17 @@ import { EuiButtonGroup } from '@elastic/eui'; import React from 'react'; +import { + createFeature, + createKibanaPrivileges, + kibanaFeatures, +} from '@kbn/security-role-management-model/src/__fixtures__'; import type { Space } from '@kbn/spaces-plugin/public'; import { findTestSubject, mountWithIntl } from '@kbn/test-jest-helpers'; import { PrivilegeSpaceForm } from './privilege_space_form'; import { SpaceSelector } from './space_selector'; import type { Role } from '../../../../../../../common'; -import { createFeature, kibanaFeatures } from '../../../../__fixtures__/kibana_features'; -import { createKibanaPrivileges } from '../../../../__fixtures__/kibana_privileges'; import { FeatureTable } from '../feature_table'; import { getDisplayedFeaturePrivileges } from '../feature_table/__fixtures__'; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.tsx index 6abf5a04ae5c6..fbcc43a3b4b1a 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.tsx @@ -29,13 +29,13 @@ import React, { Component, Fragment } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import type { KibanaPrivileges } from '@kbn/security-role-management-model'; import type { Space } from '@kbn/spaces-plugin/public'; import { SpaceSelector } from './space_selector'; import type { FeaturesPrivileges, Role } from '../../../../../../../common'; import { ALL_SPACES_ID } from '../../../../../../../common/constants'; import { copyRole } from '../../../../../../../common/model'; -import type { KibanaPrivileges } from '../../../../model'; import { CUSTOM_PRIVILEGE_VALUE } from '../constants'; import { FeatureTable } from '../feature_table'; import { PrivilegeFormCalculator } from '../privilege_form_calculator'; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_table.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_table.test.tsx index 56fe843cceded..316419f479426 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_table.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_table.test.tsx @@ -10,12 +10,12 @@ import type { ReactWrapper } from 'enzyme'; import React from 'react'; import { KibanaFeature } from '@kbn/features-plugin/public'; +import type { Role, RoleKibanaPrivilege } from '@kbn/security-plugin-types-common'; +import { createKibanaPrivileges } from '@kbn/security-role-management-model/src/__fixtures__'; import { findTestSubject, mountWithIntl } from '@kbn/test-jest-helpers'; import { PrivilegeDisplay } from './privilege_display'; import { PrivilegeSpaceTable } from './privilege_space_table'; -import type { Role, RoleKibanaPrivilege } from '../../../../../../../common'; -import { createKibanaPrivileges } from '../../../../__fixtures__/kibana_privileges'; import { PrivilegeFormCalculator } from '../privilege_form_calculator'; interface TableRow { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_table.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_table.tsx index 4c0ead6e43167..28e1d50d7f71e 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_table.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_table.tsx @@ -22,13 +22,13 @@ import React, { Component } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import type { FeaturesPrivileges, Role } from '@kbn/security-plugin-types-common'; +import { isGlobalPrivilegeDefinition } from '@kbn/security-role-management-model'; import type { Space } from '@kbn/spaces-plugin/public'; import { getSpaceColor } from '@kbn/spaces-plugin/public'; import { PrivilegeDisplay } from './privilege_display'; -import type { FeaturesPrivileges, Role } from '../../../../../../../common'; import { copyRole } from '../../../../../../../common/model'; -import { isGlobalPrivilegeDefinition } from '../../../privilege_utils'; import { CUSTOM_PRIVILEGE_VALUE } from '../constants'; import type { PrivilegeFormCalculator } from '../privilege_form_calculator'; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/space_aware_privilege_section.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/space_aware_privilege_section.test.tsx index 3c2df19eb20db..b25a474bc06aa 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/space_aware_privilege_section.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/space_aware_privilege_section.test.tsx @@ -7,13 +7,15 @@ import React from 'react'; +import { + createKibanaPrivileges, + kibanaFeatures, +} from '@kbn/security-role-management-model/src/__fixtures__'; import { mountWithIntl, shallowWithIntl } from '@kbn/test-jest-helpers'; import { PrivilegeSpaceForm } from './privilege_space_form'; import { PrivilegeSpaceTable } from './privilege_space_table'; import { SpaceAwarePrivilegeSection } from './space_aware_privilege_section'; -import { kibanaFeatures } from '../../../../__fixtures__/kibana_features'; -import { createKibanaPrivileges } from '../../../../__fixtures__/kibana_privileges'; import { RoleValidator } from '../../../validate_role'; import { PrivilegeSummary } from '../privilege_summary'; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/space_aware_privilege_section.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/space_aware_privilege_section.tsx index f499da5c6973c..404bd39ec9b67 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/space_aware_privilege_section.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/space_aware_privilege_section.tsx @@ -20,13 +20,13 @@ import React, { Component, Fragment } from 'react'; import type { Capabilities } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import type { Role } from '@kbn/security-plugin-types-common'; +import type { KibanaPrivileges } from '@kbn/security-role-management-model'; import type { Space, SpacesApiUi } from '@kbn/spaces-plugin/public'; import { PrivilegeSpaceForm } from './privilege_space_form'; import { PrivilegeSpaceTable } from './privilege_space_table'; -import type { Role } from '../../../../../../../common'; import { isRoleReserved, isRoleWithWildcardBasePrivilege } from '../../../../../../../common'; -import type { KibanaPrivileges } from '../../../../model'; import type { RoleValidator } from '../../../validate_role'; import { PrivilegeFormCalculator } from '../privilege_form_calculator'; import { PrivilegeSummary } from '../privilege_summary'; diff --git a/x-pack/plugins/security/public/management/roles/model/index.ts b/x-pack/plugins/security/public/management/roles/model/index.ts deleted file mode 100644 index 55e90bb4b377d..0000000000000 --- a/x-pack/plugins/security/public/management/roles/model/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. - */ - -export { SecuredFeature } from './secured_feature'; -export { SecuredSubFeature } from './secured_sub_feature'; -export { SubFeaturePrivilegeGroup } from './sub_feature_privilege_group'; -export { SubFeaturePrivilege } from './sub_feature_privilege'; -export { PrimaryFeaturePrivilege } from './primary_feature_privilege'; -export { KibanaPrivileges } from './kibana_privileges'; -export { KibanaPrivilege } from './kibana_privilege'; -export { PrivilegeCollection } from './privilege_collection'; diff --git a/x-pack/plugins/security/public/management/roles/model/kibana_privileges.test.ts b/x-pack/plugins/security/public/management/roles/model/kibana_privileges.test.ts deleted file mode 100644 index 494f5a14b1e48..0000000000000 --- a/x-pack/plugins/security/public/management/roles/model/kibana_privileges.test.ts +++ /dev/null @@ -1,144 +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 { KibanaPrivilege } from './kibana_privilege'; -import { KibanaPrivileges } from './kibana_privileges'; -import type { RoleKibanaPrivilege } from '../../../../common'; -import { kibanaFeatures } from '../__fixtures__/kibana_features'; -import { createRawKibanaPrivileges } from '../__fixtures__/kibana_privileges'; - -describe('KibanaPrivileges', () => { - describe('#getBasePrivileges', () => { - it('returns the space base privileges for a non-global entry', () => { - const rawPrivileges = createRawKibanaPrivileges(kibanaFeatures); - const kibanaPrivileges = new KibanaPrivileges(rawPrivileges, kibanaFeatures); - - const entry: RoleKibanaPrivilege = { - base: [], - feature: {}, - spaces: ['foo'], - }; - - const basePrivileges = kibanaPrivileges.getBasePrivileges(entry); - - const expectedPrivileges = rawPrivileges.space; - - expect(basePrivileges).toHaveLength(2); - expect(basePrivileges[0]).toMatchObject({ - id: 'all', - actions: expectedPrivileges.all, - }); - expect(basePrivileges[1]).toMatchObject({ - id: 'read', - actions: expectedPrivileges.read, - }); - }); - - it('returns the global base privileges for a global entry', () => { - const rawPrivileges = createRawKibanaPrivileges(kibanaFeatures); - const kibanaPrivileges = new KibanaPrivileges(rawPrivileges, kibanaFeatures); - - const entry: RoleKibanaPrivilege = { - base: [], - feature: {}, - spaces: ['*'], - }; - - const basePrivileges = kibanaPrivileges.getBasePrivileges(entry); - - const expectedPrivileges = rawPrivileges.global; - - expect(basePrivileges).toHaveLength(2); - expect(basePrivileges[0]).toMatchObject({ - id: 'all', - actions: expectedPrivileges.all, - }); - expect(basePrivileges[1]).toMatchObject({ - id: 'read', - actions: expectedPrivileges.read, - }); - }); - }); - - describe('#createCollectionFromRoleKibanaPrivileges', () => { - it('creates a collection from a role with no privileges assigned', () => { - const rawPrivileges = createRawKibanaPrivileges(kibanaFeatures); - const kibanaPrivileges = new KibanaPrivileges(rawPrivileges, kibanaFeatures); - - const assignedPrivileges: RoleKibanaPrivilege[] = []; - kibanaPrivileges.createCollectionFromRoleKibanaPrivileges(assignedPrivileges); - }); - - it('creates a collection ignoring unknown privileges', () => { - const rawPrivileges = createRawKibanaPrivileges(kibanaFeatures); - const kibanaPrivileges = new KibanaPrivileges(rawPrivileges, kibanaFeatures); - - const assignedPrivileges: RoleKibanaPrivilege[] = [ - { - base: ['read', 'some-unknown-base-privilege'], - feature: {}, - spaces: ['*'], - }, - { - base: [], - feature: { - with_sub_features: ['read', 'cool_all', 'some-unknown-feature-privilege'], - some_unknown_feature: ['all'], - }, - spaces: ['foo'], - }, - ]; - kibanaPrivileges.createCollectionFromRoleKibanaPrivileges(assignedPrivileges); - }); - - it('creates a collection using all assigned privileges, and only the assigned privileges', () => { - const rawPrivileges = createRawKibanaPrivileges(kibanaFeatures); - const kibanaPrivileges = new KibanaPrivileges(rawPrivileges, kibanaFeatures); - - const assignedPrivileges: RoleKibanaPrivilege[] = [ - { - base: ['read'], - feature: {}, - spaces: ['*'], - }, - { - base: [], - feature: { - with_sub_features: ['read', 'cool_all'], - }, - spaces: ['foo'], - }, - ]; - const collection = - kibanaPrivileges.createCollectionFromRoleKibanaPrivileges(assignedPrivileges); - - expect( - collection.grantsPrivilege( - new KibanaPrivilege('test', [...rawPrivileges.features.with_excluded_sub_features.read]) - ) - ).toEqual(true); - - expect( - collection.grantsPrivilege( - new KibanaPrivilege('test', [...rawPrivileges.features.with_excluded_sub_features.all]) - ) - ).toEqual(false); - - expect( - collection.grantsPrivilege( - new KibanaPrivilege('test', [...rawPrivileges.features.with_sub_features.cool_all]) - ) - ).toEqual(true); - - expect( - collection.grantsPrivilege( - new KibanaPrivilege('test', [...rawPrivileges.features.with_sub_features.cool_toggle_1]) - ) - ).toEqual(false); - }); - }); -}); diff --git a/x-pack/plugins/security/public/management/roles/privileges_api_client.ts b/x-pack/plugins/security/public/management/roles/privileges_api_client.ts index a96fdd4340cc6..54c8992698978 100644 --- a/x-pack/plugins/security/public/management/roles/privileges_api_client.ts +++ b/x-pack/plugins/security/public/management/roles/privileges_api_client.ts @@ -6,8 +6,9 @@ */ import type { HttpStart } from '@kbn/core/public'; +import type { RawKibanaPrivileges } from '@kbn/security-authorization-core'; -import type { BuiltinESPrivileges, RawKibanaPrivileges } from '../../../common/model'; +import type { BuiltinESPrivileges } from '../../../common/model'; export class PrivilegesAPIClient { constructor(private readonly http: HttpStart) {} diff --git a/x-pack/plugins/security/server/authorization/authorization_service.test.ts b/x-pack/plugins/security/server/authorization/authorization_service.test.ts index ddc5e26903c2b..275a6d2643f24 100644 --- a/x-pack/plugins/security/server/authorization/authorization_service.test.ts +++ b/x-pack/plugins/security/server/authorization/authorization_service.test.ts @@ -19,6 +19,7 @@ import { Subject } from 'rxjs'; import { coreMock, elasticsearchServiceMock, loggingSystemMock } from '@kbn/core/server/mocks'; import { featuresPluginMock } from '@kbn/features-plugin/server/mocks'; +import { privilegesFactory } from '@kbn/security-authorization-core'; import { nextTick } from '@kbn/test-jest-helpers'; import { AuthorizationService } from './authorization_service'; @@ -26,7 +27,6 @@ import { checkPrivilegesFactory } from './check_privileges'; import { checkPrivilegesDynamicallyWithRequestFactory } from './check_privileges_dynamically'; import { checkSavedObjectsPrivilegesWithRequestFactory } from './check_saved_objects_privileges'; import { authorizationModeFactory } from './mode'; -import { privilegesFactory } from './privileges'; import { licenseMock } from '../../common/licensing/index.mock'; import type { OnlineStatusRetryScheduler } from '../elasticsearch'; diff --git a/x-pack/plugins/security/server/authorization/authorization_service.tsx b/x-pack/plugins/security/server/authorization/authorization_service.tsx index a926ee4d364b0..c8e036b07679c 100644 --- a/x-pack/plugins/security/server/authorization/authorization_service.tsx +++ b/x-pack/plugins/security/server/authorization/authorization_service.tsx @@ -25,6 +25,11 @@ import type { FeaturesPluginSetup as FeaturesPluginSetup, FeaturesPluginStart as FeaturesPluginStart, } from '@kbn/features-plugin/server'; +import { + Actions, + privilegesFactory, + type PrivilegesService, +} from '@kbn/security-authorization-core'; import type { AuthorizationMode, AuthorizationServiceSetup, @@ -33,7 +38,6 @@ import type { CheckUserProfilesPrivileges, } from '@kbn/security-plugin-types-server'; -import { Actions } from './actions'; import { initAPIAuthorization } from './api_authorization'; import { initAppAuthorization } from './app_authorization'; import { checkPrivilegesFactory } from './check_privileges'; @@ -41,8 +45,6 @@ import { checkPrivilegesDynamicallyWithRequestFactory } from './check_privileges import { checkSavedObjectsPrivilegesWithRequestFactory } from './check_saved_objects_privileges'; import { disableUICapabilitiesFactory } from './disable_ui_capabilities'; import { authorizationModeFactory } from './mode'; -import type { PrivilegesService } from './privileges'; -import { privilegesFactory } from './privileges'; import { registerPrivilegesWithCluster } from './register_privileges_with_cluster'; import { ResetSessionPage } from './reset_session_page'; import { validateFeaturePrivileges } from './validate_feature_privileges'; @@ -53,7 +55,7 @@ import { canRedirectRequest } from '../authentication'; import type { OnlineStatusRetryScheduler } from '../elasticsearch'; import type { SpacesService } from '../plugin'; -export { Actions } from './actions'; +export { Actions } from '@kbn/security-authorization-core'; interface AuthorizationServiceSetupParams { packageVersion: string; diff --git a/x-pack/plugins/security/server/authorization/disable_ui_capabilities.test.ts b/x-pack/plugins/security/server/authorization/disable_ui_capabilities.test.ts index a271371e5584d..f7ed4ac9cd94b 100644 --- a/x-pack/plugins/security/server/authorization/disable_ui_capabilities.test.ts +++ b/x-pack/plugins/security/server/authorization/disable_ui_capabilities.test.ts @@ -7,9 +7,9 @@ import { httpServerMock, loggingSystemMock } from '@kbn/core/server/mocks'; import { ElasticsearchFeature, KibanaFeature } from '@kbn/features-plugin/server'; +import { Actions } from '@kbn/security-authorization-core'; import type { CheckPrivilegesResponse } from '@kbn/security-plugin-types-server'; -import { Actions } from './actions'; import { disableUICapabilitiesFactory } from './disable_ui_capabilities'; import { authorizationMock } from './index.mock'; import type { AuthenticatedUser } from '../../common'; diff --git a/x-pack/plugins/security/server/authorization/index.mock.ts b/x-pack/plugins/security/server/authorization/index.mock.ts index 04c389f24fcad..c3b76a0908f13 100644 --- a/x-pack/plugins/security/server/authorization/index.mock.ts +++ b/x-pack/plugins/security/server/authorization/index.mock.ts @@ -5,10 +5,9 @@ * 2.0. */ +import { actionsMock } from '@kbn/security-authorization-core/src/actions/actions.mock'; import type { AuthorizationMode } from '@kbn/security-plugin-types-server'; -import { actionsMock } from './actions/actions.mock'; - export const authorizationMock = { create: ({ version = 'mock-version', diff --git a/x-pack/plugins/security/server/authorization/index.ts b/x-pack/plugins/security/server/authorization/index.ts index 0ebd085ba0e42..3552f85c005dd 100644 --- a/x-pack/plugins/security/server/authorization/index.ts +++ b/x-pack/plugins/security/server/authorization/index.ts @@ -5,9 +5,8 @@ * 2.0. */ -export { Actions } from './actions'; +export { Actions, type CasesSupportedOperations } from '@kbn/security-authorization-core'; export type { AuthorizationServiceSetupInternal } from './authorization_service'; export { AuthorizationService } from './authorization_service'; export type { ElasticsearchRole } from './roles'; export { transformElasticsearchRoleToRole, compareRolesByName } from './roles'; -export type { CasesSupportedOperations } from './privileges'; diff --git a/x-pack/plugins/security/server/authorization/register_privileges_with_cluster.ts b/x-pack/plugins/security/server/authorization/register_privileges_with_cluster.ts index b8fb5f83aadcf..0809626eaf718 100644 --- a/x-pack/plugins/security/server/authorization/register_privileges_with_cluster.ts +++ b/x-pack/plugins/security/server/authorization/register_privileges_with_cluster.ts @@ -8,8 +8,8 @@ import { difference, isEqual, isEqualWith } from 'lodash'; import type { IClusterClient, Logger } from '@kbn/core/server'; +import type { PrivilegesService } from '@kbn/security-authorization-core'; -import type { PrivilegesService } from './privileges'; import { serializePrivileges } from './privileges_serializer'; export async function registerPrivilegesWithCluster( diff --git a/x-pack/plugins/security/server/authorization/service.test.mocks.ts b/x-pack/plugins/security/server/authorization/service.test.mocks.ts index 7fb0908e60cab..d5cbc3375aae2 100644 --- a/x-pack/plugins/security/server/authorization/service.test.mocks.ts +++ b/x-pack/plugins/security/server/authorization/service.test.mocks.ts @@ -21,9 +21,13 @@ jest.mock('./check_saved_objects_privileges', () => ({ })); export const mockPrivilegesFactory = jest.fn(); -jest.mock('./privileges', () => ({ - privilegesFactory: mockPrivilegesFactory, -})); +jest.mock('@kbn/security-authorization-core', () => { + const authzCore = jest.requireActual('@kbn/security-authorization-core'); + return { + ...authzCore, + privilegesFactory: mockPrivilegesFactory, + }; +}); export const mockAuthorizationModeFactory = jest.fn(); jest.mock('./mode', () => ({ diff --git a/x-pack/plugins/security/tsconfig.json b/x-pack/plugins/security/tsconfig.json index 10c1ada6ede15..8e3f38833248d 100644 --- a/x-pack/plugins/security/tsconfig.json +++ b/x-pack/plugins/security/tsconfig.json @@ -83,7 +83,9 @@ "@kbn/core-user-profile-browser", "@kbn/security-api-key-management", "@kbn/security-form-components", - "@kbn/core-security-server-mocks" + "@kbn/core-security-server-mocks", + "@kbn/security-authorization-core", + "@kbn/security-role-management-model", ], "exclude": [ "target/**/*", diff --git a/yarn.lock b/yarn.lock index 9a876f07ecb25..549fd4e2e86bf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6276,6 +6276,10 @@ version "0.0.0" uid "" +"@kbn/security-authorization-core@link:x-pack/packages/security/authorization_core": + version "0.0.0" + uid "" + "@kbn/security-form-components@link:x-pack/packages/security/form_components": version "0.0.0" uid "" @@ -6300,6 +6304,10 @@ version "0.0.0" uid "" +"@kbn/security-role-management-model@link:x-pack/packages/security/role_management_model": + version "0.0.0" + uid "" + "@kbn/security-solution-distribution-bar@link:x-pack/packages/security-solution/distribution_bar": version "0.0.0" uid "" From e78281187774d3974a4394bfb2a82aa9fcac435e Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Thu, 22 Aug 2024 16:46:37 +0300 Subject: [PATCH 18/59] fix: [Obs Inventory][KEYBOARD]: The map view tooltips must be available on keyboard focus (#187861) Closes: https://github.com/elastic/observability-accessibility/issues/43 Closes: https://github.com/elastic/observability-accessibility/issues/18 ## Description - https://github.com/elastic/observability-accessibility/issues/43: The Observability Inventory map view has a grid of map tiles that each accept a mouse event to show a tooltip. This tooltip must also be available when the tile receives keyboard focus. - https://github.com/elastic/observability-accessibility/issues/18: The Inventory > Kubernetes Pods popover stays open when I click "Create Inventory Rule" and the modal dialog opens. This creates an odd stacking order and obscures content for users at smaller viewport width. ## Steps to recreate 1. Open [Inventory Hosts map view](https://keep-serverless-fyzdg-f07c50.kb.eu-west-1.aws.qa.elastic.cloud/app/metrics/inventory?inventoryViewId=%270%27&waffleFilter=(expression:%27%27,kind:kuery)&waffleTime=(currentTime:1719523489979,isAutoReloading:!f)&waffleOptions=(accountId:%27%27,autoBounds:!t,boundsOverride:(max:1,min:0),customMetrics:!(),customOptions:!(),groupBy:!(),legend:(palette:cool,reverseColors:!f,steps:10),metric:(type:cpu),nodeType:host,region:%27%27,sort:(by:name,direction:desc),timelineOpen:!f,view:map)&assetDetailsFlyout=(assetType:!n,detailsItemId:!n)&assetDetails=!n) 2. Change Hosts to Kubernetes Clusters 3. Try to select specific node using the keyboard ## Screens https://github.com/user-attachments/assets/9ab3b20d-1144-48ed-9760-363f43bafb4b https://github.com/user-attachments/assets/e41bba9f-f3c5-4ce7-bba4-98cf26a2137a --- .../inventory_view/components/table_view.tsx | 1 + .../inventory_view/components/waffle/node.tsx | 77 +++++++++---------- .../components/waffle/node_square.tsx | 18 ++--- 3 files changed, 41 insertions(+), 55 deletions(-) diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/table_view.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/table_view.tsx index e4ab8c45cbf10..182c74c124fd9 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/table_view.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/table_view.tsx @@ -82,6 +82,7 @@ export const TableView = (props: Props) => { isOpen={openPopoverId === uniqueID} closePopover={closePopover} anchorPosition="rightCenter" + zIndex={0} > { - const [isToolTipOpen, { off: hideToolTip, on: showToolTip }] = useBoolean(false); const [isPopoverOpen, { off: closePopover, toggle: togglePopover }] = useBoolean(false); const metric = first(node.metrics); @@ -57,11 +56,11 @@ export const Node = ({ const value = formatter(rawValue); const isContainerAssetViewEnabled = useUiSetting(enableInfrastructureContainerAssetView); - const showContainerAssetDetailPage = nodeType === 'container' && isContainerAssetViewEnabled; + const isFlyoutMode = nodeType === 'host' || showContainerAssetDetailPage; const toggleAssetPopover = () => { - if (nodeType === 'host' || showContainerAssetDetailPage) { + if (isFlyoutMode) { setFlyoutUrlState({ detailsItemId: node.id, assetType: nodeType }); } else { togglePopover(); @@ -69,46 +68,40 @@ export const Node = ({ }; const nodeSquare = ( - + } + > +
+ +
+
); - return ( - <> - {isPopoverOpen ? ( - - - - ) : isToolTipOpen ? ( - } - > - {nodeSquare} - - ) : ( - nodeSquare - )} - + return !isFlyoutMode ? ( + + + + ) : ( + nodeSquare ); }; diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/node_square.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/node_square.tsx index 7f11f4bbc192c..31d31fed64016 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/node_square.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/node_square.tsx @@ -66,8 +66,8 @@ const NodeContainerSmall = ({ children, ...props }: NodeProps & { color: string {children}
); -const ValueInner = ({ children, ...props }: NodeProps) => ( - +
); const SquareOuter = ({ children, ...props }: NodeProps & { color: string }) => (
( export const NodeSquare = ({ squareSize, togglePopover, - showToolTip, - hideToolTip, color, nodeName, value, @@ -163,8 +162,6 @@ export const NodeSquare = ({ }: { squareSize: number; togglePopover: UseBooleanHandlers['toggle']; - showToolTip: () => void; - hideToolTip: () => void; color: string; nodeName: string; value: string; @@ -184,9 +181,6 @@ export const NodeSquare = ({ style={{ width: squareSize || 0, height: squareSize || 0 }} onClick={togglePopover} onKeyPress={togglePopover} - onFocus={showToolTip} - onMouseOver={showToolTip} - onMouseLeave={hideToolTip} className="buttonContainer" > @@ -217,10 +211,8 @@ export const NodeSquare = ({ style={{ width: squareSize || 0, height: squareSize || 0, ...style }} onClick={togglePopover} onKeyPress={togglePopover} - onMouseOver={showToolTip} - onFocus={showToolTip} - onMouseLeave={hideToolTip} color={color} + tabIndex={0} /> ); }; From 07717a43ab369847d87c8e15071759502a89c48b Mon Sep 17 00:00:00 2001 From: Patrick Mueller Date: Thu, 22 Aug 2024 10:29:22 -0400 Subject: [PATCH 19/59] [ResponseOps][alerting] add rule info to logging in alertsClient (#190857) ## Summary While investigating some issues with the alertsClient, I realized that we weren't writing out any rule information for the logged messages. This made debugging quite difficult, as I wanted to see the rule, so had to search through the alerts indices for the specified alert to get it's rule id, rule type, etc. As an example, see https://github.com/elastic/kibana/issues/190376 This PR adds that kind of rule info to the logged messages in alertsClient, as well as the typical sort of tags we write out (rule id, rule type, module). --- .../alerts_client/alerts_client.test.ts | 24 ++-- .../server/alerts_client/alerts_client.ts | 35 ++++-- .../lib/alert_conflict_resolver.test.ts | 118 +++++++++++++++--- .../lib/alert_conflict_resolver.ts | 37 ++++-- 4 files changed, 172 insertions(+), 42 deletions(-) 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 fcf151b1d0afd..4391fdce06c28 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 @@ -287,6 +287,9 @@ const defaultExecutionOpts = { startedAt: null, }; +const ruleInfo = `for test.rule-type:1 'rule-name'`; +const logTags = { tags: ['test.rule-type', '1', 'alerts-client'] }; + describe('Alerts Client', () => { let alertsClientParams: AlertsClientParams; let processAndLogAlertsOpts: ProcessAndLogAlertsOpts; @@ -484,7 +487,8 @@ describe('Alerts Client', () => { }); expect(logger.error).toHaveBeenCalledWith( - `Error searching for tracked alerts by UUID - search failed!` + `Error searching for tracked alerts by UUID ${ruleInfo} - search failed!`, + logTags ); spy.mockRestore(); @@ -778,7 +782,8 @@ describe('Alerts Client', () => { expect(spy).toHaveBeenNthCalledWith(2, 'recoveredCurrent'); expect(logger.error).toHaveBeenCalledWith( - "Error writing alert(2) to .alerts-test.alerts-default - alert(2) doesn't exist in active alerts" + `Error writing alert(2) to .alerts-test.alerts-default - alert(2) doesn't exist in active alerts ${ruleInfo}.`, + logTags ); spy.mockRestore(); @@ -1346,7 +1351,8 @@ describe('Alerts Client', () => { expect(clusterClient.bulk).toHaveBeenCalled(); expect(logger.error).toHaveBeenCalledWith( - `Error writing alerts: 1 successful, 0 conflicts, 2 errors: Validation Failed: 1: index is missing;2: type is missing;; failed to parse field [process.command_line] of type [wildcard] in document with id 'f0c9805be95fedbc3c99c663f7f02cc15826c122'.` + `Error writing alerts ${ruleInfo}: 1 successful, 0 conflicts, 2 errors: Validation Failed: 1: index is missing;2: type is missing;; failed to parse field [process.command_line] of type [wildcard] in document with id 'f0c9805be95fedbc3c99c663f7f02cc15826c122'.`, + { tags: ['test.rule-type', '1', 'resolve-alert-conflicts'] } ); }); @@ -1423,7 +1429,8 @@ describe('Alerts Client', () => { }); expect(logger.warn).toHaveBeenCalledWith( - `Could not update alert abc in partial-.internal.alerts-test.alerts-default-000001. Partial and restored alert indices are not supported.` + `Could not update alert abc in partial-.internal.alerts-test.alerts-default-000001. Partial and restored alert indices are not supported ${ruleInfo}.`, + logTags ); }); @@ -1448,7 +1455,8 @@ describe('Alerts Client', () => { expect(clusterClient.bulk).toHaveBeenCalled(); expect(logger.error).toHaveBeenCalledWith( - `Error writing 2 alerts to .alerts-test.alerts-default - fail` + `Error writing 2 alerts to .alerts-test.alerts-default ${ruleInfo} - fail`, + logTags ); }); @@ -1478,7 +1486,8 @@ describe('Alerts Client', () => { }); expect(logger.debug).toHaveBeenCalledWith( - `Resources registered and installed for test context but "shouldWrite" is set to false.` + `Resources registered and installed for test context but "shouldWrite" is set to false ${ruleInfo}.`, + logTags ); expect(clusterClient.bulk).not.toHaveBeenCalled(); }); @@ -2026,7 +2035,8 @@ describe('Alerts Client', () => { ).rejects.toBe('something went wrong!'); expect(logger.warn).toHaveBeenCalledWith( - 'Error updating alert maintenance window IDs: something went wrong!' + `Error updating alert maintenance window IDs for test.rule-type:1 'rule-name': something went wrong!`, + logTags ); }); }); 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 162cdb3cd21fb..9926ea9ec9039 100644 --- a/x-pack/plugins/alerting/server/alerts_client/alerts_client.ts +++ b/x-pack/plugins/alerting/server/alerts_client/alerts_client.ts @@ -112,6 +112,8 @@ export class AlertsClient< private reportedAlerts: Record> = {}; private _isUsingDataStreams: boolean; + private ruleInfoMessage: string; + private logTags: { tags: string[] }; constructor(private readonly options: AlertsClientParams) { this.legacyAlertsClient = new LegacyAlertsClient< @@ -130,6 +132,8 @@ export class AlertsClient< this.rule = formatRule({ rule: this.options.rule, ruleType: this.options.ruleType }); this.ruleType = options.ruleType; this._isUsingDataStreams = this.options.dataStreamAdapter.isUsingDataStreams(); + this.ruleInfoMessage = `for ${this.ruleType.id}:${this.options.rule.id} '${this.options.rule.name}'`; + this.logTags = { tags: [this.ruleType.id, this.options.rule.id, 'alerts-client'] }; } public async initializeExecution(opts: InitializeExecutionOpts) { @@ -202,7 +206,10 @@ export class AlertsClient< this.fetchedAlerts.primaryTerm[alertUuid] = hit._primary_term; } } catch (err) { - this.options.logger.error(`Error searching for tracked alerts by UUID - ${err.message}`); + this.options.logger.error( + `Error searching for tracked alerts by UUID ${this.ruleInfoMessage} - ${err.message}`, + this.logTags + ); } } @@ -327,7 +334,8 @@ export class AlertsClient< ); } catch (e) { this.options.logger.debug( - `Failed to update alert matched by maintenance window scoped query for rule ${this.ruleType.id}:${this.options.rule.id}: '${this.options.rule.name}'.` + `Failed to update alert matched by maintenance window scoped query ${this.ruleInfoMessage}`, + this.logTags ); } @@ -407,7 +415,8 @@ export class AlertsClient< private async persistAlertsHelper() { if (!this.ruleType.alerts?.shouldWrite) { this.options.logger.debug( - `Resources registered and installed for ${this.ruleType.alerts?.context} context but "shouldWrite" is set to false.` + `Resources registered and installed for ${this.ruleType.alerts?.context} context but "shouldWrite" is set to false ${this.ruleInfoMessage}.`, + this.logTags ); return; } @@ -482,7 +491,8 @@ export class AlertsClient< } } else { this.options.logger.error( - `Error writing alert(${id}) to ${this.indexTemplateAndPattern.alias} - alert(${id}) doesn't exist in active alerts` + `Error writing alert(${id}) to ${this.indexTemplateAndPattern.alias} - alert(${id}) doesn't exist in active alerts ${this.ruleInfoMessage}.`, + this.logTags ); } } @@ -529,7 +539,8 @@ export class AlertsClient< return true; } else if (!isValidAlertIndexName(alertIndex)) { this.options.logger.warn( - `Could not update alert ${alertUuid} in ${alertIndex}. Partial and restored alert indices are not supported.` + `Could not update alert ${alertUuid} in ${alertIndex}. Partial and restored alert indices are not supported ${this.ruleInfoMessage}.`, + this.logTags ); return false; } @@ -573,11 +584,15 @@ export class AlertsClient< operations: bulkBody, }, bulkResponse: response, + ruleId: this.options.rule.id, + ruleName: this.options.rule.name, + ruleType: this.ruleType.id, }); } } catch (err) { this.options.logger.error( - `Error writing ${alertsToIndex.length} alerts to ${this.indexTemplateAndPattern.alias} - ${err.message}` + `Error writing ${alertsToIndex.length} alerts to ${this.indexTemplateAndPattern.alias} ${this.ruleInfoMessage} - ${err.message}`, + this.logTags ); } } @@ -669,7 +684,10 @@ export class AlertsClient< }); return response; } catch (err) { - this.options.logger.warn(`Error updating alert maintenance window IDs: ${err}`); + this.options.logger.warn( + `Error updating alert maintenance window IDs ${this.ruleInfoMessage}: ${err}`, + this.logTags + ); throw err; } } @@ -739,7 +757,8 @@ export class AlertsClient< // Update alerts with new maintenance window IDs, await not needed this.updateAlertMaintenanceWindowIds(uniqueAlertsId).catch(() => { this.options.logger.debug( - 'Failed to update new alerts with scoped query maintenance window Ids by updateByQuery.' + `Failed to update new alerts with scoped query maintenance window Ids by updateByQuery ${this.ruleInfoMessage}.`, + this.logTags ); }); } diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/alert_conflict_resolver.test.ts b/x-pack/plugins/alerting/server/alerts_client/lib/alert_conflict_resolver.test.ts index 281b358854be9..cc6b43b40da7b 100644 --- a/x-pack/plugins/alerting/server/alerts_client/lib/alert_conflict_resolver.test.ts +++ b/x-pack/plugins/alerting/server/alerts_client/lib/alert_conflict_resolver.test.ts @@ -25,6 +25,12 @@ import { resolveAlertConflicts } from './alert_conflict_resolver'; const logger = loggingSystemMock.create().get(); const esClient = elasticsearchServiceMock.createElasticsearchClient(); +const ruleId = 'rule-id'; +const ruleName = 'name of rule'; +const ruleType = 'rule-type'; + +const ruleInfo = `for ${ruleType}:${ruleId} '${ruleName}'`; +const logTags = { tags: [ruleType, ruleId, 'resolve-alert-conflicts'] }; const alertDoc = { [EVENT_ACTION]: 'active', @@ -45,11 +51,20 @@ describe('alert_conflict_resolver', () => { esClient.mget.mockRejectedValueOnce(new Error('mget failed')); - await resolveAlertConflicts({ logger, esClient, bulkRequest, bulkResponse }); + await resolveAlertConflicts({ + logger, + esClient, + bulkRequest, + bulkResponse, + ruleId, + ruleName, + ruleType, + }); expect(logger.error).toHaveBeenNthCalledWith( 2, - 'Error resolving alert conflicts: mget failed' + `Error resolving alert conflicts ${ruleInfo}: mget failed`, + logTags ); }); @@ -61,11 +76,20 @@ describe('alert_conflict_resolver', () => { }); esClient.bulk.mockRejectedValueOnce(new Error('bulk failed')); - await resolveAlertConflicts({ logger, esClient, bulkRequest, bulkResponse }); + await resolveAlertConflicts({ + logger, + esClient, + bulkRequest, + bulkResponse, + ruleId, + ruleName, + ruleType, + }); expect(logger.error).toHaveBeenNthCalledWith( 2, - 'Error resolving alert conflicts: bulk failed' + `Error resolving alert conflicts ${ruleInfo}: bulk failed`, + logTags ); }); }); @@ -73,13 +97,29 @@ describe('alert_conflict_resolver', () => { describe('is successful with', () => { test('no bulk results', async () => { const { bulkRequest, bulkResponse } = getReqRes(''); - await resolveAlertConflicts({ logger, esClient, bulkRequest, bulkResponse }); + await resolveAlertConflicts({ + logger, + esClient, + bulkRequest, + bulkResponse, + ruleId, + ruleName, + ruleType, + }); expect(logger.error).not.toHaveBeenCalled(); }); test('no errors in bulk results', async () => { const { bulkRequest, bulkResponse } = getReqRes('c is is c is'); - await resolveAlertConflicts({ logger, esClient, bulkRequest, bulkResponse }); + await resolveAlertConflicts({ + logger, + esClient, + bulkRequest, + bulkResponse, + ruleId, + ruleName, + ruleType, + }); expect(logger.error).not.toHaveBeenCalled(); }); @@ -96,16 +136,30 @@ describe('alert_conflict_resolver', () => { items: [getBulkResItem(0)], }); - await resolveAlertConflicts({ logger, esClient, bulkRequest, bulkResponse }); + await resolveAlertConflicts({ + logger, + esClient, + bulkRequest, + bulkResponse, + ruleId, + ruleName, + ruleType, + }); expect(logger.error).toHaveBeenNthCalledWith( 1, - `Error writing alerts: 0 successful, 1 conflicts, 0 errors: ` + `Error writing alerts ${ruleInfo}: 0 successful, 1 conflicts, 0 errors: `, + logTags + ); + expect(logger.info).toHaveBeenNthCalledWith( + 1, + `Retrying bulk update of 1 conflicted alerts ${ruleInfo}`, + logTags ); - expect(logger.info).toHaveBeenNthCalledWith(1, `Retrying bulk update of 1 conflicted alerts`); expect(logger.info).toHaveBeenNthCalledWith( 2, - `Retried bulk update of 1 conflicted alerts succeeded` + `Retried bulk update of 1 conflicted alerts succeeded ${ruleInfo}`, + logTags ); }); @@ -122,16 +176,30 @@ describe('alert_conflict_resolver', () => { items: [getBulkResItem(2)], }); - await resolveAlertConflicts({ logger, esClient, bulkRequest, bulkResponse }); + await resolveAlertConflicts({ + logger, + esClient, + bulkRequest, + bulkResponse, + ruleId, + ruleName, + ruleType, + }); expect(logger.error).toHaveBeenNthCalledWith( 1, - `Error writing alerts: 2 successful, 1 conflicts, 1 errors: hallo` + `Error writing alerts ${ruleInfo}: 2 successful, 1 conflicts, 1 errors: hallo`, + logTags + ); + expect(logger.info).toHaveBeenNthCalledWith( + 1, + `Retrying bulk update of 1 conflicted alerts ${ruleInfo}`, + logTags ); - expect(logger.info).toHaveBeenNthCalledWith(1, `Retrying bulk update of 1 conflicted alerts`); expect(logger.info).toHaveBeenNthCalledWith( 2, - `Retried bulk update of 1 conflicted alerts succeeded` + `Retried bulk update of 1 conflicted alerts succeeded ${ruleInfo}`, + logTags ); }); @@ -148,16 +216,30 @@ describe('alert_conflict_resolver', () => { items: [getBulkResItem(2), getBulkResItem(3), getBulkResItem(5)], }); - await resolveAlertConflicts({ logger, esClient, bulkRequest, bulkResponse }); + await resolveAlertConflicts({ + logger, + esClient, + bulkRequest, + bulkResponse, + ruleId, + ruleName, + ruleType, + }); expect(logger.error).toHaveBeenNthCalledWith( 1, - `Error writing alerts: 2 successful, 3 conflicts, 1 errors: hallo` + `Error writing alerts ${ruleInfo}: 2 successful, 3 conflicts, 1 errors: hallo`, + logTags + ); + expect(logger.info).toHaveBeenNthCalledWith( + 1, + `Retrying bulk update of 3 conflicted alerts ${ruleInfo}`, + logTags ); - expect(logger.info).toHaveBeenNthCalledWith(1, `Retrying bulk update of 3 conflicted alerts`); expect(logger.info).toHaveBeenNthCalledWith( 2, - `Retried bulk update of 3 conflicted alerts succeeded` + `Retried bulk update of 3 conflicted alerts succeeded ${ruleInfo}`, + logTags ); }); }); diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/alert_conflict_resolver.ts b/x-pack/plugins/alerting/server/alerts_client/lib/alert_conflict_resolver.ts index 383d8dbb103fb..55a3a885f1c71 100644 --- a/x-pack/plugins/alerting/server/alerts_client/lib/alert_conflict_resolver.ts +++ b/x-pack/plugins/alerting/server/alerts_client/lib/alert_conflict_resolver.ts @@ -35,6 +35,9 @@ export interface ResolveAlertConflictsParams { logger: Logger; bulkRequest: BulkRequest; bulkResponse: BulkResponse; + ruleId: string; + ruleName: string; + ruleType: string; } interface NormalizedBulkRequest { @@ -46,26 +49,33 @@ interface NormalizedBulkRequest { // to replace just logging that the error occurred, so we don't want // to cause _more_ errors ... export async function resolveAlertConflicts(params: ResolveAlertConflictsParams): Promise { - const { logger } = params; + const { logger, ruleId, ruleType, ruleName } = params; + const ruleInfoMessage = `for ${ruleType}:${ruleId} '${ruleName}'`; + const logTags = { tags: [ruleType, ruleId, 'resolve-alert-conflicts'] }; + try { await resolveAlertConflicts_(params); } catch (err) { - logger.error(`Error resolving alert conflicts: ${err.message}`); + logger.error(`Error resolving alert conflicts ${ruleInfoMessage}: ${err.message}`, logTags); } } async function resolveAlertConflicts_(params: ResolveAlertConflictsParams): Promise { - const { logger, esClient, bulkRequest, bulkResponse } = params; + const { logger, esClient, bulkRequest, bulkResponse, ruleId, ruleType, ruleName } = params; if (bulkRequest.operations && bulkRequest.operations?.length === 0) return; if (bulkResponse.items && bulkResponse.items?.length === 0) return; + const ruleInfoMessage = `for ${ruleType}:${ruleId} '${ruleName}'`; + const logTags = { tags: [ruleType, ruleId, 'resolve-alert-conflicts'] }; + // get numbers for a summary log message const { success, errors, conflicts, messages } = getResponseStats(bulkResponse); if (conflicts === 0 && errors === 0) return; const allMessages = messages.join('; '); logger.error( - `Error writing alerts: ${success} successful, ${conflicts} conflicts, ${errors} errors: ${allMessages}` + `Error writing alerts ${ruleInfoMessage}: ${success} successful, ${conflicts} conflicts, ${errors} errors: ${allMessages}`, + logTags ); // get a new bulk request for just conflicted docs @@ -79,14 +89,18 @@ async function resolveAlertConflicts_(params: ResolveAlertConflictsParams): Prom await updateOCC(conflictRequest, freshDocs); await refreshFieldsInDocs(conflictRequest, freshDocs); - logger.info(`Retrying bulk update of ${conflictRequest.length} conflicted alerts`); + logger.info( + `Retrying bulk update of ${conflictRequest.length} conflicted alerts ${ruleInfoMessage}`, + logTags + ); const mbrResponse = await makeBulkRequest(params.esClient, params.bulkRequest, conflictRequest); if (mbrResponse.bulkResponse?.items.length !== conflictRequest.length) { const actual = mbrResponse.bulkResponse?.items.length; const expected = conflictRequest.length; logger.error( - `Unexpected number of bulk response items retried; expecting ${expected}, retried ${actual}` + `Unexpected number of bulk response items retried; expecting ${expected}, retried ${actual} ${ruleInfoMessage}`, + logTags ); return; } @@ -94,16 +108,21 @@ async function resolveAlertConflicts_(params: ResolveAlertConflictsParams): Prom if (mbrResponse.error) { const index = bulkRequest.index || 'unknown index'; logger.error( - `Error writing ${conflictRequest.length} alerts to ${index} - ${mbrResponse.error.message}` + `Error writing ${conflictRequest.length} alerts to ${index} ${ruleInfoMessage} - ${mbrResponse.error.message}`, + logTags ); return; } if (mbrResponse.errors === 0) { - logger.info(`Retried bulk update of ${conflictRequest.length} conflicted alerts succeeded`); + logger.info( + `Retried bulk update of ${conflictRequest.length} conflicted alerts succeeded ${ruleInfoMessage}`, + logTags + ); } else { logger.error( - `Retried bulk update of ${conflictRequest.length} conflicted alerts still had ${mbrResponse.errors} conflicts` + `Retried bulk update of ${conflictRequest.length} conflicted alerts still had ${mbrResponse.errors} conflicts ${ruleInfoMessage}`, + logTags ); } } From f63bd038936d9ccc54126dd6fb153409348fd8b5 Mon Sep 17 00:00:00 2001 From: jennypavlova Date: Thu, 22 Aug 2024 16:59:41 +0200 Subject: [PATCH 20/59] [Infra] Identify hosts not monitored by the system integration in the hosts list (#191063) Closes [#190418](https://github.com/elastic/kibana/issues/190418) ## Summary This PR adds a popover for the hosts that are not monitored by the system integration to help users troubleshoot the problem ## Testing A way to check it is to have a host that is monitored by system integration (I am using metricbeat) and sythtrace hosts - there we should have both (I am using `node scripts/synthtrace infra_hosts_with_apm_hosts --scenarioOpts.numInstances=50 --live`) - Go to hosts view and check the table - The hosts that are **not** monitored by the system integration should have an icon before the host name which opens the popover with some explanation and documentation links - The hosts that are monitored by the system integration should not have an icon before the host name Screenshot 2024-08-22 at 12 02 27 ![image](https://github.com/user-attachments/assets/b28474d4-2272-4372-b70d-6370aa8e2a9d) --- .../hosts/hooks/use_hosts_table.test.ts | 2 + .../metrics/hosts/hooks/use_hosts_table.tsx | 88 ++++++++++++++++--- 2 files changed, 80 insertions(+), 10 deletions(-) diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.test.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.test.ts index c8011d614dbff..965f6acd24c93 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.test.ts +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.test.ts @@ -176,6 +176,7 @@ describe('useHostTable hook', () => { memoryFree: 34359.738368, normalizedLoad1m: 239.2040001, alertsCount: 0, + hasSystemMetrics: true, }, { name: 'host-1', @@ -194,6 +195,7 @@ describe('useHostTable hook', () => { memoryFree: 9.194304, normalizedLoad1m: 100, alertsCount: 0, + hasSystemMetrics: true, }, ]; diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx index 87ecc64de14f3..10f7b6028a384 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx @@ -6,7 +6,13 @@ */ import React, { useCallback, useMemo, useState } from 'react'; -import { EuiBasicTableColumn, CriteriaWithPagination, EuiTableSelectionType } from '@elastic/eui'; +import { + EuiBasicTableColumn, + CriteriaWithPagination, + EuiTableSelectionType, + EuiText, + EuiLink, +} from '@elastic/eui'; import createContainer from 'constate'; import useAsync from 'react-use/lib/useAsync'; import { isEqual } from 'lodash'; @@ -15,6 +21,8 @@ import { CloudProvider } from '@kbn/custom-icons'; import { findInventoryModel } from '@kbn/metrics-data-access-plugin/common'; import { EuiToolTip } from '@elastic/eui'; import { EuiBadge } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { Popover } from '../../../../components/asset_details/tabs/common/popover'; import { HOST_NAME_FIELD } from '../../../../../common/constants'; import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana'; import { createInventoryMetricFormatter } from '../../inventory_view/lib/create_inventory_metric_formatter'; @@ -48,6 +56,7 @@ export type HostNodeRow = HostMetadata & HostMetrics & { name: string; alertsCount?: number; + hasSystemMetrics: boolean; }; /** @@ -58,7 +67,7 @@ const formatMetric = (type: InfraAssetMetricType, value: number | undefined | nu }; const buildItemsList = (nodes: InfraAssetMetricsItem[]): HostNodeRow[] => { - return nodes.map(({ metrics, metadata, name, alertsCount }) => { + return nodes.map(({ metrics, metadata, name, alertsCount, hasSystemMetrics }) => { const metadataKeyValue = metadata.reduce( (acc, curr) => ({ ...acc, @@ -83,7 +92,7 @@ const buildItemsList = (nodes: InfraAssetMetricsItem[]): HostNodeRow[] => { }), {} as HostMetrics ), - + hasSystemMetrics, alertsCount: alertsCount ?? 0, }; }); @@ -127,6 +136,7 @@ export const useHostsTable = () => { const { hostNodes } = useHostsViewContext(); const displayAlerts = hostNodes.some((item) => 'alertsCount' in item); + const showApmHostTroubleshooting = hostNodes.some((item) => !item.hasSystemMetrics); const { value: formulas } = useAsync(() => inventoryModel.metrics.getFormulas()); @@ -267,6 +277,63 @@ export const useHostsTable = () => { }, ] : []), + ...(showApmHostTroubleshooting + ? [ + { + name: '', + width: '20px', + field: 'hasSystemMetrics', + sortable: false, + 'data-test-subj': 'hostsView-tableRow-hasSystemMetrics', + render: (hasSystemMetrics: HostNodeRow['hasSystemMetrics']) => { + if (hasSystemMetrics) { + return null; + } + return ( + + +

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

+

+ + + +

+
+
+ ); + }, + }, + ] + : []), { name: TABLE_COLUMN_LABEL.title, field: 'title', @@ -385,18 +452,19 @@ export const useHostsTable = () => { }, ], [ - detailsItemId, + displayAlerts, + showApmHostTroubleshooting, formulas?.cpuUsage.value, - formulas?.diskUsage.value, - formulas?.memoryFree.value, - formulas?.memoryUsage.value, formulas?.normalizedLoad1m.value, + formulas?.memoryUsage.value, + formulas?.memoryFree.value, + formulas?.diskUsage.value, formulas?.rx.value, formulas?.tx.value, - reportHostEntryClick, - setProperties, - displayAlerts, metricColumnsWidth, + detailsItemId, + setProperties, + reportHostEntryClick, ] ); From 9653d7e1fcf1b894728ae7502dd6b0e290e25321 Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Thu, 22 Aug 2024 11:08:01 -0400 Subject: [PATCH 21/59] [Response Ops][Task Manager] Adding jest integration test to test capacity based claiming (#189431) Resolves https://github.com/elastic/kibana/issues/189111 ## Summary Adds jest integration test to test cost capacity based claiming with the `mget` claim strategy. Using this integration test, we can exclude running other tasks other than our test types. We register a normal cost task and an XL cost task. We test both that we can claim tasks up to 100% capacity and that we will stop claiming tasks if the next task puts us over capacity, even if that means we're leaving capacity on the table. --------- Co-authored-by: Elastic Machine --- ...sk_manager_capacity_based_claiming.test.ts | 327 ++++++++++++++++++ .../server/task_claimers/index.test.ts | 14 +- .../server/task_claimers/index.ts | 11 + .../server/task_claimers/strategy_mget.ts | 16 +- .../task_claimers/strategy_update_by_query.ts | 18 +- 5 files changed, 367 insertions(+), 19 deletions(-) create mode 100644 x-pack/plugins/task_manager/server/integration_tests/task_manager_capacity_based_claiming.test.ts diff --git a/x-pack/plugins/task_manager/server/integration_tests/task_manager_capacity_based_claiming.test.ts b/x-pack/plugins/task_manager/server/integration_tests/task_manager_capacity_based_claiming.test.ts new file mode 100644 index 0000000000000..ab2a397f60f8c --- /dev/null +++ b/x-pack/plugins/task_manager/server/integration_tests/task_manager_capacity_based_claiming.test.ts @@ -0,0 +1,327 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { v4 as uuidV4 } from 'uuid'; +import type { TestElasticsearchUtils, TestKibanaUtils } from '@kbn/core-test-helpers-kbn-server'; +import { schema } from '@kbn/config-schema'; +import { times } from 'lodash'; +import { TaskCost, TaskStatus } from '../task'; +import type { TaskClaimingOpts } from '../queries/task_claiming'; +import { TaskManagerPlugin, type TaskManagerStartContract } from '../plugin'; +import { injectTask, setupTestServers, retry } from './lib'; +import { CreateMonitoringStatsOpts } from '../monitoring'; +import { filter, map } from 'rxjs'; +import { isTaskManagerWorkerUtilizationStatEvent } from '../task_events'; +import { TaskLifecycleEvent } from '../polling_lifecycle'; +import { Ok } from '../lib/result_type'; + +const POLLING_INTERVAL = 5000; +const { TaskPollingLifecycle: TaskPollingLifecycleMock } = jest.requireMock('../polling_lifecycle'); +jest.mock('../polling_lifecycle', () => { + const actual = jest.requireActual('../polling_lifecycle'); + return { + ...actual, + TaskPollingLifecycle: jest.fn().mockImplementation((opts) => { + return new actual.TaskPollingLifecycle(opts); + }), + }; +}); + +const { createMonitoringStats: createMonitoringStatsMock } = jest.requireMock('../monitoring'); +jest.mock('../monitoring', () => { + const actual = jest.requireActual('../monitoring'); + return { + ...actual, + createMonitoringStats: jest.fn().mockImplementation((opts) => { + return new actual.createMonitoringStats(opts); + }), + }; +}); + +const mockTaskTypeNormalCostRunFn = jest.fn(); +const mockCreateTaskRunnerNormalCost = jest.fn(); +const mockTaskTypeNormalCost = { + title: 'Normal cost task', + description: '', + cost: TaskCost.Normal, + stateSchemaByVersion: { + 1: { + up: (state: Record) => ({ foo: state.foo || '' }), + schema: schema.object({ + foo: schema.string(), + }), + }, + }, + createTaskRunner: mockCreateTaskRunnerNormalCost.mockImplementation(() => ({ + run: mockTaskTypeNormalCostRunFn, + })), +}; +const mockTaskTypeXLCostRunFn = jest.fn(); +const mockCreateTaskRunnerXLCost = jest.fn(); +const mockTaskTypeXLCost = { + title: 'XL cost task', + description: '', + cost: TaskCost.ExtraLarge, + stateSchemaByVersion: { + 1: { + up: (state: Record) => ({ foo: state.foo || '' }), + schema: schema.object({ + foo: schema.string(), + }), + }, + }, + createTaskRunner: mockCreateTaskRunnerXLCost.mockImplementation(() => ({ + run: mockTaskTypeXLCostRunFn, + })), +}; +jest.mock('../queries/task_claiming', () => { + const actual = jest.requireActual('../queries/task_claiming'); + return { + ...actual, + TaskClaiming: jest.fn().mockImplementation((opts: TaskClaimingOpts) => { + opts.definitions.registerTaskDefinitions({ + _normalCostType: mockTaskTypeNormalCost, + _xlCostType: mockTaskTypeXLCost, + }); + return new actual.TaskClaiming(opts); + }), + }; +}); + +const taskManagerStartSpy = jest.spyOn(TaskManagerPlugin.prototype, 'start'); + +describe('capacity based claiming', () => { + const taskIdsToRemove: string[] = []; + let esServer: TestElasticsearchUtils; + let kibanaServer: TestKibanaUtils; + let taskManagerPlugin: TaskManagerStartContract; + let createMonitoringStatsOpts: CreateMonitoringStatsOpts; + + beforeAll(async () => { + const setupResult = await setupTestServers({ + xpack: { + task_manager: { + claim_strategy: `mget`, + capacity: 10, + poll_interval: POLLING_INTERVAL, + unsafe: { + exclude_task_types: ['[A-Za-z]*'], + }, + }, + }, + }); + esServer = setupResult.esServer; + kibanaServer = setupResult.kibanaServer; + + expect(taskManagerStartSpy).toHaveBeenCalledTimes(1); + taskManagerPlugin = taskManagerStartSpy.mock.results[0].value; + + expect(TaskPollingLifecycleMock).toHaveBeenCalledTimes(1); + + expect(createMonitoringStatsMock).toHaveBeenCalledTimes(1); + createMonitoringStatsOpts = createMonitoringStatsMock.mock.calls[0][0]; + }); + + afterAll(async () => { + if (kibanaServer) { + await kibanaServer.stop(); + } + if (esServer) { + await esServer.stop(); + } + }); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + afterEach(async () => { + while (taskIdsToRemove.length > 0) { + const id = taskIdsToRemove.pop(); + await taskManagerPlugin.removeIfExists(id!); + } + }); + + it('should claim tasks to full capacity', async () => { + const backgroundTaskLoads: number[] = []; + createMonitoringStatsOpts.taskPollingLifecycle?.events + .pipe( + filter(isTaskManagerWorkerUtilizationStatEvent), + map((taskEvent: TaskLifecycleEvent) => { + return (taskEvent.event as unknown as Ok).value; + }) + ) + .subscribe((load: number) => { + backgroundTaskLoads.push(load); + }); + const taskRunAtDates: Date[] = []; + mockTaskTypeNormalCostRunFn.mockImplementation(() => { + taskRunAtDates.push(new Date()); + return { state: { foo: 'test' } }; + }); + + // inject 10 normal cost tasks with the same runAt value + const ids: string[] = []; + times(10, () => ids.push(uuidV4())); + + const runAt = new Date(); + for (const id of ids) { + await injectTask(kibanaServer.coreStart.elasticsearch.client.asInternalUser, { + id, + taskType: '_normalCostType', + params: {}, + state: { foo: 'test' }, + stateVersion: 1, + runAt, + enabled: true, + scheduledAt: new Date(), + attempts: 0, + status: TaskStatus.Idle, + startedAt: null, + retryAt: null, + ownerId: null, + }); + taskIdsToRemove.push(id); + } + + await retry(async () => { + expect(mockTaskTypeNormalCostRunFn).toHaveBeenCalledTimes(10); + }); + + expect(taskRunAtDates.length).toBe(10); + + // run at dates should be within a few seconds of each other + const firstRunAt = taskRunAtDates[0].getTime(); + const lastRunAt = taskRunAtDates[taskRunAtDates.length - 1].getTime(); + + expect(lastRunAt - firstRunAt).toBeLessThanOrEqual(1000); + + // background task load should be 0 or 100 since we're only running these tasks + for (const load of backgroundTaskLoads) { + expect(load === 0 || load === 100).toBe(true); + } + }); + + it('should claim tasks until the next task will exceed capacity', async () => { + const backgroundTaskLoads: number[] = []; + createMonitoringStatsOpts.taskPollingLifecycle?.events + .pipe( + filter(isTaskManagerWorkerUtilizationStatEvent), + map((taskEvent: TaskLifecycleEvent) => { + return (taskEvent.event as unknown as Ok).value; + }) + ) + .subscribe((load: number) => { + backgroundTaskLoads.push(load); + }); + const now = new Date(); + const taskRunAtDates: Array<{ runAt: Date; type: string }> = []; + mockTaskTypeNormalCostRunFn.mockImplementation(() => { + taskRunAtDates.push({ type: 'normal', runAt: new Date() }); + return { state: { foo: 'test' } }; + }); + mockTaskTypeXLCostRunFn.mockImplementation(() => { + taskRunAtDates.push({ type: 'xl', runAt: new Date() }); + return { state: { foo: 'test' } }; + }); + + // inject 6 normal cost tasks for total cost of 12 + const ids: string[] = []; + times(6, () => ids.push(uuidV4())); + const runAt1 = new Date(now.valueOf() - 5); + for (const id of ids) { + await injectTask(kibanaServer.coreStart.elasticsearch.client.asInternalUser, { + id, + taskType: '_normalCostType', + params: {}, + state: { foo: 'test' }, + stateVersion: 1, + runAt: runAt1, + enabled: true, + scheduledAt: new Date(), + attempts: 0, + status: TaskStatus.Idle, + startedAt: null, + retryAt: null, + ownerId: null, + }); + taskIdsToRemove.push(id); + } + + // inject 1 XL cost task that will put us over the max cost capacity of 20 + const xlid = uuidV4(); + const runAt2 = now; + await injectTask(kibanaServer.coreStart.elasticsearch.client.asInternalUser, { + id: xlid, + taskType: '_xlCostType', + params: {}, + state: { foo: 'test' }, + stateVersion: 1, + runAt: runAt2, + enabled: true, + scheduledAt: new Date(), + attempts: 0, + status: TaskStatus.Idle, + startedAt: null, + retryAt: null, + ownerId: null, + }); + taskIdsToRemove.push(xlid); + + // inject one more normal cost task + const runAt3 = new Date(now.valueOf() + 5); + const lastid = uuidV4(); + await injectTask(kibanaServer.coreStart.elasticsearch.client.asInternalUser, { + id: lastid, + taskType: '_normalCostType', + params: {}, + state: { foo: 'test' }, + stateVersion: 1, + runAt: runAt3, + enabled: true, + scheduledAt: new Date(), + attempts: 0, + status: TaskStatus.Idle, + startedAt: null, + retryAt: null, + ownerId: null, + }); + taskIdsToRemove.push(lastid); + + // retry until all tasks have been run + await retry(async () => { + expect(mockTaskTypeNormalCostRunFn).toHaveBeenCalledTimes(7); + expect(mockTaskTypeXLCostRunFn).toHaveBeenCalledTimes(1); + }); + + expect(taskRunAtDates.length).toBe(8); + + const firstRunAt = taskRunAtDates[0].runAt.getTime(); + + // the first 6 tasks should have been run at the same time (adding some fudge factor) + // and they should all be normal cost tasks + for (let i = 0; i < 6; i++) { + expect(taskRunAtDates[i].type).toBe('normal'); + expect(taskRunAtDates[i].runAt.getTime() - firstRunAt).toBeLessThanOrEqual(500); + } + + // the next task should be XL cost task and be run after one polling interval has passed (with some fudge factor) + expect(taskRunAtDates[6].type).toBe('xl'); + expect(taskRunAtDates[6].runAt.getTime() - firstRunAt).toBeGreaterThan(POLLING_INTERVAL - 500); + + // last task should be normal cost and be run after one polling interval has passed + expect(taskRunAtDates[7].type).toBe('normal'); + expect(taskRunAtDates[7].runAt.getTime() - firstRunAt).toBeGreaterThan(POLLING_INTERVAL - 500); + + // background task load should be 0 or 60 or 100 since we're only running these tasks + // should be 100 during the claim cycle where we claimed 6 normal tasks but left the large capacity task in the queue + // should be 60 during the next claim cycle where we claimed the large capacity task and the normal capacity: 10 + 2 / 20 = 60% + for (const load of backgroundTaskLoads) { + expect(load === 0 || load === 60 || load === 100).toBe(true); + } + }); +}); diff --git a/x-pack/plugins/task_manager/server/task_claimers/index.test.ts b/x-pack/plugins/task_manager/server/task_claimers/index.test.ts index d4501a0a021ff..72ab2f9a695e8 100644 --- a/x-pack/plugins/task_manager/server/task_claimers/index.test.ts +++ b/x-pack/plugins/task_manager/server/task_claimers/index.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { getTaskClaimer } from '.'; +import { getTaskClaimer, isTaskTypeExcluded } from '.'; import { mockLogger } from '../test_utils'; import { claimAvailableTasksUpdateByQuery } from './strategy_update_by_query'; import { claimAvailableTasksMget } from './strategy_mget'; @@ -37,3 +37,15 @@ describe('task_claimers/index', () => { }); }); }); + +describe('isTaskTypeExcluded', () => { + test('returns false when task type is not in the excluded list', () => { + expect(isTaskTypeExcluded(['otherTaskType'], 'taskType')).toBe(false); + expect(isTaskTypeExcluded(['otherTaskType*'], 'taskType')).toBe(false); + }); + + test('returns true when task type is in the excluded list', () => { + expect(isTaskTypeExcluded(['taskType'], 'taskType')).toBe(true); + expect(isTaskTypeExcluded(['task*'], 'taskType')).toBe(true); + }); +}); diff --git a/x-pack/plugins/task_manager/server/task_claimers/index.ts b/x-pack/plugins/task_manager/server/task_claimers/index.ts index 2b7e48c85f167..ff4f9f6131120 100644 --- a/x-pack/plugins/task_manager/server/task_claimers/index.ts +++ b/x-pack/plugins/task_manager/server/task_claimers/index.ts @@ -8,6 +8,7 @@ import { Subject, Observable } from 'rxjs'; import { Logger } from '@kbn/core/server'; +import minimatch from 'minimatch'; import { TaskStore } from '../task_store'; import { TaskClaim, TaskTiming } from '../task_events'; import { TaskTypeDictionary } from '../task_type_dictionary'; @@ -72,3 +73,13 @@ export function getEmptyClaimOwnershipResult(): ClaimOwnershipResult { docs: [], }; } + +export function isTaskTypeExcluded(excludedTaskTypePatterns: string[], taskType: string) { + for (const excludedTypePattern of excludedTaskTypePatterns) { + if (minimatch(taskType, excludedTypePattern)) { + return true; + } + } + + return false; +} diff --git a/x-pack/plugins/task_manager/server/task_claimers/strategy_mget.ts b/x-pack/plugins/task_manager/server/task_claimers/strategy_mget.ts index 7962fdd2b6f8a..b2751803e8dc3 100644 --- a/x-pack/plugins/task_manager/server/task_claimers/strategy_mget.ts +++ b/x-pack/plugins/task_manager/server/task_claimers/strategy_mget.ts @@ -19,7 +19,12 @@ import apm from 'elastic-apm-node'; import { Subject, Observable } from 'rxjs'; import { TaskTypeDictionary } from '../task_type_dictionary'; -import { TaskClaimerOpts, ClaimOwnershipResult, getEmptyClaimOwnershipResult } from '.'; +import { + TaskClaimerOpts, + ClaimOwnershipResult, + getEmptyClaimOwnershipResult, + isTaskTypeExcluded, +} from '.'; import { ConcreteTaskInstance, TaskStatus, ConcreteTaskInstanceVersion, TaskCost } from '../task'; import { TASK_MANAGER_TRANSACTION_TYPE } from '../task_running'; import { @@ -50,7 +55,7 @@ interface OwnershipClaimingOpts { size: number; taskTypes: Set; removedTypes: Set; - excludedTypes: Set; + excludedTaskTypes: string[]; taskStore: TaskStore; events$: Subject; definitions: TaskTypeDictionary; @@ -103,13 +108,12 @@ async function claimAvailableTasks(opts: TaskClaimerOpts): Promise { const searchedTypes = Array.from(taskTypes) .concat(Array.from(removedTypes)) - .filter((type) => !excludedTypes.has(type)); + .filter((type) => !isTaskTypeExcluded(excludedTaskTypes, type)); const queryForScheduledTasks = mustBeAllOf( // Task must be enabled EnabledTask, diff --git a/x-pack/plugins/task_manager/server/task_claimers/strategy_update_by_query.ts b/x-pack/plugins/task_manager/server/task_claimers/strategy_update_by_query.ts index 1cb9d8942a55a..807ee8ca4397f 100644 --- a/x-pack/plugins/task_manager/server/task_claimers/strategy_update_by_query.ts +++ b/x-pack/plugins/task_manager/server/task_claimers/strategy_update_by_query.ts @@ -9,14 +9,18 @@ * This module contains helpers for managing the task manager storage layer. */ import apm from 'elastic-apm-node'; -import minimatch from 'minimatch'; import { Subject, Observable, from, of } from 'rxjs'; import { mergeScan } from 'rxjs'; import { groupBy, pick } from 'lodash'; import { asOk } from '../lib/result_type'; import { TaskTypeDictionary } from '../task_type_dictionary'; -import { TaskClaimerOpts, ClaimOwnershipResult, getEmptyClaimOwnershipResult } from '.'; +import { + TaskClaimerOpts, + ClaimOwnershipResult, + getEmptyClaimOwnershipResult, + isTaskTypeExcluded, +} from '.'; import { ConcreteTaskInstance } from '../task'; import { TASK_MANAGER_TRANSACTION_TYPE } from '../task_running'; import { isLimited, TASK_MANAGER_MARK_AS_CLAIMED } from '../queries/task_claiming'; @@ -132,16 +136,6 @@ function emitEvents(events$: Subject, events: TaskClaim[]) { events.forEach((event) => events$.next(event)); } -function isTaskTypeExcluded(excludedTaskTypes: string[], taskType: string) { - for (const excludedType of excludedTaskTypes) { - if (minimatch(taskType, excludedType)) { - return true; - } - } - - return false; -} - async function markAvailableTasksAsClaimed({ definitions, excludedTaskTypes, From 20ccb21c942a91f8625764889be4461c0ee22b6a Mon Sep 17 00:00:00 2001 From: Shahzad Date: Thu, 22 Aug 2024 17:13:16 +0200 Subject: [PATCH 22/59] [Synthetics] Settings add config to enable default rules (#190800) ## Summary Settings add config to enable default rules !! separated out of https://github.com/elastic/kibana/pull/186585 !! image --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Dominique Belcher --- .../common/constants/settings_defaults.ts | 2 + .../common/runtime_types/dynamic_settings.ts | 2 + .../synthetics_overview_status.ts | 2 +- .../synthetics/common/types/default_alerts.ts | 20 +++ .../synthetics/common/types/index.ts | 1 + ...etics_alert.ts => use_synthetics_rules.ts} | 9 +- .../alerts/toggle_alert_flyout_button.tsx | 4 +- .../alerting_defaults/alert_defaults_form.tsx | 45 ++++++ .../use_monitors_sorted_by_status.test.tsx | 2 +- .../synthetics/state/alert_rules/actions.ts | 25 ++- .../apps/synthetics/state/alert_rules/api.ts | 8 +- .../synthetics/state/alert_rules/index.ts | 4 +- .../apps/synthetics/state/settings/api.ts | 10 +- .../server/alert_rules/common.test.ts | 4 + .../synthetics/server/alert_rules/common.ts | 2 + .../status_rule/status_rule_executor.ts | 2 +- .../alert_rules/tls_rule/tls_rule_executor.ts | 2 +- .../server/queries/query_monitor_status.ts | 2 +- .../server/routes/certs/get_certificates.ts | 15 +- .../default_alerts/default_alert_service.ts | 61 ++++++-- .../default_alerts/enable_default_alert.ts | 3 +- .../default_alerts/get_default_alert.ts | 7 +- .../default_alerts/update_default_alert.ts | 38 +++-- .../overview_status/overview_status.test.ts | 8 +- .../routes/overview_status/overview_status.ts | 10 +- .../routes/settings/dynamic_settings.ts | 12 +- .../server/routes/suggestions/route.ts | 25 +-- .../server/runtime_types/settings.ts | 2 + .../server/saved_objects/saved_objects.ts | 3 +- .../get_all_monitors.test.ts | 41 +---- .../synthetics_monitor/get_all_monitors.ts | 5 - .../synthetics/server/types.ts | 2 + .../uptime/tsconfig.json | 2 +- .../synthetics/enable_default_alerting.ts | 142 +++++++++++++++++- 34 files changed, 382 insertions(+), 140 deletions(-) create mode 100644 x-pack/plugins/observability_solution/synthetics/common/types/default_alerts.ts rename x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/alerts/hooks/{use_synthetics_alert.ts => use_synthetics_rules.ts} (91%) diff --git a/x-pack/plugins/observability_solution/synthetics/common/constants/settings_defaults.ts b/x-pack/plugins/observability_solution/synthetics/common/constants/settings_defaults.ts index aa32449713be8..fc382175e182f 100644 --- a/x-pack/plugins/observability_solution/synthetics/common/constants/settings_defaults.ts +++ b/x-pack/plugins/observability_solution/synthetics/common/constants/settings_defaults.ts @@ -16,4 +16,6 @@ export const DYNAMIC_SETTINGS_DEFAULTS: DynamicSettings = { cc: [], bcc: [], }, + defaultTLSRuleEnabled: true, + defaultStatusRuleEnabled: true, }; diff --git a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/dynamic_settings.ts b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/dynamic_settings.ts index 8dc2405085bb5..e222ee5896908 100644 --- a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/dynamic_settings.ts +++ b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/dynamic_settings.ts @@ -34,6 +34,8 @@ export const DynamicSettingsCodec = t.intersection([ }), t.partial({ defaultEmail: DefaultEmailCodec, + defaultTLSRuleEnabled: t.boolean, + defaultStatusRuleEnabled: t.boolean, }), ]); diff --git a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/synthetics_overview_status.ts b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/synthetics_overview_status.ts index 54238d01a915d..7e8a1257e6428 100644 --- a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/synthetics_overview_status.ts +++ b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/synthetics_overview_status.ts @@ -44,7 +44,7 @@ export const OverviewPendingStatusMetaDataCodec = t.intersection([ monitorQueryId: t.string, configId: t.string, status: t.string, - location: t.string, + locationId: t.string, }), t.partial({ timestamp: t.string, diff --git a/x-pack/plugins/observability_solution/synthetics/common/types/default_alerts.ts b/x-pack/plugins/observability_solution/synthetics/common/types/default_alerts.ts new file mode 100644 index 0000000000000..2c02838842ad1 --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/common/types/default_alerts.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 { SanitizedRule, SanitizedRuleAction, RuleSystemAction } from '@kbn/alerting-plugin/common'; +import { SYNTHETICS_STATUS_RULE, SYNTHETICS_TLS_RULE } from '../constants/synthetics_alerts'; + +export type DefaultRuleType = typeof SYNTHETICS_STATUS_RULE | typeof SYNTHETICS_TLS_RULE; +type SYNTHETICS_DEFAULT_RULE = Omit, 'systemActions' | 'actions'> & { + actions: Array; + ruleTypeId: SanitizedRule['alertTypeId']; +}; + +export interface DEFAULT_ALERT_RESPONSE { + statusRule: SYNTHETICS_DEFAULT_RULE | null; + tlsRule: SYNTHETICS_DEFAULT_RULE | null; +} diff --git a/x-pack/plugins/observability_solution/synthetics/common/types/index.ts b/x-pack/plugins/observability_solution/synthetics/common/types/index.ts index 2a70803a43211..be369427c47e7 100644 --- a/x-pack/plugins/observability_solution/synthetics/common/types/index.ts +++ b/x-pack/plugins/observability_solution/synthetics/common/types/index.ts @@ -7,3 +7,4 @@ export * from './synthetics_monitor'; export * from './monitor_validation'; +export * from './default_alerts'; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/alerts/hooks/use_synthetics_alert.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/alerts/hooks/use_synthetics_rules.ts similarity index 91% rename from x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/alerts/hooks/use_synthetics_alert.ts rename to x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/alerts/hooks/use_synthetics_rules.ts index 2f3673287deb1..6e03b69b5d60c 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/alerts/hooks/use_synthetics_alert.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/alerts/hooks/use_synthetics_rules.ts @@ -25,7 +25,7 @@ import { } from '../../../state'; import { ClientPluginsStart } from '../../../../../plugin'; -export const useSyntheticsAlert = (isOpen: boolean) => { +export const useSyntheticsRules = (isOpen: boolean) => { const dispatch = useDispatch(); const defaultRules = useSelector(selectSyntheticsAlerts); @@ -64,14 +64,15 @@ export const useSyntheticsAlert = (isOpen: boolean) => { const { triggersActionsUi } = useKibana().services; const EditAlertFlyout = useMemo(() => { - if (!defaultRules) { + const initialRule = + alertFlyoutVisible === SYNTHETICS_TLS_RULE ? defaultRules?.tlsRule : defaultRules?.statusRule; + if (!initialRule) { return null; } return triggersActionsUi.getEditRuleFlyout({ onClose: () => dispatch(setAlertFlyoutVisible(null)), hideInterval: true, - initialRule: - alertFlyoutVisible === SYNTHETICS_TLS_RULE ? defaultRules.tlsRule : defaultRules.statusRule, + initialRule, }); }, [defaultRules, dispatch, triggersActionsUi, alertFlyoutVisible]); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/alerts/toggle_alert_flyout_button.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/alerts/toggle_alert_flyout_button.tsx index 8bc04d8eb9f9d..0a8e5abf37f1a 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/alerts/toggle_alert_flyout_button.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/alerts/toggle_alert_flyout_button.tsx @@ -26,7 +26,7 @@ import { import { ManageRulesLink } from '../common/links/manage_rules_link'; import { ClientPluginsStart } from '../../../../plugin'; import { ToggleFlyoutTranslations } from './hooks/translations'; -import { useSyntheticsAlert } from './hooks/use_synthetics_alert'; +import { useSyntheticsRules } from './hooks/use_synthetics_rules'; import { selectAlertFlyoutVisibility, selectMonitorListState, @@ -40,7 +40,7 @@ export const ToggleAlertFlyoutButton = () => { const { application } = useKibana().services; const hasUptimeWrite = application?.capabilities.uptime?.save ?? false; - const { EditAlertFlyout, loading } = useSyntheticsAlert(isOpen); + const { EditAlertFlyout, loading } = useSyntheticsRules(isOpen); const { loaded, data: monitors } = useSelector(selectMonitorListState); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/alerting_defaults/alert_defaults_form.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/alerting_defaults/alert_defaults_form.tsx index f87f1267efcc3..463e7604815a1 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/alerting_defaults/alert_defaults_form.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/alerting_defaults/alert_defaults_form.tsx @@ -15,6 +15,7 @@ import { EuiFlexItem, EuiForm, EuiSpacer, + EuiSwitch, } from '@elastic/eui'; import { useDispatch, useSelector } from 'react-redux'; import { useKibana } from '@kbn/kibana-react-plugin/public'; @@ -80,6 +81,50 @@ export const AlertDefaultsForm = () => { return ( + + + + + } + description={ + + } + > + + { + setFormFields({ + ...formFields, + defaultStatusRuleEnabled: !(formFields.defaultStatusRuleEnabled ?? true), + }); + }} + /> + + { + setFormFields({ + ...formFields, + defaultTLSRuleEnabled: !(formFields.defaultTLSRuleEnabled ?? true), + }); + }} + /> + { [`test-monitor-4-${location1.id}`]: { configId: 'test-monitor-4', monitorQueryId: 'test-monitor-4', - location: location1.id, + locationId: location1.id, }, }, }, diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/alert_rules/actions.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/alert_rules/actions.ts index 413c94c0fbd7b..e004b5a34396a 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/alert_rules/actions.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/alert_rules/actions.ts @@ -5,24 +5,21 @@ * 2.0. */ -import { Rule } from '@kbn/triggers-actions-ui-plugin/public'; +import { DEFAULT_ALERT_RESPONSE } from '../../../../../common/types/default_alerts'; import { createAsyncAction } from '../utils/actions'; -export const getDefaultAlertingAction = createAsyncAction< - void, - { statusRule: Rule; tlsRule: Rule } ->('getDefaultAlertingAction'); +export const getDefaultAlertingAction = createAsyncAction( + 'getDefaultAlertingAction' +); -export const enableDefaultAlertingAction = createAsyncAction< - void, - { statusRule: Rule; tlsRule: Rule } ->('enableDefaultAlertingAction'); +export const enableDefaultAlertingAction = createAsyncAction( + 'enableDefaultAlertingAction' +); -export const enableDefaultAlertingSilentlyAction = createAsyncAction< - void, - { statusRule: Rule; tlsRule: Rule } ->('enableDefaultAlertingSilentlyAction'); +export const enableDefaultAlertingSilentlyAction = createAsyncAction( + 'enableDefaultAlertingSilentlyAction' +); -export const updateDefaultAlertingAction = createAsyncAction( +export const updateDefaultAlertingAction = createAsyncAction( 'updateDefaultAlertingAction' ); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/alert_rules/api.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/alert_rules/api.ts index ee42d9e1b2508..909976e1f2848 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/alert_rules/api.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/alert_rules/api.ts @@ -5,18 +5,18 @@ * 2.0. */ -import { Rule } from '@kbn/triggers-actions-ui-plugin/public'; import { SYNTHETICS_API_URLS } from '../../../../../common/constants'; +import { DEFAULT_ALERT_RESPONSE } from '../../../../../common/types/default_alerts'; import { apiService } from '../../../../utils/api_service'; -export async function getDefaultAlertingAPI(): Promise<{ statusRule: Rule; tlsRule: Rule }> { +export async function getDefaultAlertingAPI(): Promise { return apiService.get(SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING); } -export async function enableDefaultAlertingAPI(): Promise<{ statusRule: Rule; tlsRule: Rule }> { +export async function enableDefaultAlertingAPI(): Promise { return apiService.post(SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING); } -export async function updateDefaultAlertingAPI(): Promise { +export async function updateDefaultAlertingAPI(): Promise { return apiService.put(SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING); } diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/alert_rules/index.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/alert_rules/index.ts index 4b8c6688adc1e..7dc44fa1dbf0f 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/alert_rules/index.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/alert_rules/index.ts @@ -6,7 +6,7 @@ */ import { createReducer } from '@reduxjs/toolkit'; -import { Rule } from '@kbn/triggers-actions-ui-plugin/public'; +import { DEFAULT_ALERT_RESPONSE } from '../../../../../common/types/default_alerts'; import { IHttpSerializedFetchError } from '..'; import { enableDefaultAlertingAction, @@ -16,7 +16,7 @@ import { } from './actions'; export interface DefaultAlertingState { - data?: { statusRule: Rule; tlsRule: Rule }; + data?: DEFAULT_ALERT_RESPONSE; success: boolean | null; loading: boolean; error: IHttpSerializedFetchError | null; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/settings/api.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/settings/api.ts index 7949cd5120f79..81925415ed3b3 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/settings/api.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/settings/api.ts @@ -36,9 +36,17 @@ export const getDynamicSettings = async (): Promise => { export const setDynamicSettings = async ({ settings, }: SaveApiRequest): Promise => { + const newSettings: DynamicSettings = { + certAgeThreshold: settings.certAgeThreshold, + certExpirationThreshold: settings.certExpirationThreshold, + defaultConnectors: settings.defaultConnectors, + defaultEmail: settings.defaultEmail, + defaultTLSRuleEnabled: settings.defaultTLSRuleEnabled, + defaultStatusRuleEnabled: settings.defaultStatusRuleEnabled, + }; return await apiService.put( SYNTHETICS_API_URLS.DYNAMIC_SETTINGS, - settings, + newSettings, DynamicSettingsSaveCodec, { version: '2023-10-31', diff --git a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/common.test.ts b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/common.test.ts index b0ce8c17c6d0c..47221ff7020d5 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/common.test.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/common.test.ts @@ -274,6 +274,7 @@ describe('setRecoveredAlertsContext', () => { alertDetailsUrl: 'https://localhost:5601/app/observability/alerts/alert-id', monitorName: 'test-monitor', recoveryReason: 'the monitor has been deleted', + 'kibana.alert.reason': 'the monitor has been deleted', recoveryStatus: 'has been deleted', monitorUrl: '(unavailable)', monitorUrlLabel: 'URL', @@ -350,6 +351,7 @@ describe('setRecoveredAlertsContext', () => { alertDetailsUrl: 'https://localhost:5601/app/observability/alerts/alert-id', monitorName: 'test-monitor', recoveryReason: 'this location has been removed from the monitor', + 'kibana.alert.reason': 'this location has been removed from the monitor', recoveryStatus: 'has recovered', stateId: '123456', status: 'recovered', @@ -421,6 +423,8 @@ describe('setRecoveredAlertsContext', () => { status: 'up', recoveryReason: 'the monitor is now up again. It ran successfully at Feb 26, 2023 @ 00:00:00.000', + 'kibana.alert.reason': + 'the monitor is now up again. It ran successfully at Feb 26, 2023 @ 00:00:00.000', recoveryStatus: 'is now up', locationId: location, checkedAt: 'Feb 26, 2023 @ 00:00:00.000', diff --git a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/common.ts b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/common.ts index 25d2265ff3ff6..549bbcff4cdfe 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/common.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/common.ts @@ -19,6 +19,7 @@ import { i18n } from '@kbn/i18n'; import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query'; import { legacyExperimentalFieldMap, ObservabilityUptimeAlert } from '@kbn/alerts-as-data-utils'; import { PublicAlertsClient } from '@kbn/alerting-plugin/server/alerts_client/types'; +import { ALERT_REASON } from '@kbn/rule-data-utils'; import { syntheticsRuleFieldMap } from '../../common/rules/synthetics_rule_field_map'; import { combineFiltersAndUserSearch, stringifyKueries } from '../../common/lib'; import { @@ -298,6 +299,7 @@ export const setRecoveredAlertsContext = ({ linkMessage, ...(isUp ? { status: 'up' } : {}), ...(recoveryReason ? { [RECOVERY_REASON]: recoveryReason } : {}), + ...(recoveryReason ? { [ALERT_REASON]: recoveryReason } : {}), ...(basePath && spaceId && alertUuid ? { [ALERT_DETAILS_URL]: getAlertDetailsUrl(basePath, spaceId, alertUuid) } : {}), diff --git a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/status_rule_executor.ts b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/status_rule_executor.ts index 36ad8783f44ad..4d5ab04d6c10f 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/status_rule_executor.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/status_rule_executor.ts @@ -79,7 +79,7 @@ export class StatusRuleExecutor { monitorLocationMap, projectMonitorsCount, monitorQueryIdToConfigIdMap, - } = processMonitors(this.monitors, this.server, this.soClient, this.syntheticsMonitorClient); + } = processMonitors(this.monitors); return { enabledMonitorQueryIds, diff --git a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/tls_rule_executor.ts b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/tls_rule_executor.ts index 10c4ae24a1bf2..4c5766b34738f 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/tls_rule_executor.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/tls_rule_executor.ts @@ -74,7 +74,7 @@ export class TLSRuleExecutor { monitorLocationMap, projectMonitorsCount, monitorQueryIdToConfigIdMap, - } = processMonitors(this.monitors, this.server, this.soClient, this.syntheticsMonitorClient); + } = processMonitors(this.monitors); return { enabledMonitorQueryIds, diff --git a/x-pack/plugins/observability_solution/synthetics/server/queries/query_monitor_status.ts b/x-pack/plugins/observability_solution/synthetics/server/queries/query_monitor_status.ts index 4e2873ce77218..2bed9fdb5f643 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/queries/query_monitor_status.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/queries/query_monitor_status.ts @@ -201,7 +201,7 @@ export async function queryMonitorStatus( configId: `${monitorQueryIdToConfigIdMap[queryId]}`, monitorQueryId: queryId, status: 'unknown', - location: loc, + locationId: loc, }; }); } diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/certs/get_certificates.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/certs/get_certificates.ts index b6b6ad5aec85d..5d6fc1ab61ff3 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/certs/get_certificates.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/certs/get_certificates.ts @@ -34,13 +34,7 @@ export const getSyntheticsCertsRoute: SyntheticsRestApiRouteFactory< to: schema.maybe(schema.string()), }), }, - handler: async ({ - request, - syntheticsEsClient, - savedObjectsClient, - server, - syntheticsMonitorClient, - }) => { + handler: async ({ request, syntheticsEsClient, savedObjectsClient }) => { const queryParams = request.query; const monitors = await getAllMonitors({ @@ -57,12 +51,7 @@ export const getSyntheticsCertsRoute: SyntheticsRestApiRouteFactory< }; } - const { enabledMonitorQueryIds } = processMonitors( - monitors, - server, - savedObjectsClient, - syntheticsMonitorClient - ); + const { enabledMonitorQueryIds } = processMonitors(monitors); const data = await getSyntheticsCerts({ ...queryParams, diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/default_alerts/default_alert_service.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/default_alerts/default_alert_service.ts index 38606b4d2865f..eb94f095be177 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/default_alerts/default_alert_service.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/default_alerts/default_alert_service.ts @@ -7,6 +7,7 @@ import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; import { FindActionResult } from '@kbn/actions-plugin/server'; +import { DynamicSettingsAttributes } from '../../runtime_types/settings'; import { savedObjectsAdapter } from '../../saved_objects'; import { populateAlertActions } from '../../../common/rules/alert_actions'; import { @@ -19,12 +20,12 @@ import { SYNTHETICS_STATUS_RULE, SYNTHETICS_TLS_RULE, } from '../../../common/constants/synthetics_alerts'; - -type DefaultRuleType = typeof SYNTHETICS_STATUS_RULE | typeof SYNTHETICS_TLS_RULE; +import { DefaultRuleType } from '../../../common/types/default_alerts'; export class DefaultAlertService { context: UptimeRequestHandlerContext; soClient: SavedObjectsClientContract; server: SyntheticsServerSetup; + settings?: DynamicSettingsAttributes; constructor( context: UptimeRequestHandlerContext, @@ -36,7 +37,16 @@ export class DefaultAlertService { this.soClient = soClient; } + async getSettings() { + if (!this.settings) { + this.settings = await savedObjectsAdapter.getSyntheticsDynamicSettings(this.soClient); + } + return this.settings; + } + async setupDefaultAlerts() { + this.settings = await this.getSettings(); + const [statusRule, tlsRule] = await Promise.allSettled([ this.setupStatusRule(), this.setupTlsRule(), @@ -50,12 +60,15 @@ export class DefaultAlertService { } return { - statusRule: statusRule.status === 'fulfilled' ? statusRule.value : null, - tlsRule: tlsRule.status === 'fulfilled' ? tlsRule.value : null, + statusRule: statusRule.status === 'fulfilled' && statusRule.value ? statusRule.value : null, + tlsRule: tlsRule.status === 'fulfilled' && tlsRule.value ? tlsRule.value : null, }; } setupStatusRule() { + if (this.settings?.defaultStatusRuleEnabled === false) { + return; + } return this.createDefaultAlertIfNotExist( SYNTHETICS_STATUS_RULE, `Synthetics status internal rule`, @@ -64,6 +77,9 @@ export class DefaultAlertService { } setupTlsRule() { + if (this.settings?.defaultTLSRuleEnabled === false) { + return; + } return this.createDefaultAlertIfNotExist( SYNTHETICS_TLS_RULE, `Synthetics internal TLS rule`, @@ -78,7 +94,7 @@ export class DefaultAlertService { options: { page: 1, perPage: 1, - filter: `alert.attributes.alertTypeId:(${ruleType})`, + filter: `alert.attributes.alertTypeId:(${ruleType}) AND alert.attributes.tags:"SYNTHETICS_DEFAULT_ALERT"`, }, }); @@ -88,6 +104,7 @@ export class DefaultAlertService { const { actions = [], systemActions = [], ...alert } = data[0]; return { ...alert, actions: [...actions, ...systemActions], ruleTypeId: alert.alertTypeId }; } + async createDefaultAlertIfNotExist(ruleType: DefaultRuleType, name: string, interval: string) { const alert = await this.getExistingAlert(ruleType); if (alert) { @@ -121,11 +138,30 @@ export class DefaultAlertService { }; } - updateStatusRule() { - return this.updateDefaultAlert(SYNTHETICS_STATUS_RULE, `Synthetics status internal rule`, '1m'); + async updateStatusRule(enabled?: boolean) { + if (enabled) { + return this.updateDefaultAlert( + SYNTHETICS_STATUS_RULE, + `Synthetics status internal rule`, + '1m' + ); + } else { + const rulesClient = (await this.context.alerting)?.getRulesClient(); + await rulesClient.bulkDeleteRules({ + filter: `alert.attributes.alertTypeId:"${SYNTHETICS_STATUS_RULE}" AND alert.attributes.tags:"SYNTHETICS_DEFAULT_ALERT"`, + }); + } } - updateTlsRule() { - return this.updateDefaultAlert(SYNTHETICS_TLS_RULE, `Synthetics internal TLS rule`, '1m'); + + async updateTlsRule(enabled?: boolean) { + if (enabled) { + return this.updateDefaultAlert(SYNTHETICS_TLS_RULE, `Synthetics internal TLS rule`, '1m'); + } else { + const rulesClient = (await this.context.alerting)?.getRulesClient(); + await rulesClient.bulkDeleteRules({ + filter: `alert.attributes.alertTypeId:"${SYNTHETICS_TLS_RULE}" AND alert.attributes.tags:"SYNTHETICS_DEFAULT_ALERT"`, + }); + } } async updateDefaultAlert(ruleType: DefaultRuleType, name: string, interval: string) { @@ -195,14 +231,15 @@ export class DefaultAlertService { async getActionConnectors() { const actionsClient = (await this.context.actions)?.getActionsClient(); - - const settings = await savedObjectsAdapter.getSyntheticsDynamicSettings(this.soClient); + if (!this.settings) { + this.settings = await savedObjectsAdapter.getSyntheticsDynamicSettings(this.soClient); + } let actionConnectors: FindActionResult[] = []; try { actionConnectors = await actionsClient.getAll(); } catch (e) { this.server.logger.error(e); } - return { actionConnectors, settings }; + return { actionConnectors, settings: this.settings }; } } diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/default_alerts/enable_default_alert.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/default_alerts/enable_default_alert.ts index db403bd6bcd54..4a78ee67ddd1f 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/default_alerts/enable_default_alert.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/default_alerts/enable_default_alert.ts @@ -8,12 +8,13 @@ import { DefaultAlertService } from './default_alert_service'; import { SyntheticsRestApiRouteFactory } from '../types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; +import { DEFAULT_ALERT_RESPONSE } from '../../../common/types/default_alerts'; export const enableDefaultAlertingRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'POST', path: SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING, validate: {}, - handler: async ({ context, server, savedObjectsClient }): Promise => { + handler: async ({ context, server, savedObjectsClient }): Promise => { const defaultAlertService = new DefaultAlertService(context, server, savedObjectsClient); return defaultAlertService.setupDefaultAlerts(); diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/default_alerts/get_default_alert.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/default_alerts/get_default_alert.ts index 01d3891d96dbb..7437be6997803 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/default_alerts/get_default_alert.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/default_alerts/get_default_alert.ts @@ -12,19 +12,20 @@ import { import { DefaultAlertService } from './default_alert_service'; import { SyntheticsRestApiRouteFactory } from '../types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; +import { DEFAULT_ALERT_RESPONSE } from '../../../common/types/default_alerts'; export const getDefaultAlertingRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'GET', path: SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING, validate: {}, - handler: async ({ context, server, savedObjectsClient }): Promise => { + handler: async ({ context, server, savedObjectsClient }): Promise => { const defaultAlertService = new DefaultAlertService(context, server, savedObjectsClient); const statusRule = defaultAlertService.getExistingAlert(SYNTHETICS_STATUS_RULE); const tlsRule = defaultAlertService.getExistingAlert(SYNTHETICS_TLS_RULE); const [status, tls] = await Promise.all([statusRule, tlsRule]); return { - statusRule: status, - tlsRule: tls, + statusRule: status || null, + tlsRule: tls || null, }; }, }); diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/default_alerts/update_default_alert.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/default_alerts/update_default_alert.ts index bef006d02b87e..406eaef0aad14 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/default_alerts/update_default_alert.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/default_alerts/update_default_alert.ts @@ -8,21 +8,41 @@ import { DefaultAlertService } from './default_alert_service'; import { SyntheticsRestApiRouteFactory } from '../types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; +import { savedObjectsAdapter } from '../../saved_objects'; +import { DEFAULT_ALERT_RESPONSE } from '../../../common/types/default_alerts'; export const updateDefaultAlertingRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'PUT', path: SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING, validate: {}, - handler: async ({ context, server, savedObjectsClient }): Promise => { + handler: async ({ + request, + context, + server, + savedObjectsClient, + }): Promise => { const defaultAlertService = new DefaultAlertService(context, server, savedObjectsClient); + const { defaultTLSRuleEnabled, defaultStatusRuleEnabled } = + await savedObjectsAdapter.getSyntheticsDynamicSettings(savedObjectsClient); - const [statusRule, tlsRule] = await Promise.all([ - defaultAlertService.updateStatusRule(), - defaultAlertService.updateTlsRule(), - ]); - return { - statusRule, - tlsRule, - }; + const updateStatusRulePromise = defaultAlertService.updateStatusRule(defaultStatusRuleEnabled); + const updateTLSRulePromise = defaultAlertService.updateTlsRule(defaultTLSRuleEnabled); + + try { + const [statusRule, tlsRule] = await Promise.all([ + updateStatusRulePromise, + updateTLSRulePromise, + ]); + return { + statusRule: statusRule || null, + tlsRule: tlsRule || null, + }; + } catch (e) { + server.logger.error(`Error updating default alerting rules: ${e}`); + return { + statusRule: null, + tlsRule: null, + }; + } }, }); diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/overview_status/overview_status.test.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/overview_status/overview_status.test.ts index 33cf9746fb6e7..c850267245b22 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/overview_status/overview_status.test.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/overview_status/overview_status.test.ts @@ -593,25 +593,25 @@ describe('current status route', () => { pendingConfigs: { 'id3-Asia/Pacific - Japan': { configId: 'id3', - location: 'Asia/Pacific - Japan', + locationId: 'Asia/Pacific - Japan', monitorQueryId: 'project-monitor-id', status: 'unknown', }, 'id3-Europe - Germany': { configId: 'id3', - location: 'Europe - Germany', + locationId: 'Europe - Germany', monitorQueryId: 'project-monitor-id', status: 'unknown', }, 'id4-Asia/Pacific - Japan': { configId: 'id4', - location: 'Asia/Pacific - Japan', + locationId: 'Asia/Pacific - Japan', monitorQueryId: 'id4', status: 'unknown', }, 'id4-Europe - Germany': { configId: 'id4', - location: 'Europe - Germany', + locationId: 'Europe - Germany', monitorQueryId: 'id4', status: 'unknown', }, diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/overview_status/overview_status.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/overview_status/overview_status.ts index b6373758ac802..d114955fc9213 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/overview_status/overview_status.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/overview_status/overview_status.ts @@ -36,7 +36,7 @@ export function periodToMs(schedule: { number: string; unit: Unit }) { * @returns The counts of up/down/disabled monitor by location, and a map of each monitor:location status. */ export async function getStatus(context: RouteContext, params: OverviewStatusQuery) { - const { syntheticsEsClient, syntheticsMonitorClient, savedObjectsClient, server } = context; + const { syntheticsEsClient, savedObjectsClient } = context; const { query, scopeStatusByLocation = true } = params; @@ -77,13 +77,7 @@ export async function getStatus(context: RouteContext, params: OverviewStatusQue disabledMonitorsCount, projectMonitorsCount, monitorQueryIdToConfigIdMap, - } = processMonitors( - allMonitors, - server, - savedObjectsClient, - syntheticsMonitorClient, - queryLocations - ); + } = processMonitors(allMonitors, queryLocations); // Account for locations filter const listOfLocationAfterFilter = diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/settings/dynamic_settings.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/settings/dynamic_settings.ts index 07641ef826de3..e9b9bb6da931f 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/settings/dynamic_settings.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/settings/dynamic_settings.ts @@ -22,7 +22,7 @@ export const createGetDynamicSettingsRoute: SyntheticsRestApiRouteFactory< handler: async ({ savedObjectsClient }) => { const dynamicSettingsAttributes: DynamicSettingsAttributes = await savedObjectsAdapter.getSyntheticsDynamicSettings(savedObjectsClient); - return fromAttribute(dynamicSettingsAttributes); + return fromSettingsAttribute(dynamicSettingsAttributes); }, }); @@ -42,16 +42,20 @@ export const createPostDynamicSettingsRoute: SyntheticsRestApiRouteFactory = () ...newSettings, } as DynamicSettingsAttributes); - return fromAttribute(attr as DynamicSettingsAttributes); + return fromSettingsAttribute(attr as DynamicSettingsAttributes); }, }); -const fromAttribute = (attr: DynamicSettingsAttributes) => { +export const fromSettingsAttribute = ( + attr: DynamicSettingsAttributes +): DynamicSettingsAttributes => { return { certExpirationThreshold: attr.certExpirationThreshold, certAgeThreshold: attr.certAgeThreshold, defaultConnectors: attr.defaultConnectors, defaultEmail: attr.defaultEmail, + defaultStatusRuleEnabled: attr.defaultStatusRuleEnabled ?? true, + defaultTLSRuleEnabled: attr.defaultTLSRuleEnabled ?? true, }; }; @@ -72,6 +76,8 @@ export const DynamicSettingsSchema = schema.object({ certAgeThreshold: schema.maybe(schema.number({ min: 1, validate: validateInteger })), certExpirationThreshold: schema.maybe(schema.number({ min: 1, validate: validateInteger })), defaultConnectors: schema.maybe(schema.arrayOf(schema.string())), + defaultStatusRuleEnabled: schema.maybe(schema.boolean()), + defaultTLSRuleEnabled: schema.maybe(schema.boolean()), defaultEmail: schema.maybe( schema.object({ to: schema.arrayOf(schema.string()), diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/suggestions/route.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/suggestions/route.ts index 3a9c3b064bc0f..85ab73eb10a6e 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/suggestions/route.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/suggestions/route.ts @@ -5,7 +5,7 @@ * 2.0. */ import { SyntheticsRestApiRouteFactory } from '../types'; -import { syntheticsMonitorType } from '../../../common/types/saved_objects'; +import { monitorAttributes, syntheticsMonitorType } from '../../../common/types/saved_objects'; import { ConfigKey, MonitorFiltersResult, @@ -30,7 +30,7 @@ interface AggsResponse { projectsAggs: { buckets: Buckets; }; - monitorTypeAggs: { + monitorTypesAggs: { buckets: Buckets; }; monitorIdsAggs: { @@ -85,7 +85,7 @@ export const getSyntheticsSuggestionsRoute: SyntheticsRestApiRouteFactory< searchFields: SEARCH_FIELDS, }); - const { monitorTypeAggs, tagsAggs, locationsAggs, projectsAggs, monitorIdsAggs } = + const { monitorTypesAggs, tagsAggs, locationsAggs, projectsAggs, monitorIdsAggs } = (data?.aggregations as AggsResponse) ?? {}; const allLocationsMap = new Map(allLocations.map((obj) => [obj.id, obj.label])); @@ -114,7 +114,7 @@ export const getSyntheticsSuggestionsRoute: SyntheticsRestApiRouteFactory< count, })) ?? [], monitorTypes: - monitorTypeAggs?.buckets?.map(({ key, doc_count: count }) => ({ + monitorTypesAggs?.buckets?.map(({ key, doc_count: count }) => ({ label: key, value: key, count, @@ -129,35 +129,42 @@ export const getSyntheticsSuggestionsRoute: SyntheticsRestApiRouteFactory< const aggs = { tagsAggs: { terms: { - field: `${syntheticsMonitorType}.attributes.${ConfigKey.TAGS}`, + field: `${monitorAttributes}.${ConfigKey.TAGS}`, size: 10000, exclude: [''], }, }, monitorTypeAggs: { terms: { - field: `${syntheticsMonitorType}.attributes.${ConfigKey.MONITOR_TYPE}.keyword`, + field: `${monitorAttributes}.${ConfigKey.MONITOR_TYPE}.keyword`, size: 10000, exclude: [''], }, }, locationsAggs: { terms: { - field: `${syntheticsMonitorType}.attributes.${ConfigKey.LOCATIONS}.id`, + field: `${monitorAttributes}.${ConfigKey.LOCATIONS}.id`, size: 10000, exclude: [''], }, }, projectsAggs: { terms: { - field: `${syntheticsMonitorType}.attributes.${ConfigKey.PROJECT_ID}`, + field: `${monitorAttributes}.${ConfigKey.PROJECT_ID}`, + size: 10000, + exclude: [''], + }, + }, + monitorTypesAggs: { + terms: { + field: `${monitorAttributes}.${ConfigKey.MONITOR_TYPE}.keyword`, size: 10000, exclude: [''], }, }, monitorIdsAggs: { terms: { - field: `${syntheticsMonitorType}.attributes.${ConfigKey.MONITOR_QUERY_ID}`, + field: `${monitorAttributes}.${ConfigKey.MONITOR_QUERY_ID}`, size: 10000, exclude: [''], }, diff --git a/x-pack/plugins/observability_solution/synthetics/server/runtime_types/settings.ts b/x-pack/plugins/observability_solution/synthetics/server/runtime_types/settings.ts index 4aff410088683..def512e2f73a8 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/runtime_types/settings.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/runtime_types/settings.ts @@ -25,6 +25,8 @@ export const DynamicSettingsAttributesCodec = t.intersection([ }), t.partial({ defaultEmail: DefaultEmailCodec, + defaultStatusRuleEnabled: t.boolean, + defaultTLSRuleEnabled: t.boolean, }), ]); diff --git a/x-pack/plugins/observability_solution/synthetics/server/saved_objects/saved_objects.ts b/x-pack/plugins/observability_solution/synthetics/server/saved_objects/saved_objects.ts index 419661d832b1d..9b4a365941a7d 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/saved_objects/saved_objects.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/saved_objects/saved_objects.ts @@ -12,6 +12,7 @@ import { } from '@kbn/core/server'; import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server'; +import { fromSettingsAttribute } from '../routes/settings/dynamic_settings'; import { syntheticsSettings, syntheticsSettingsObjectId, @@ -62,7 +63,7 @@ export const savedObjectsAdapter = { syntheticsSettingsObjectType, syntheticsSettingsObjectId ); - return obj?.attributes ?? DYNAMIC_SETTINGS_DEFAULT_ATTRIBUTES; + return fromSettingsAttribute(obj?.attributes ?? DYNAMIC_SETTINGS_DEFAULT_ATTRIBUTES); } catch (getErr) { if (SavedObjectsErrorHelpers.isNotFoundError(getErr)) { // If the object doesn't exist, check to see if uptime settings exist diff --git a/x-pack/plugins/observability_solution/synthetics/server/saved_objects/synthetics_monitor/get_all_monitors.test.ts b/x-pack/plugins/observability_solution/synthetics/server/saved_objects/synthetics_monitor/get_all_monitors.test.ts index f17494bac5487..313063662f9d4 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/saved_objects/synthetics_monitor/get_all_monitors.test.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/saved_objects/synthetics_monitor/get_all_monitors.test.ts @@ -6,46 +6,11 @@ */ import { processMonitors } from './get_all_monitors'; -import { mockEncryptedSO } from '../../synthetics_service/utils/mocks'; -import { loggerMock } from '@kbn/logging-mocks'; -import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; -import { SyntheticsMonitorClient } from '../../synthetics_service/synthetics_monitor/synthetics_monitor_client'; -import { SyntheticsService } from '../../synthetics_service/synthetics_service'; import * as getLocations from '../../synthetics_service/get_all_locations'; -import { SyntheticsServerSetup } from '../../types'; describe('processMonitors', () => { - const mockEsClient = { - search: jest.fn(), - }; - const logger = loggerMock.create(); - const soClient = savedObjectsClientMock.create(); - - const serverMock: SyntheticsServerSetup = { - logger, - syntheticsEsClient: mockEsClient, - authSavedObjectsClient: soClient, - config: { - service: { - username: 'dev', - password: '12345', - manifestUrl: 'http://localhost:8080/api/manifest', - }, - }, - spaces: { - spacesService: { - getSpaceId: jest.fn().mockReturnValue('test-space'), - }, - }, - encryptedSavedObjects: mockEncryptedSO(), - } as unknown as SyntheticsServerSetup; - - const syntheticsService = new SyntheticsService(serverMock); - - const monitorClient = new SyntheticsMonitorClient(syntheticsService, serverMock); - it('should return a processed data', async () => { - const result = processMonitors(testMonitors, serverMock, soClient, monitorClient); + const result = processMonitors(testMonitors); expect(result).toEqual({ allIds: [ 'aa925d91-40b0-4f8f-b695-bb9b53cd4e22', @@ -81,7 +46,7 @@ describe('processMonitors', () => { it('should return a processed data where location label is missing', async () => { testMonitors[0].attributes.locations[0].label = undefined; - const result = processMonitors(testMonitors, serverMock, soClient, monitorClient); + const result = processMonitors(testMonitors); expect(result).toEqual({ allIds: [ 'aa925d91-40b0-4f8f-b695-bb9b53cd4e22', @@ -155,7 +120,7 @@ describe('processMonitors', () => { ) ); - const result = processMonitors(testMonitors, serverMock, soClient, monitorClient); + const result = processMonitors(testMonitors); expect(result).toEqual({ allIds: [ 'aa925d91-40b0-4f8f-b695-bb9b53cd4e22', diff --git a/x-pack/plugins/observability_solution/synthetics/server/saved_objects/synthetics_monitor/get_all_monitors.ts b/x-pack/plugins/observability_solution/synthetics/server/saved_objects/synthetics_monitor/get_all_monitors.ts index c742bf26176ad..e19bc529695ae 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/saved_objects/synthetics_monitor/get_all_monitors.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/saved_objects/synthetics_monitor/get_all_monitors.ts @@ -11,7 +11,6 @@ import { SavedObjectsFindResult, } from '@kbn/core-saved-objects-api-server'; import { intersection } from 'lodash'; -import { SyntheticsServerSetup } from '../../types'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; import { periodToMs } from '../../routes/overview_status/overview_status'; import { @@ -19,7 +18,6 @@ import { EncryptedSyntheticsMonitorAttributes, SourceType, } from '../../../common/runtime_types'; -import { SyntheticsMonitorClient } from '../../synthetics_service/synthetics_monitor/synthetics_monitor_client'; export const getAllMonitors = async ({ soClient, @@ -57,9 +55,6 @@ export const getAllMonitors = async ({ export const processMonitors = ( allMonitors: Array>, - server: SyntheticsServerSetup, - soClient: SavedObjectsClientContract, - syntheticsMonitorClient: SyntheticsMonitorClient, queryLocations?: string[] | string ) => { /** diff --git a/x-pack/plugins/observability_solution/synthetics/server/types.ts b/x-pack/plugins/observability_solution/synthetics/server/types.ts index 6209055fc6778..2e1fac95023b9 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/types.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/types.ts @@ -17,6 +17,7 @@ import { Logger, SavedObjectsClientContract, } from '@kbn/core/server'; +import { PluginStartContract as AlertingPluginStart } from '@kbn/alerting-plugin/server'; import { SharePluginSetup } from '@kbn/share-plugin/server'; import { ObservabilityPluginSetup } from '@kbn/observability-plugin/server'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; @@ -85,6 +86,7 @@ export interface SyntheticsPluginsStartDependencies { taskManager: TaskManagerStartContract; telemetry: TelemetryPluginStart; spaces?: SpacesPluginStart; + alerting: AlertingPluginStart; } export type UptimeRequestHandlerContext = CustomRequestHandlerContext<{ diff --git a/x-pack/plugins/observability_solution/uptime/tsconfig.json b/x-pack/plugins/observability_solution/uptime/tsconfig.json index 041ff7a84a4fb..f797a5a7f930d 100644 --- a/x-pack/plugins/observability_solution/uptime/tsconfig.json +++ b/x-pack/plugins/observability_solution/uptime/tsconfig.json @@ -77,7 +77,7 @@ "@kbn/react-kibana-context-render", "@kbn/react-kibana-context-theme", "@kbn/react-kibana-mount", - "@kbn/deeplinks-observability" + "@kbn/deeplinks-observability", ], "exclude": ["target/**/*"] } diff --git a/x-pack/test/api_integration/apis/synthetics/enable_default_alerting.ts b/x-pack/test/api_integration/apis/synthetics/enable_default_alerting.ts index dd4db37f4adc3..0064ef490bb75 100644 --- a/x-pack/test/api_integration/apis/synthetics/enable_default_alerting.ts +++ b/x-pack/test/api_integration/apis/synthetics/enable_default_alerting.ts @@ -8,6 +8,7 @@ import expect from '@kbn/expect'; import { omit } from 'lodash'; import { HTTPFields } from '@kbn/synthetics-plugin/common/runtime_types'; import { SYNTHETICS_API_URLS } from '@kbn/synthetics-plugin/common/constants'; +import { DYNAMIC_SETTINGS_DEFAULTS } from '@kbn/synthetics-plugin/common/constants/settings_defaults'; import { FtrProviderContext } from '../../ftr_provider_context'; import { getFixtureJson } from './helper/get_fixture_json'; @@ -41,13 +42,19 @@ export default function ({ getService }: FtrProviderContext) { beforeEach(async () => { httpMonitorJson = _httpMonitorJson; await kibanaServer.savedObjects.cleanStandardList(); + await supertest + .put(SYNTHETICS_API_URLS.DYNAMIC_SETTINGS) + .set('kbn-xsrf', 'true') + .send(DYNAMIC_SETTINGS_DEFAULTS) + .expect(200); }); it('returns the created alerted when called', async () => { const apiResponse = await supertest .post(SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING) .set('kbn-xsrf', 'true') - .send({}); + .send() + .expect(200); const omitFields = [ 'id', @@ -76,6 +83,96 @@ export default function ({ getService }: FtrProviderContext) { expect(apiResponse).eql(omitMonitorKeys(newMonitor)); + await retry.tryForTime(30 * 1000, async () => { + const res = await supertest + .get(SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING) + .set('kbn-xsrf', 'true') + .expect(200); + + expect(res.body.statusRule.ruleTypeId).eql('xpack.synthetics.alerts.monitorStatus'); + expect(res.body.tlsRule.ruleTypeId).eql('xpack.synthetics.alerts.tls'); + }); + }); + + it('deletes (and recreates) the default rule when settings are updated', async () => { + const newMonitor = httpMonitorJson; + + const { body: apiResponse } = await addMonitorAPI(newMonitor); + + expect(apiResponse).eql(omitMonitorKeys(newMonitor)); + + await retry.tryForTime(30 * 1000, async () => { + const res = await supertest + .get(SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING) + .set('kbn-xsrf', 'true') + .expect(200); + + expect(res.body.statusRule.ruleTypeId).eql('xpack.synthetics.alerts.monitorStatus'); + expect(res.body.tlsRule.ruleTypeId).eql('xpack.synthetics.alerts.tls'); + }); + const settings = await supertest + .put(SYNTHETICS_API_URLS.DYNAMIC_SETTINGS) + .set('kbn-xsrf', 'true') + .send({ + defaultStatusRuleEnabled: false, + defaultTLSRuleEnabled: false, + }); + + expect(settings.body.defaultStatusRuleEnabled).eql(false); + expect(settings.body.defaultTLSRuleEnabled).eql(false); + + await supertest + .put(SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING) + .set('kbn-xsrf', 'true') + .send() + .expect(200); + + await retry.tryForTime(30 * 1000, async () => { + const res = await supertest + .get(SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING) + .set('kbn-xsrf', 'true') + .expect(200); + + expect(res.body.statusRule).eql(null); + expect(res.body.tlsRule).eql(null); + }); + + const settings2 = await supertest + .put(SYNTHETICS_API_URLS.DYNAMIC_SETTINGS) + .set('kbn-xsrf', 'true') + .send({ + defaultStatusRuleEnabled: true, + defaultTLSRuleEnabled: true, + }) + .expect(200); + + expect(settings2.body.defaultStatusRuleEnabled).eql(true); + expect(settings2.body.defaultTLSRuleEnabled).eql(true); + + await supertest + .put(SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING) + .set('kbn-xsrf', 'true') + .send() + .expect(200); + + await retry.tryForTime(30 * 1000, async () => { + const res = await supertest + .get(SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING) + .set('kbn-xsrf', 'true') + .expect(200); + + expect(res.body.statusRule.ruleTypeId).eql('xpack.synthetics.alerts.monitorStatus'); + expect(res.body.tlsRule.ruleTypeId).eql('xpack.synthetics.alerts.tls'); + }); + }); + + it('doesnt throw errors when rule has already been deleted', async () => { + const newMonitor = httpMonitorJson; + + const { body: apiResponse } = await addMonitorAPI(newMonitor); + + expect(apiResponse).eql(omitMonitorKeys(newMonitor)); + await retry.tryForTime(30 * 1000, async () => { const res = await supertest .get(SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING) @@ -84,6 +181,49 @@ export default function ({ getService }: FtrProviderContext) { expect(res.body.statusRule.ruleTypeId).eql('xpack.synthetics.alerts.monitorStatus'); expect(res.body.tlsRule.ruleTypeId).eql('xpack.synthetics.alerts.tls'); }); + + const settings = await supertest + .put(SYNTHETICS_API_URLS.DYNAMIC_SETTINGS) + .set('kbn-xsrf', 'true') + .send({ + defaultStatusRuleEnabled: false, + defaultTLSRuleEnabled: false, + }); + + expect(settings.body.defaultStatusRuleEnabled).eql(false); + expect(settings.body.defaultTLSRuleEnabled).eql(false); + + await supertest + .put(SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING) + .set('kbn-xsrf', 'true') + .send(); + + await retry.tryForTime(30 * 1000, async () => { + const res = await supertest + .get(SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING) + .set('kbn-xsrf', 'true') + .expect(200); + + expect(res.body.statusRule).eql(null); + expect(res.body.tlsRule).eql(null); + }); + + // call api again with the same settings, make sure its 200 + await supertest + .put(SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING) + .set('kbn-xsrf', 'true') + .send() + .expect(200); + + await retry.tryForTime(30 * 1000, async () => { + const res = await supertest + .get(SYNTHETICS_API_URLS.ENABLE_DEFAULT_ALERTING) + .set('kbn-xsrf', 'true') + .expect(200); + + expect(res.body.statusRule).eql(null); + expect(res.body.tlsRule).eql(null); + }); }); }); } From df5810f146c2c7f7542fef92b69669c9d6feda41 Mon Sep 17 00:00:00 2001 From: Maxim Kholod Date: Thu, 22 Aug 2024 17:38:03 +0200 Subject: [PATCH 23/59] [Cloud Security] fix 'show 1 alerts' bug (#191062) ## Summary Using plural from `react-intl` in the Session View for `Show N alerts` text - part of https://github.com/elastic/security-team/issues/10316 - fixes https://github.com/elastic/kibana/issues/189880 --- .../process_tree_alerts_filter/index.test.tsx | 13 +++++++++++++ .../components/process_tree_alerts_filter/index.tsx | 5 +++-- 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 - 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/session_view/public/components/process_tree_alerts_filter/index.test.tsx b/x-pack/plugins/session_view/public/components/process_tree_alerts_filter/index.test.tsx index 45ced9a4b7c18..cb26c2ecd03a3 100644 --- a/x-pack/plugins/session_view/public/components/process_tree_alerts_filter/index.test.tsx +++ b/x-pack/plugins/session_view/public/components/process_tree_alerts_filter/index.test.tsx @@ -53,6 +53,19 @@ describe('ProcessTreeAlertsFiltersFilter component', () => { expect(filterCountStatus).toBeTruthy(); }); + it('should show pluralise correctly', async () => { + renderResult = mockedContext.render( + + ); + + const filterCountStatus = renderResult.queryByTestId( + 'sessionView:sessionViewAlertDetailsFilterStatus' + ); + + expect(filterCountStatus).toHaveTextContent('Showing 1 alert'); + expect(filterCountStatus).toBeTruthy(); + }); + it('should call onAlertEventCategorySelected with alert category when filter item is clicked ', () => { const mockAlertEventCategorySelectedEvent = jest.fn(); renderResult = mockedContext.render( diff --git a/x-pack/plugins/session_view/public/components/process_tree_alerts_filter/index.tsx b/x-pack/plugins/session_view/public/components/process_tree_alerts_filter/index.tsx index cf2af552671cd..a52fcc09cc4ea 100644 --- a/x-pack/plugins/session_view/public/components/process_tree_alerts_filter/index.tsx +++ b/x-pack/plugins/session_view/public/components/process_tree_alerts_filter/index.tsx @@ -124,9 +124,10 @@ export const ProcessTreeAlertsFilter = ({ {totalAlertsCount === filteredAlertsCount && ( {totalAlertsCount}, + count: totalAlertsCount, + bold: (str: string) => {str}, }} /> )} diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 1ed13e47986fb..76b4aa11baf89 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -41491,7 +41491,6 @@ "xpack.sessionView.alertFilteredCountStatusLabel": " Affichage de {count} alertes", "xpack.sessionView.alerts": "Alertes", "xpack.sessionView.alertsLoadMoreButton": "Charger plus d'alertes", - "xpack.sessionView.alertTotalCountStatusLabel": "Affichage de {count} alertes", "xpack.sessionView.backToInvestigatedAlert": "Retour à l'alerte examinée", "xpack.sessionView.blockedBadge": "Bloqué", "xpack.sessionView.childProcesses": "Processus enfants", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index b4224908c64a5..172efd4a34334 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -41475,7 +41475,6 @@ "xpack.sessionView.alertFilteredCountStatusLabel": " {count}件のアラートを表示しています", "xpack.sessionView.alerts": "アラート", "xpack.sessionView.alertsLoadMoreButton": "その他のアラートを読み込む", - "xpack.sessionView.alertTotalCountStatusLabel": "{count}件のアラートを表示しています", "xpack.sessionView.backToInvestigatedAlert": "調査されたアラートに戻る", "xpack.sessionView.blockedBadge": "ブロック", "xpack.sessionView.childProcesses": "子プロセス", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 78ff3faf194f1..cac113f4f420e 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -41518,7 +41518,6 @@ "xpack.sessionView.alertFilteredCountStatusLabel": " 正在显示 {count} 个告警", "xpack.sessionView.alerts": "告警", "xpack.sessionView.alertsLoadMoreButton": "加载更多告警", - "xpack.sessionView.alertTotalCountStatusLabel": "正在显示 {count} 个告警", "xpack.sessionView.backToInvestigatedAlert": "返回到已调查告警", "xpack.sessionView.blockedBadge": "已阻止", "xpack.sessionView.childProcesses": "子进程", From 801c17f6d6020dd045d12efc3e7e67dd2a99d94d Mon Sep 17 00:00:00 2001 From: Maxim Kholod Date: Thu, 22 Aug 2024 17:38:25 +0200 Subject: [PATCH 24/59] [Cloud Security] fix responsiveness on the Benchmark Rules page (#191080) ## Summary It ain't much but it's honest work - fixes https://github.com/elastic/kibana/issues/181641 - part pf https://github.com/elastic/security-team/issues/10316 ## Screencast tbh before is not as bad as in the linked ticket, so we can also leave it as it is until we do responsiveness on this page properly. before [screencast-localhost_5601-2024.08.22-15_14_34.webm](https://github.com/user-attachments/assets/4f119203-6a91-4a52-9514-3489789649ce) after [screencast-localhost_5601-2024.08.22-15_05_32.webm](https://github.com/user-attachments/assets/36276e71-8d2d-4095-b2b6-e5524f6d0692) --- .../public/pages/rules/rules_counters.tsx | 2 +- .../public/pages/rules/rules_table_header.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_counters.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_counters.tsx index ec8d4a653c222..dc8de41c0bf7b 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_counters.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_counters.tsx @@ -272,7 +272,7 @@ export const RulesCounters = ({ ]; return ( - + {counters.map((counter) => ( diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx index 116bae053fd32..3350dc26156d5 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx @@ -106,7 +106,7 @@ export const RulesTableHeader = ({ return ( - + From d673743aa422a079e75fd041513abfe3e0059074 Mon Sep 17 00:00:00 2001 From: Yara Tercero Date: Thu, 22 Aug 2024 11:54:12 -0400 Subject: [PATCH 25/59] [Detection Engine] update alert assignment to disable unassign action if no assignees exist (#190937) ## Summary Addresses https://github.com/elastic/kibana/issues/177864 Disables the unassign alert action if no assignees exist. --- .../use_bulk_alert_assignees_items.test.tsx | 61 +++++++++++++++++++ .../use_bulk_alert_assignees_items.tsx | 7 ++- .../use_alert_assignees_actions.tsx | 11 +++- 3 files changed, 76 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/security_solution/public/common/components/toolbar/bulk_actions/use_bulk_alert_assignees_items.test.tsx b/x-pack/plugins/security_solution/public/common/components/toolbar/bulk_actions/use_bulk_alert_assignees_items.test.tsx index f3269fceb2a64..82e9b062d9a7d 100644 --- a/x-pack/plugins/security_solution/public/common/components/toolbar/bulk_actions/use_bulk_alert_assignees_items.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/toolbar/bulk_actions/use_bulk_alert_assignees_items.test.tsx @@ -39,6 +39,7 @@ const mockUserProfiles = [ const defaultProps: UseBulkAlertAssigneesItemsProps = { onAssigneesUpdate: () => {}, + alertAssignments: [], }; const mockAssigneeItems = [ @@ -170,6 +171,66 @@ describe('useBulkAlertAssigneesItems', () => { ); }); + it('should set unnasign alert action to disabled if no assignees exist', () => { + const mockSetAlertAssignees = jest.fn(); + (useSetAlertAssignees as jest.Mock).mockReturnValue(mockSetAlertAssignees); + const { result } = renderHook( + () => + useBulkAlertAssigneesItems({ + onAssigneesUpdate: () => {}, + alertAssignments: [], + }), + { + wrapper: TestProviders, + } + ); + + expect( + ( + result.current.alertAssigneesItems[0] as unknown as { + disable: boolean; + } + ).disable + ).toBeFalsy(); + expect( + ( + result.current.alertAssigneesItems[1] as unknown as { + disable: boolean; + } + ).disable + ).toBeTruthy(); + }); + + it('should set unnasign alert action to enabled if assignees exist', () => { + const mockSetAlertAssignees = jest.fn(); + (useSetAlertAssignees as jest.Mock).mockReturnValue(mockSetAlertAssignees); + const { result } = renderHook( + () => + useBulkAlertAssigneesItems({ + onAssigneesUpdate: () => {}, + alertAssignments: ['user1'], + }), + { + wrapper: TestProviders, + } + ); + + expect( + ( + result.current.alertAssigneesItems[0] as unknown as { + disable: boolean; + } + ).disable + ).toBeFalsy(); + expect( + ( + result.current.alertAssigneesItems[1] as unknown as { + disable: boolean; + } + ).disable + ).toBeFalsy(); + }); + it('should return 0 items for the VIEWER role', () => { (useAlertsPrivileges as jest.Mock).mockReturnValue({ hasIndexWrite: false }); diff --git a/x-pack/plugins/security_solution/public/common/components/toolbar/bulk_actions/use_bulk_alert_assignees_items.tsx b/x-pack/plugins/security_solution/public/common/components/toolbar/bulk_actions/use_bulk_alert_assignees_items.tsx index 6e9c4cc0c871b..4c25665afa5ca 100644 --- a/x-pack/plugins/security_solution/public/common/components/toolbar/bulk_actions/use_bulk_alert_assignees_items.tsx +++ b/x-pack/plugins/security_solution/public/common/components/toolbar/bulk_actions/use_bulk_alert_assignees_items.tsx @@ -15,6 +15,7 @@ import type { RenderContentPanelProps, } from '@kbn/triggers-actions-ui-plugin/public/types'; +import { isEmpty } from 'lodash/fp'; import { useLicense } from '../../../hooks/use_license'; import { useAlertsPrivileges } from '../../../../detections/containers/detection_engine/alerts/use_alerts_privileges'; import { ASSIGNEES_PANEL_WIDTH } from '../../assignees/constants'; @@ -24,6 +25,7 @@ import { useSetAlertAssignees } from './use_set_alert_assignees'; export interface UseBulkAlertAssigneesItemsProps { onAssigneesUpdate?: () => void; + alertAssignments?: string[]; } export interface UseBulkAlertAssigneesPanel { @@ -36,6 +38,7 @@ export interface UseBulkAlertAssigneesPanel { export const useBulkAlertAssigneesItems = ({ onAssigneesUpdate, + alertAssignments, }: UseBulkAlertAssigneesItemsProps) => { const isPlatinumPlus = useLicense().isPlatinumPlus(); @@ -89,6 +92,7 @@ export const useBulkAlertAssigneesItems = ({ panel: 2, label: i18n.ALERT_ASSIGNEES_CONTEXT_MENU_ITEM_TITLE, disableOnQuery: true, + disable: false, }, { key: 'remove-all-alert-assignees', @@ -97,10 +101,11 @@ export const useBulkAlertAssigneesItems = ({ label: i18n.REMOVE_ALERT_ASSIGNEES_CONTEXT_MENU_TITLE, disableOnQuery: true, onClick: onRemoveAllAssignees, + disable: alertAssignments ? isEmpty(alertAssignments) : false, }, ] : [], - [hasIndexWrite, isPlatinumPlus, onRemoveAllAssignees] + [alertAssignments, hasIndexWrite, isPlatinumPlus, onRemoveAllAssignees] ); const TitleContent = useMemo( diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_alert_assignees_actions.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_alert_assignees_actions.tsx index ff7e64a5e4dc8..84d9f8b5ca5db 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_alert_assignees_actions.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_alert_assignees_actions.tsx @@ -31,6 +31,11 @@ export const useAlertAssigneesActions = ({ const { hasIndexWrite } = useAlertsPrivileges(); const alertId = ecsRowData._id; + const alertAssignments = useMemo( + () => ecsRowData?.kibana?.alert.workflow_assignee_ids ?? [], + [ecsRowData?.kibana?.alert.workflow_assignee_ids] + ); + const alertAssigneeData = useMemo(() => { return [ { @@ -39,7 +44,7 @@ export const useAlertAssigneesActions = ({ data: [ { field: ALERT_WORKFLOW_ASSIGNEE_IDS, - value: ecsRowData?.kibana?.alert.workflow_assignee_ids ?? [], + value: alertAssignments, }, ], ecs: { @@ -48,7 +53,7 @@ export const useAlertAssigneesActions = ({ }, }, ]; - }, [alertId, ecsRowData._index, ecsRowData?.kibana?.alert.workflow_assignee_ids]); + }, [alertId, ecsRowData._index, alertAssignments]); const onAssigneesUpdate = useCallback(() => { closePopover(); @@ -59,6 +64,7 @@ export const useAlertAssigneesActions = ({ const { alertAssigneesItems, alertAssigneesPanels } = useBulkAlertAssigneesItems({ onAssigneesUpdate, + alertAssignments, }); const itemsToReturn: AlertTableContextMenuItem[] = useMemo( @@ -69,6 +75,7 @@ export const useAlertAssigneesActions = ({ 'data-test-subj': item['data-test-subj'], key: item.key, onClick: () => item.onClick?.(alertAssigneeData, false, noop, noop, noop), + disabled: item.disable, })), [alertAssigneeData, alertAssigneesItems] ); From 2d80214cf0729962a687db66676ddde2379ab560 Mon Sep 17 00:00:00 2001 From: Kerry Gallagher Date: Thu, 22 Aug 2024 17:00:53 +0100 Subject: [PATCH 26/59] [Logs] Use central log sources setting in Logs Explorer as the default data source (#190438) ## Summary Implements https://github.com/elastic/logs-dev/issues/169. This uses the new central log sources setting as the default data source in the Logs Explorer. The `AllSelection` is now amended to use a set of indices, this `AllSelection` can be defined by the consumer (or falls back to a default). In the case of the Observability Logs Explorer this value is resolved from the setting and used as the `AllSelection` passed to the Logs Explorer controller. --- .../all_dataset_selection.ts | 19 ++++++++++----- .../hydrate_data_source_selection.ts | 7 ++++-- .../common/datasets/models/dataset.ts | 4 ++-- .../data_source_selector.stories.tsx | 2 +- .../data_source_selector.tsx | 7 +++++- .../state_machine/defaults.ts | 5 ++-- .../state_machine/state_machine.ts | 3 +-- .../state_machine/types.ts | 2 ++ .../sub_components/selector_footer.tsx | 6 +++-- .../components/data_source_selector/types.ts | 3 +++ .../components/data_source_selector/utils.tsx | 10 ++++---- .../public/controller/create_controller.ts | 16 +++++++++---- .../public/controller/public_state.ts | 6 +++-- .../custom_data_source_selector.tsx | 6 ++--- .../public/hooks/use_data_source_selection.ts | 5 +++- .../logs_explorer/public/index.ts | 1 + .../src/default_all_selection.ts | 10 ++++++++ .../logs_explorer_controller/src/defaults.ts | 5 ++-- .../logs_explorer_controller/src/index.ts | 1 + .../src/state_machine.ts | 3 +-- .../logs_explorer_controller/src/types.ts | 22 ++++++++++++++++- .../common/locators/all_datasets_locator.ts | 4 ++-- .../observability_logs_explorer/kibana.jsonc | 3 ++- .../public/components/alerts_popover.tsx | 6 +++-- .../public/components/discover_link.tsx | 8 +++---- .../public/routes/main/main_route.tsx | 14 +++++++++-- .../src/all_selection_service.ts | 23 ++++++++++++++++++ .../src/controller_service.ts | 2 +- .../src/defaults.ts | 2 ++ .../src/state_machine.ts | 24 ++++++++++++++++++- .../observability_logs_explorer/src/types.ts | 6 ++++- .../public/types.ts | 2 ++ .../observability_logs_explorer/tsconfig.json | 1 + 33 files changed, 186 insertions(+), 52 deletions(-) create mode 100644 x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/default_all_selection.ts create mode 100644 x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/all_selection_service.ts diff --git a/x-pack/plugins/observability_solution/logs_explorer/common/data_source_selection/all_dataset_selection.ts b/x-pack/plugins/observability_solution/logs_explorer/common/data_source_selection/all_dataset_selection.ts index 7c5631345eec6..1145f035b86b6 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/common/data_source_selection/all_dataset_selection.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/common/data_source_selection/all_dataset_selection.ts @@ -8,16 +8,18 @@ import { Dataset } from '../datasets'; import { DataSourceSelectionStrategy } from './types'; +const SELECTION_TYPE = 'all' as const; + export class AllDatasetSelection implements DataSourceSelectionStrategy { - selectionType: 'all'; + selectionType: typeof SELECTION_TYPE; selection: { dataset: Dataset; }; - private constructor() { - this.selectionType = 'all'; + private constructor({ indices }: { indices: string }) { + this.selectionType = SELECTION_TYPE; this.selection = { - dataset: Dataset.createAllLogsDataset(), + dataset: Dataset.createAllLogsDataset({ indices }), }; } @@ -30,8 +32,13 @@ export class AllDatasetSelection implements DataSourceSelectionStrategy { selectionType: this.selectionType, }; } + public static getLocatorPlainSelection() { + return { + selectionType: SELECTION_TYPE, + }; + } - public static create() { - return new AllDatasetSelection(); + public static create({ indices }: { indices: string }) { + return new AllDatasetSelection({ indices }); } } diff --git a/x-pack/plugins/observability_solution/logs_explorer/common/data_source_selection/hydrate_data_source_selection.ts b/x-pack/plugins/observability_solution/logs_explorer/common/data_source_selection/hydrate_data_source_selection.ts index ffc5cacd4045c..a91ebd91fc765 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/common/data_source_selection/hydrate_data_source_selection.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/common/data_source_selection/hydrate_data_source_selection.ts @@ -11,9 +11,12 @@ import { SingleDatasetSelection } from './single_dataset_selection'; import { DataSourceSelectionPlain } from './types'; import { UnresolvedDatasetSelection } from './unresolved_dataset_selection'; -export const hydrateDataSourceSelection = (dataSourceSelection: DataSourceSelectionPlain) => { +export const hydrateDataSourceSelection = ( + dataSourceSelection: DataSourceSelectionPlain, + allSelection: AllDatasetSelection +) => { if (dataSourceSelection.selectionType === 'all') { - return AllDatasetSelection.create(); + return allSelection; } else if (dataSourceSelection.selectionType === 'single') { return SingleDatasetSelection.fromSelection(dataSourceSelection.selection); } else if (dataSourceSelection.selectionType === 'dataView') { diff --git a/x-pack/plugins/observability_solution/logs_explorer/common/datasets/models/dataset.ts b/x-pack/plugins/observability_solution/logs_explorer/common/datasets/models/dataset.ts index 3f279d83af64c..7b832bea85be2 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/common/datasets/models/dataset.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/common/datasets/models/dataset.ts @@ -72,9 +72,9 @@ export class Dataset { return new Dataset({ ...dataset, title: datasetTitle }, parentIntegration); } - public static createAllLogsDataset() { + public static createAllLogsDataset({ indices }: { indices: string }) { return new Dataset({ - name: 'logs-*-*' as IndexPattern, + name: indices as IndexPattern, title: 'All logs', iconType: 'pagesSelect', }); diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/data_source_selector.stories.tsx b/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/data_source_selector.stories.tsx index f5eb74955ef10..dc9ab10d22c3f 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/data_source_selector.stories.tsx +++ b/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/data_source_selector.stories.tsx @@ -64,7 +64,7 @@ const KibanaReactContext = createKibanaReactContext(coreMock); const DataSourceSelectorTemplate: Story = (args) => { const [dataSourceSelection, setDataSourceSelection] = useState(() => - AllDatasetSelection.create() + AllDatasetSelection.create({ indices: 'logs-*-*' }) ); const [search, setSearch] = useState({ diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/data_source_selector.tsx b/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/data_source_selector.tsx index 6cd080913c2e4..76eb4ab3b33eb 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/data_source_selector.tsx +++ b/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/data_source_selector.tsx @@ -40,6 +40,7 @@ import { DataViewsFilter } from './sub_components/data_view_filter'; export function DataSourceSelector({ datasets, dataSourceSelection, + allSelection, datasetsError, dataViews, dataViewCount, @@ -307,7 +308,11 @@ export function DataSourceSelector({ /> - + {isEsqlEnabled && } diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/state_machine/defaults.ts b/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/state_machine/defaults.ts index 683ac55dabc8f..a3de2c8edf69f 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/state_machine/defaults.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/state_machine/defaults.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { AllDatasetSelection } from '../../../../common/data_source_selection'; +import { DEFAULT_ALL_SELECTION } from '../../../state_machines/logs_explorer_controller'; import { HashedCache } from '../../../../common/hashed_cache'; import { INTEGRATIONS_PANEL_ID, INTEGRATIONS_TAB_ID } from '../constants'; import { DataSourceSelectorSearchParams } from '../types'; @@ -17,7 +17,8 @@ export const defaultSearch: DataSourceSelectorSearchParams = { }; export const DEFAULT_CONTEXT: DefaultDataSourceSelectorContext = { - selection: AllDatasetSelection.create(), + selection: DEFAULT_ALL_SELECTION, + allSelection: DEFAULT_ALL_SELECTION, searchCache: new HashedCache(), panelId: INTEGRATIONS_PANEL_ID, tabId: INTEGRATIONS_TAB_ID, diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/state_machine/state_machine.ts b/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/state_machine/state_machine.ts index 7fd26c7529baf..b68ceddf20c69 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/state_machine/state_machine.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/state_machine/state_machine.ts @@ -7,7 +7,6 @@ import { actions, assign, createMachine, raise } from 'xstate'; import { - AllDatasetSelection, DataViewSelection, isAllDatasetSelection, isDataViewSelection, @@ -233,7 +232,7 @@ export const createPureDataSourceSelectorStateMachine = ( return {}; }), storeAllSelection: assign((_context) => ({ - selection: AllDatasetSelection.create(), + selection: _context.allSelection, })), storeSingleSelection: assign((_context, event) => event.type === 'SELECT_DATASET' diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/state_machine/types.ts b/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/state_machine/types.ts index 49d0ebe698e02..1b6b4ecdb9b9a 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/state_machine/types.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/state_machine/types.ts @@ -7,6 +7,7 @@ import { DataViewDescriptor } from '../../../../common/data_views/models/data_view_descriptor'; import { FilterDataViews, SearchDataViews } from '../../../hooks/use_data_views'; import { + AllDatasetSelection, DataSourceSelection, DataSourceSelectionChangeHandler, } from '../../../../common/data_source_selection'; @@ -23,6 +24,7 @@ import { DataViewsFilterParams } from '../../../state_machines/data_views'; export interface DefaultDataSourceSelectorContext { selection: DataSourceSelection; + allSelection: AllDatasetSelection; tabId: TabId; panelId: PanelId; searchCache: IHashedCache; diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/sub_components/selector_footer.tsx b/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/sub_components/selector_footer.tsx index 7c92fa8f28bb3..fd1ae95770506 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/sub_components/selector_footer.tsx +++ b/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/sub_components/selector_footer.tsx @@ -15,6 +15,7 @@ import { EuiFlexGroupProps, } from '@elastic/eui'; import { getRouterLinkProps } from '@kbn/router-utils'; +import { AllDatasetSelection } from '../../../../common'; import { DiscoverEsqlUrlProps } from '../../../hooks/use_esql'; import { createAllLogsItem } from '../utils'; import { showAllLogsLabel, tryEsql } from '../constants'; @@ -22,6 +23,7 @@ import { showAllLogsLabel, tryEsql } from '../constants'; interface ShowAllLogsProps { isSelected: boolean; onClick(): void; + allSelection: AllDatasetSelection; } export const SelectorFooter = (props: EuiFlexGroupProps) => { @@ -32,8 +34,8 @@ export const SelectorFooter = (props: EuiFlexGroupProps) => { ); }; -export const ShowAllLogsButton = ({ isSelected, onClick }: ShowAllLogsProps) => { - const allLogs = createAllLogsItem(); +export const ShowAllLogsButton = ({ isSelected, onClick, allSelection }: ShowAllLogsProps) => { + const allLogs = createAllLogsItem(allSelection); return ( diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/types.ts b/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/types.ts index 37d43cb50a478..29cf3b14d0f80 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/types.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/types.ts @@ -9,6 +9,7 @@ import { EuiContextMenuPanelId } from '@elastic/eui/src/components/context_menu/ import type { DataSourceSelectionChangeHandler, DataSourceSelection, + AllDatasetSelection, } from '../../../common/data_source_selection'; import { SortOrder } from '../../../common/latest'; import { Dataset, Integration, IntegrationId } from '../../../common/datasets'; @@ -39,6 +40,8 @@ import { DataViewsFilterParams } from '../../state_machines/data_views'; export interface DataSourceSelectorProps { /* The generic data stream list */ datasets: Dataset[] | null; + /* Class to represent the current "All logs" selection */ + allSelection: AllDatasetSelection; /* Any error occurred to show when the user preview the generic data streams */ datasetsError: Error | null; /* The current selection instance */ diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/utils.tsx b/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/utils.tsx index 6825a9528ea5e..a462cfe4c5eb9 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/utils.tsx +++ b/x-pack/plugins/observability_solution/logs_explorer/public/components/data_source_selector/utils.tsx @@ -8,7 +8,8 @@ import React, { RefCallback } from 'react'; import { EuiContextMenuPanelDescriptor, EuiContextMenuPanelItemDescriptor } from '@elastic/eui'; import { PackageIcon } from '@kbn/fleet-plugin/public'; -import { Dataset, Integration } from '../../../common/datasets'; +import { AllDatasetSelection } from '../../../common'; +import { Integration } from '../../../common/datasets'; import { DATA_SOURCE_SELECTOR_WIDTH, noDatasetsDescriptionLabel, @@ -78,12 +79,11 @@ export const buildIntegrationsTree = ({ ); }; -export const createAllLogsItem = () => { - const allLogs = Dataset.createAllLogsDataset(); +export const createAllLogsItem = (allSelection: AllDatasetSelection) => { return { 'data-test-subj': 'dataSourceSelectorShowAllLogs', - iconType: allLogs.iconType, - name: allLogs.title, + iconType: allSelection.selection.dataset.iconType, + name: allSelection.selection.dataset.title, }; }; diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts b/x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts index 64f42cb5649a4..59d873385f21b 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts @@ -10,8 +10,12 @@ import { getDevToolsOptions } from '@kbn/xstate-utils'; import equal from 'fast-deep-equal'; import { distinctUntilChanged, from, map, shareReplay, Subject } from 'rxjs'; import { interpret } from 'xstate'; +import { AllDatasetSelection } from '../../common'; import { DatasetsService } from '../services/datasets'; -import { createLogsExplorerControllerStateMachine } from '../state_machines/logs_explorer_controller'; +import { + createLogsExplorerControllerStateMachine, + DEFAULT_CONTEXT, +} from '../state_machines/logs_explorer_controller'; import { LogsExplorerStartDeps } from '../types'; import { LogsExplorerCustomizations } from '../customizations/types'; import { createDataServiceProxy } from './custom_data_service'; @@ -33,7 +37,7 @@ interface Dependencies { plugins: LogsExplorerStartDeps; } -type InitialState = LogsExplorerPublicStateUpdate; +type InitialState = LogsExplorerPublicStateUpdate & { allSelection?: AllDatasetSelection }; export const createLogsExplorerControllerFactory = ({ core, plugins }: Dependencies) => @@ -66,15 +70,19 @@ export const createLogsExplorerControllerFactory = timefilter: customData.query.timefilter.timefilter, urlStateStorage: customMemoryUrlStateStorage, }; + const allSelection = initialState?.allSelection ?? DEFAULT_CONTEXT.allSelection; - const initialContext = getContextFromPublicState(initialState ?? {}); + const initialContext = getContextFromPublicState(initialState ?? {}, allSelection); const publicEvents$ = new Subject(); const machine = createLogsExplorerControllerStateMachine({ datasetsClient, dataViews, events: customizations.events, - initialContext, + initialContext: { + ...initialContext, + allSelection, + }, query: discoverServices.data.query, toasts: core.notifications.toasts, uiSettings: customUiSettings, diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/controller/public_state.ts b/x-pack/plugins/observability_solution/logs_explorer/public/controller/public_state.ts index ced3e7fc69cc1..7b228ff2afbfd 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/controller/public_state.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/controller/public_state.ts @@ -6,6 +6,7 @@ */ import { + AllDatasetSelection, availableControlsPanels, controlPanelConfigs, ControlPanels, @@ -37,7 +38,8 @@ export const getPublicStateFromContext = ( }; export const getContextFromPublicState = ( - publicState: LogsExplorerPublicStateUpdate + publicState: LogsExplorerPublicStateUpdate, + allSelection: AllDatasetSelection ): LogsExplorerControllerContext => ({ ...DEFAULT_CONTEXT, chart: { @@ -47,7 +49,7 @@ export const getContextFromPublicState = ( controlPanels: getControlPanelsFromPublicControlsState(publicState.controls), dataSourceSelection: publicState.dataSourceSelection != null - ? hydrateDataSourceSelection(publicState.dataSourceSelection) + ? hydrateDataSourceSelection(publicState.dataSourceSelection, allSelection) : DEFAULT_CONTEXT.dataSourceSelection, grid: { ...DEFAULT_CONTEXT.grid, diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_data_source_selector.tsx b/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_data_source_selector.tsx index feb2b6ceb9cee..adb9ba59e14f2 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_data_source_selector.tsx +++ b/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_data_source_selector.tsx @@ -23,9 +23,8 @@ interface CustomDataSourceSelectorProps { } export const CustomDataSourceSelector = withProviders(({ logsExplorerControllerStateService }) => { - const { dataSourceSelection, handleDataSourceSelectionChange } = useDataSourceSelection( - logsExplorerControllerStateService - ); + const { dataSourceSelection, handleDataSourceSelectionChange, allSelection } = + useDataSourceSelection(logsExplorerControllerStateService); const { error: integrationsError, @@ -70,6 +69,7 @@ export const CustomDataSourceSelector = withProviders(({ logsExplorerControllerS { return state.context.dataSourceSelection; }); + const allSelection = useSelector(logsExplorerControllerStateService, (state) => { + return state.context.allSelection; + }); const handleDataSourceSelectionChange: DataSourceSelectionChangeHandler = useCallback( (data) => { @@ -24,5 +27,5 @@ export const useDataSourceSelection = ( [logsExplorerControllerStateService] ); - return { dataSourceSelection, handleDataSourceSelectionChange }; + return { dataSourceSelection, allSelection, handleDataSourceSelectionChange }; }; diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/index.ts b/x-pack/plugins/observability_solution/logs_explorer/public/index.ts index 62794429c8c2e..8b0eae25e6030 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/index.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/index.ts @@ -20,6 +20,7 @@ export type { LogsExplorerCustomizationEvents, } from './customizations/types'; export type { LogsExplorerControllerContext } from './state_machines/logs_explorer_controller'; +export { DEFAULT_ALL_SELECTION } from './state_machines/logs_explorer_controller/src/default_all_selection'; export type { LogsExplorerPluginSetup, LogsExplorerPluginStart } from './types'; export { getDiscoverColumnsFromDisplayOptions, diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/default_all_selection.ts b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/default_all_selection.ts new file mode 100644 index 0000000000000..e00defe175916 --- /dev/null +++ b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/default_all_selection.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 { AllDatasetSelection } from '../../../../common'; + +export const DEFAULT_ALL_SELECTION = AllDatasetSelection.create({ indices: 'logs-*-*' }); diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/defaults.ts b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/defaults.ts index 0aa128825ed3a..33294b491b28b 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/defaults.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/defaults.ts @@ -11,11 +11,12 @@ import { DEFAULT_ROWS_PER_PAGE, LOG_LEVEL_FIELD, } from '../../../../common/constants'; -import { AllDatasetSelection } from '../../../../common/data_source_selection'; import { DefaultLogsExplorerControllerState } from './types'; +import { DEFAULT_ALL_SELECTION } from './default_all_selection'; export const DEFAULT_CONTEXT: DefaultLogsExplorerControllerState = { - dataSourceSelection: AllDatasetSelection.create(), + dataSourceSelection: DEFAULT_ALL_SELECTION, + allSelection: DEFAULT_ALL_SELECTION, grid: { columns: DEFAULT_COLUMNS, rows: { diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/index.ts b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/index.ts index 3f426130cbf38..e6b4ac04ac3e7 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/index.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/index.ts @@ -6,5 +6,6 @@ */ export * from './defaults'; +export * from './default_all_selection'; export * from './state_machine'; export * from './types'; diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/state_machine.ts b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/state_machine.ts index e1d4fa6f91c6d..d7c5359cae2ff 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/state_machine.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/state_machine.ts @@ -14,7 +14,6 @@ import { OBSERVABILITY_LOGS_EXPLORER_ALLOWED_DATA_VIEWS_ID } from '@kbn/manageme import type { LogsExplorerCustomizations, LogsExplorerPublicEvent } from '../../../controller'; import { ControlPanelRT } from '../../../../common/control_panels'; import { - AllDatasetSelection, isDataSourceSelection, isDataViewSelection, } from '../../../../common/data_source_selection'; @@ -271,7 +270,7 @@ export const createPureLogsExplorerControllerStateMachine = ( { actions: { storeDefaultSelection: actions.assign((_context) => ({ - dataSourceSelection: AllDatasetSelection.create(), + dataSourceSelection: _context.allSelection, })), storeDataSourceSelection: actions.assign((_context, event) => 'data' in event && isDataSourceSelection(event.data) diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/types.ts b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/types.ts index 56ee5405841cc..442418d88779d 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/types.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/types.ts @@ -16,6 +16,7 @@ import { DoneInvokeEvent } from 'xstate'; import type { DataTableRecord } from '@kbn/discover-utils/src/types'; import { ControlPanels, DisplayOptions } from '../../../../common'; import type { + AllDatasetSelection, DatasetSelection, DataSourceSelection, DataViewSelection, @@ -25,6 +26,9 @@ export interface WithDataSourceSelection { dataSourceSelection: DataSourceSelection; } +export interface WithAllSelection { + allSelection: AllDatasetSelection; +} export interface WithControlPanelGroupAPI { controlGroupAPI: ControlGroupAPI; } @@ -46,6 +50,7 @@ export interface WithDataTableRecord { } export type DefaultLogsExplorerControllerState = WithDataSourceSelection & + WithAllSelection & WithQueryState & WithDisplayOptions & WithDataTableRecord; @@ -53,11 +58,16 @@ export type DefaultLogsExplorerControllerState = WithDataSourceSelection & export type LogsExplorerControllerTypeState = | { value: 'uninitialized'; - context: WithDataSourceSelection & WithControlPanels & WithQueryState & WithDisplayOptions; + context: WithDataSourceSelection & + WithAllSelection & + WithControlPanels & + WithQueryState & + WithDisplayOptions; } | { value: 'initializingSelection'; context: WithDataSourceSelection & + WithAllSelection & WithControlPanels & WithQueryState & WithDisplayOptions & @@ -67,6 +77,7 @@ export type LogsExplorerControllerTypeState = | { value: 'initializingDataset'; context: WithDataSourceSelection & + WithAllSelection & WithControlPanels & WithQueryState & WithDisplayOptions & @@ -75,6 +86,7 @@ export type LogsExplorerControllerTypeState = | { value: 'initializingDataView'; context: WithDataSourceSelection & + WithAllSelection & WithControlPanels & WithQueryState & WithDisplayOptions & @@ -83,6 +95,7 @@ export type LogsExplorerControllerTypeState = | { value: 'initializingControlPanels'; context: WithDataSourceSelection & + WithAllSelection & WithControlPanels & WithQueryState & WithDisplayOptions & @@ -91,6 +104,7 @@ export type LogsExplorerControllerTypeState = | { value: 'initialized'; context: WithDataSourceSelection & + WithAllSelection & WithControlPanels & WithQueryState & WithDisplayOptions & @@ -100,6 +114,7 @@ export type LogsExplorerControllerTypeState = | { value: 'initialized.dataSourceSelection.idle'; context: WithDataSourceSelection & + WithAllSelection & WithControlPanels & WithQueryState & WithDisplayOptions & @@ -109,6 +124,7 @@ export type LogsExplorerControllerTypeState = | { value: 'initialized.dataSourceSelection.changingDataView'; context: WithDataSourceSelection & + WithAllSelection & WithControlPanels & WithQueryState & WithDisplayOptions & @@ -118,6 +134,7 @@ export type LogsExplorerControllerTypeState = | { value: 'initialized.dataSourceSelection.creatingAdHocDataView'; context: WithDataSourceSelection & + WithAllSelection & WithControlPanels & WithQueryState & WithDisplayOptions & @@ -127,6 +144,7 @@ export type LogsExplorerControllerTypeState = | { value: 'initialized.controlGroups.uninitialized'; context: WithDataSourceSelection & + WithAllSelection & WithControlPanels & WithQueryState & WithDisplayOptions & @@ -136,6 +154,7 @@ export type LogsExplorerControllerTypeState = | { value: 'initialized.controlGroups.idle'; context: WithDataSourceSelection & + WithAllSelection & WithControlPanelGroupAPI & WithControlPanels & WithQueryState & @@ -146,6 +165,7 @@ export type LogsExplorerControllerTypeState = | { value: 'initialized.controlGroups.updatingControlPanels'; context: WithDataSourceSelection & + WithAllSelection & WithControlPanelGroupAPI & WithControlPanels & WithQueryState & diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/common/locators/all_datasets_locator.ts b/x-pack/plugins/observability_solution/observability_logs_explorer/common/locators/all_datasets_locator.ts index 44d0213885891..cbcfb5802c15c 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/common/locators/all_datasets_locator.ts +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/common/locators/all_datasets_locator.ts @@ -6,11 +6,11 @@ */ import type { LocatorDefinition, LocatorPublic } from '@kbn/share-plugin/public'; -import { AllDatasetSelection } from '@kbn/logs-explorer-plugin/common'; import { AllDatasetsLocatorParams, ALL_DATASETS_LOCATOR_ID, } from '@kbn/deeplinks-observability/locators'; +import { AllDatasetSelection } from '@kbn/logs-explorer-plugin/common'; import { ObsLogsExplorerLocatorDependencies } from './types'; import { constructLocatorPath } from './utils'; @@ -25,7 +25,7 @@ export class AllDatasetsLocatorDefinition implements LocatorDefinition { ) { const { logsExplorerState } = pageState.context; const index = hydrateDataSourceSelection( - logsExplorerState.dataSourceSelection + logsExplorerState.dataSourceSelection, + pageState.context.allSelection ).toDataviewSpec(); return triggersActionsUi.getAddRuleFlyout({ @@ -92,7 +93,8 @@ export const AlertsPopover = () => { if (isCreateSLOFlyoutOpen && pageState.matches({ initialized: 'validLogsExplorerState' })) { const { logsExplorerState } = pageState.context; const dataView = hydrateDataSourceSelection( - logsExplorerState.dataSourceSelection + logsExplorerState.dataSourceSelection, + pageState.context.allSelection ).toDataviewSpec(); const query = logsExplorerState?.query && 'query' in logsExplorerState.query diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/components/discover_link.tsx b/x-pack/plugins/observability_solution/observability_logs_explorer/public/components/discover_link.tsx index 4e3482816b026..3ec1425348493 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/public/components/discover_link.tsx +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/components/discover_link.tsx @@ -30,7 +30,6 @@ export const ConnectedDiscoverLink = React.memo(() => { } = useKibanaContextForPlugin(); const [pageState] = useActor(useObservabilityLogsExplorerPageStateContext()); - if (pageState.matches({ initialized: 'validLogsExplorerState' })) { return ; } else { @@ -47,7 +46,7 @@ export const DiscoverLinkForValidState = React.memo( ({ discover, pageState: { - context: { logsExplorerState }, + context: { logsExplorerState, allSelection }, }, }: { discover: DiscoverStart; @@ -55,7 +54,8 @@ export const DiscoverLinkForValidState = React.memo( }) => { const discoverLinkParams = useMemo(() => { const index = hydrateDataSourceSelection( - logsExplorerState.dataSourceSelection + logsExplorerState.dataSourceSelection, + allSelection ).toDataviewSpec(); return { breakdownField: logsExplorerState.chart.breakdownField ?? undefined, @@ -70,7 +70,7 @@ export const DiscoverLinkForValidState = React.memo( timeRange: logsExplorerState.time, dataViewSpec: index, }; - }, [logsExplorerState]); + }, [allSelection, logsExplorerState]); return ; } diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/routes/main/main_route.tsx b/x-pack/plugins/observability_solution/observability_logs_explorer/public/routes/main/main_route.tsx index d36dc5cec5e4a..d1a2dc1e74439 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/public/routes/main/main_route.tsx +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/routes/main/main_route.tsx @@ -27,8 +27,17 @@ import { useKibanaContextForPlugin } from '../../utils/use_kibana'; export const ObservabilityLogsExplorerMainRoute = () => { const { services } = useKibanaContextForPlugin(); - const { logsExplorer, serverless, chrome, notifications, appParams, analytics, i18n, theme } = - services; + const { + logsExplorer, + serverless, + chrome, + notifications, + appParams, + analytics, + i18n, + theme, + logsDataAccess, + } = services; const { history } = appParams; useBreadcrumbs(noBreadcrumbs, chrome, serverless); @@ -51,6 +60,7 @@ export const ObservabilityLogsExplorerMainRoute = () => { urlStateStorageContainer={urlStateStorageContainer} timeFilterService={services.data.query.timefilter.timefilter} analytics={services.analytics} + logSourcesService={logsDataAccess.services.logSourcesService} > => + async (context) => { + const logSources = await logSourcesService.getLogSources(); + const indices = logSources.map((logSource) => logSource.indexPattern).join(','); + return AllDatasetSelection.create({ indices }); + }; diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/controller_service.ts b/x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/controller_service.ts index 5389eb70f4511..7d615d4be7fb9 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/controller_service.ts +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/controller_service.ts @@ -19,7 +19,7 @@ export const createController = (context, event) => (send) => { createLogsExplorerController({ - initialState: context.initialLogsExplorerState, + initialState: { ...context.initialLogsExplorerState, allSelection: context.allSelection }, }).then((controller) => { send({ type: 'CONTROLLER_CREATED', diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/defaults.ts b/x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/defaults.ts index 4484eb9fe1b4c..8117233120c06 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/defaults.ts +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/defaults.ts @@ -5,8 +5,10 @@ * 2.0. */ +import { DEFAULT_ALL_SELECTION } from '@kbn/logs-explorer-plugin/public'; import { CommonObservabilityLogsExplorerContext } from './types'; export const DEFAULT_CONTEXT: CommonObservabilityLogsExplorerContext = { initialLogsExplorerState: {}, + allSelection: DEFAULT_ALL_SELECTION, }; diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/state_machine.ts b/x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/state_machine.ts index f5ac4947c2119..d829008af5dc1 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/state_machine.ts +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/state_machine.ts @@ -11,6 +11,7 @@ import { CreateLogsExplorerController } from '@kbn/logs-explorer-plugin/public'; import { actions, createMachine, InterpreterFrom } from 'xstate'; import { TimefilterContract } from '@kbn/data-plugin/public'; import { AnalyticsServiceStart } from '@kbn/core-analytics-browser'; +import { LogSourcesService } from '@kbn/logs-data-access-plugin/common/types'; import { DEFAULT_CONTEXT } from './defaults'; import { ObservabilityLogsExplorerContext, @@ -25,6 +26,7 @@ import { } from './controller_service'; import { initializeFromTimeFilterService } from './time_filter_service'; import { createDataReceivedTelemetryEventEmitter } from './telemetry_events'; +import { initializeAllSelection } from './all_selection_service'; export const createPureObservabilityLogsExplorerStateMachine = ( initialContext: ObservabilityLogsExplorerContext @@ -42,7 +44,17 @@ export const createPureObservabilityLogsExplorerStateMachine = ( initial: 'uninitialized', states: { uninitialized: { - always: 'initializingFromTimeFilterService', + always: 'initializeAllSelection', + }, + initializeAllSelection: { + invoke: { + src: 'initializeAllSelection', + onDone: { + target: 'initializingFromTimeFilterService', + actions: ['storeAllSelection'], + }, + onError: 'initializingFromTimeFilterService', + }, }, initializingFromTimeFilterService: { invoke: { @@ -119,6 +131,13 @@ export const createPureObservabilityLogsExplorerStateMachine = ( ? { controller: event.controller } : {}; }), + storeAllSelection: actions.assign((context, event) => { + return 'data' in event + ? { + allSelection: event.data, + } + : {}; + }), storeInitialTimeFilter: actions.assign((context, event) => { return 'time' in event && 'refreshInterval' in event && @@ -162,6 +181,7 @@ export interface ObservabilityLogsExplorerStateMachineDependencies { toasts: IToasts; urlStateStorageContainer: IKbnUrlStateStorage; analytics: AnalyticsServiceStart; + logSourcesService: LogSourcesService; } export const createObservabilityLogsExplorerStateMachine = ({ @@ -171,6 +191,7 @@ export const createObservabilityLogsExplorerStateMachine = ({ createLogsExplorerController, timeFilterService, analytics, + logSourcesService, }: ObservabilityLogsExplorerStateMachineDependencies) => createPureObservabilityLogsExplorerStateMachine(initialContext).withConfig({ actions: { @@ -181,6 +202,7 @@ export const createObservabilityLogsExplorerStateMachine = ({ createController: createController({ createLogsExplorerController }), initializeFromTimeFilterService: initializeFromTimeFilterService({ timeFilterService }), initializeFromUrl: initializeFromUrl({ urlStateStorageContainer, toastsService: toasts }), + initializeAllSelection: initializeAllSelection({ logSourcesService }), subscribeToLogsExplorerState, subscribeToLogsExplorerPublicEvents, }, diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/types.ts b/x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/types.ts index d0b1f959962b3..2cb62e33bac45 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/types.ts +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/types.ts @@ -6,16 +6,19 @@ */ import { QueryState } from '@kbn/data-plugin/common'; +import { AllDatasetSelection } from '@kbn/logs-explorer-plugin/common'; import { LogsExplorerController, LogsExplorerPublicState, LogsExplorerPublicStateUpdate, } from '@kbn/logs-explorer-plugin/public'; +import { DoneInvokeEvent } from 'xstate'; export type ObservabilityLogsExplorerContext = ObservabilityLogsExplorerTypeState['context']; export interface CommonObservabilityLogsExplorerContext { initialLogsExplorerState: LogsExplorerPublicStateUpdate; + allSelection: AllDatasetSelection; } export interface WithLogsExplorerState { @@ -47,7 +50,8 @@ export type ObservabilityLogsExplorerEvent = | { type: 'LOGS_EXPLORER_DATA_RECEIVED'; rowCount: number; - }; + } + | DoneInvokeEvent; export type ObservabilityLogsExplorerTypeState = | { diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/types.ts b/x-pack/plugins/observability_solution/observability_logs_explorer/public/types.ts index 12d56f91c4dda..b1bbfb1b504a1 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/public/types.ts +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/types.ts @@ -26,6 +26,7 @@ import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import { DataViewEditorStart } from '@kbn/data-view-editor-plugin/public'; import { LensPublicStart } from '@kbn/lens-plugin/public'; import { SloPublicStart } from '@kbn/slo-plugin/public'; +import { LogsDataAccessPluginStart } from '@kbn/logs-data-access-plugin/public'; import { ObservabilityLogsExplorerLocators, ObservabilityLogsExplorerLocationState, @@ -49,6 +50,7 @@ export interface ObservabilityLogsExplorerStartDeps { discover: DiscoverStart; logsExplorer: LogsExplorerPluginStart; logsShared: LogsSharedClientStartExports; + logsDataAccess: LogsDataAccessPluginStart; observabilityAIAssistant?: ObservabilityAIAssistantPublicStart; observabilityShared: ObservabilitySharedPluginStart; slo: SloPublicStart; diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/tsconfig.json b/x-pack/plugins/observability_solution/observability_logs_explorer/tsconfig.json index 782e7f3280be3..6ea751aaed3de 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/tsconfig.json +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/tsconfig.json @@ -49,6 +49,7 @@ "@kbn/es-query", "@kbn/core-analytics-browser", "@kbn/react-hooks", + "@kbn/logs-data-access-plugin", ], "exclude": [ "target/**/*" From 0f3cd1b7e183a4949b6dd31ee92c7eaa85f5ef9e Mon Sep 17 00:00:00 2001 From: Elastic Machine Date: Thu, 22 Aug 2024 17:22:44 +0100 Subject: [PATCH 27/59] [main] Sync bundled packages with Package Storage (#190956) Automated by https://buildkite.com/elastic/package-storage-infra-kibana-discover-release-branches/builds/1136 --- fleet_packages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fleet_packages.json b/fleet_packages.json index 1217c4f2ec861..b1e18cc431484 100644 --- a/fleet_packages.json +++ b/fleet_packages.json @@ -56,6 +56,6 @@ }, { "name": "security_detection_engine", - "version": "8.15.2" + "version": "8.15.3" } ] \ No newline at end of file From 4b0f142cda35cfcf19299f7fa2ac2a05e33001cd Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Thu, 22 Aug 2024 09:37:51 -0700 Subject: [PATCH 28/59] [Spaces management] make section panel title optional (#190865) ## Summary Epic link: https://github.com/elastic/kibana-team/issues/785 The Spaces Management `SectionPanel` component has been updated to make `title` an optional prop. This PR takes a small change out of a larger PR to be delivered next: https://github.com/elastic/kibana/pull/184697. Currently, `title` is shown consistently for all `SectionPanel` elements in the Edit Space screen. In the new design, the panels will appear on a tabbed interface. Observe how the new design implemented in the larger/next PR will leave the `SectionPanel` title empty (this screenshot was taken when running Kibana in the branch for the next PR): image The current design will still be used for the Create Space interface. As a reminder, here is how the current design looks: image --- .../customize_space.test.tsx.snap | 1 - .../customize_space/customize_space.test.tsx | 24 +++++++++++++++++++ .../customize_space/customize_space.tsx | 8 +++---- .../edit_space/manage_space_page.tsx | 12 +++++++++- .../__snapshots__/section_panel.test.tsx.snap | 11 +++++++++ .../section_panel/section_panel.test.tsx | 10 ++++++++ .../section_panel/section_panel.tsx | 8 +++++-- .../solution_view/solution_view.tsx | 10 +++----- 8 files changed, 68 insertions(+), 16 deletions(-) diff --git a/x-pack/plugins/spaces/public/management/edit_space/customize_space/__snapshots__/customize_space.test.tsx.snap b/x-pack/plugins/spaces/public/management/edit_space/customize_space/__snapshots__/customize_space.test.tsx.snap index 31de1c9ea55e9..66da6992614bc 100644 --- a/x-pack/plugins/spaces/public/management/edit_space/customize_space/__snapshots__/customize_space.test.tsx.snap +++ b/x-pack/plugins/spaces/public/management/edit_space/customize_space/__snapshots__/customize_space.test.tsx.snap @@ -3,7 +3,6 @@ exports[`renders correctly 1`] = ` { expect(wrapper).toMatchSnapshot(); }); +test('allows title prop', () => { + const space = { + id: 'space-3', + name: 'Space 3', + initials: 'S3', + color: '#FEEDED', + customAvatarInitials: true, + customAvatarColor: true, + }; + const changeHandler = jest.fn(); + + const wrapper = shallowWithIntl( + + ); + expect(wrapper.find(SectionPanel).prop('title')).toBe('Cool Customize Space Title'); +}); + test('updates identifier, initials and color when name is changed', () => { const space = { id: 'space-1', diff --git a/x-pack/plugins/spaces/public/management/edit_space/customize_space/customize_space.tsx b/x-pack/plugins/spaces/public/management/edit_space/customize_space/customize_space.tsx index 1de97136e9104..33113f3338960 100644 --- a/x-pack/plugins/spaces/public/management/edit_space/customize_space/customize_space.tsx +++ b/x-pack/plugins/spaces/public/management/edit_space/customize_space/customize_space.tsx @@ -37,6 +37,7 @@ interface Props { space: FormValues; editingExistingSpace: boolean; onChange: (space: FormValues) => void; + title?: string; } interface State { @@ -51,14 +52,11 @@ export class CustomizeSpace extends Component { }; public render() { - const { validator, editingExistingSpace, space } = this.props; + const { validator, editingExistingSpace, space, title } = this.props; const { name = '', description = '' } = space; - const panelTitle = i18n.translate('xpack.spaces.management.manageSpacePage.generalTitle', { - defaultMessage: 'General', - }); return ( - + diff --git a/x-pack/plugins/spaces/public/management/edit_space/manage_space_page.tsx b/x-pack/plugins/spaces/public/management/edit_space/manage_space_page.tsx index b56a4f6434047..b34d2eec88e48 100644 --- a/x-pack/plugins/spaces/public/management/edit_space/manage_space_page.tsx +++ b/x-pack/plugins/spaces/public/management/edit_space/manage_space_page.tsx @@ -189,6 +189,9 @@ export class ManageSpacePage extends Component { return (
{ {!!this.props.allowSolutionVisibility && ( <> - + )} diff --git a/x-pack/plugins/spaces/public/management/edit_space/section_panel/__snapshots__/section_panel.test.tsx.snap b/x-pack/plugins/spaces/public/management/edit_space/section_panel/__snapshots__/section_panel.test.tsx.snap index 630de56f3bbdc..5880163e5c386 100644 --- a/x-pack/plugins/spaces/public/management/edit_space/section_panel/__snapshots__/section_panel.test.tsx.snap +++ b/x-pack/plugins/spaces/public/management/edit_space/section_panel/__snapshots__/section_panel.test.tsx.snap @@ -34,3 +34,14 @@ exports[`it renders without blowing up 1`] = `

`; + +exports[`it renders without optional title 1`] = ` + +

+ child +

+
+`; diff --git a/x-pack/plugins/spaces/public/management/edit_space/section_panel/section_panel.test.tsx b/x-pack/plugins/spaces/public/management/edit_space/section_panel/section_panel.test.tsx index 125697c6f4e19..661060c6adf8c 100644 --- a/x-pack/plugins/spaces/public/management/edit_space/section_panel/section_panel.test.tsx +++ b/x-pack/plugins/spaces/public/management/edit_space/section_panel/section_panel.test.tsx @@ -21,6 +21,16 @@ test('it renders without blowing up', () => { expect(wrapper).toMatchSnapshot(); }); +test('it renders without optional title', () => { + const wrapper = shallowWithIntl( + +

child

+
+ ); + + expect(wrapper).toMatchSnapshot(); +}); + test('it renders children', () => { const wrapper = mountWithIntl( diff --git a/x-pack/plugins/spaces/public/management/edit_space/section_panel/section_panel.tsx b/x-pack/plugins/spaces/public/management/edit_space/section_panel/section_panel.tsx index 3d07aaabfd6b3..8024df2d6e85f 100644 --- a/x-pack/plugins/spaces/public/management/edit_space/section_panel/section_panel.tsx +++ b/x-pack/plugins/spaces/public/management/edit_space/section_panel/section_panel.tsx @@ -12,7 +12,7 @@ import React, { Component, Fragment } from 'react'; interface Props { iconType?: IconType; - title: string | ReactNode; + title?: string | ReactNode; dataTestSubj?: string; } @@ -27,6 +27,10 @@ export class SectionPanel extends Component { } public getTitle = () => { + if (!this.props.title) { + return null; + } + return ( @@ -52,7 +56,7 @@ export class SectionPanel extends Component { public getForm = () => { return ( - + {this.props.title ? : null} {this.props.children} ); diff --git a/x-pack/plugins/spaces/public/management/edit_space/solution_view/solution_view.tsx b/x-pack/plugins/spaces/public/management/edit_space/solution_view/solution_view.tsx index 0a6dc317161f2..608454a75600b 100644 --- a/x-pack/plugins/spaces/public/management/edit_space/solution_view/solution_view.tsx +++ b/x-pack/plugins/spaces/public/management/edit_space/solution_view/solution_view.tsx @@ -98,18 +98,14 @@ const getOptions = ({ size }: EuiThemeComputed): Array; onChange: (space: Partial) => void; + sectionTitle?: string; } -export const SolutionView: FunctionComponent = ({ space, onChange }) => { +export const SolutionView: FunctionComponent = ({ space, onChange, sectionTitle }) => { const { euiTheme } = useEuiTheme(); return ( - + From 53b5d7c9aa611c4fa1774fb541e7bfa17532e664 Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Thu, 22 Aug 2024 12:28:32 -0500 Subject: [PATCH 29/59] skip failing test suite (#191117) --- .../task_manager_capacity_based_claiming.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/task_manager/server/integration_tests/task_manager_capacity_based_claiming.test.ts b/x-pack/plugins/task_manager/server/integration_tests/task_manager_capacity_based_claiming.test.ts index ab2a397f60f8c..d8365f3ec6140 100644 --- a/x-pack/plugins/task_manager/server/integration_tests/task_manager_capacity_based_claiming.test.ts +++ b/x-pack/plugins/task_manager/server/integration_tests/task_manager_capacity_based_claiming.test.ts @@ -94,7 +94,8 @@ jest.mock('../queries/task_claiming', () => { const taskManagerStartSpy = jest.spyOn(TaskManagerPlugin.prototype, 'start'); -describe('capacity based claiming', () => { +// Failing: See https://github.com/elastic/kibana/issues/191117 +describe.skip('capacity based claiming', () => { const taskIdsToRemove: string[] = []; let esServer: TestElasticsearchUtils; let kibanaServer: TestKibanaUtils; From bf673d9c565c288223483c4c622f37f745ce70e6 Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Thu, 22 Aug 2024 11:03:03 -0700 Subject: [PATCH 30/59] [Screenshotting] Server package for stateless code (#188390) ## Summary This PR moves code that is usually impacted by a Puppeteer/Chromium upgrade to a package. The same work is happening to a lesser degree in the 7.17 branch. Together, these changes will ease the manual labor of backporting the upgrades from main to 7.17. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 1 + package.json | 1 + packages/kbn-screenshotting-server/README.md | 3 +++ packages/kbn-screenshotting-server/index.ts | 13 +++++++++++ .../kbn-screenshotting-server/jest.config.js | 13 +++++++++++ .../kbn-screenshotting-server/kibana.jsonc | 5 ++++ .../kbn-screenshotting-server/package.json | 6 +++++ .../src}/args.test.ts | 5 ++-- .../kbn-screenshotting-server/src}/args.ts | 7 +++--- .../src}/config/create_config.test.ts | 5 ++-- .../src}/config/create_config.ts | 5 ++-- .../default_chromium_sandbox_disabled.test.ts | 5 ++-- .../default_chromium_sandbox_disabled.ts | 5 ++-- .../src}/config/index.ts | 5 ++-- .../src}/config/schema.ts | 5 ++-- .../src/get_chromium_package.ts | 23 +++++++++++++++++++ .../kbn-screenshotting-server/src}/paths.ts | 5 ++-- .../kbn-screenshotting-server/tsconfig.json | 21 +++++++++++++++++ tsconfig.base.json | 2 ++ .../server/browsers/chromium/driver.test.ts | 2 +- .../server/browsers/chromium/driver.ts | 4 ++-- .../chromium/driver_factory/index.test.ts | 2 +- .../browsers/chromium/driver_factory/index.ts | 9 ++++---- .../server/browsers/chromium/index.ts | 2 -- .../integration_tests/downloads.test.ts | 2 +- .../server/browsers/download/index.test.ts | 10 ++++---- .../server/browsers/download/index.ts | 6 ++--- .../screenshotting/server/browsers/index.ts | 1 - .../screenshotting/server/browsers/install.ts | 4 ++-- .../server/config/schema.test.ts | 2 +- x-pack/plugins/screenshotting/server/index.ts | 2 +- .../plugins/screenshotting/server/plugin.ts | 15 +++++++----- .../screenshots/event_logger/index.test.ts | 4 ++-- .../server/screenshots/event_logger/index.ts | 2 +- .../get_element_position_data.test.ts | 2 +- .../screenshots/get_number_of_items.test.ts | 2 +- .../screenshots/get_render_errors.test.ts | 2 +- .../screenshots/get_screenshots.test.ts | 2 +- .../server/screenshots/get_time_range.test.ts | 2 +- .../server/screenshots/index.test.ts | 2 +- .../server/screenshots/observable.test.ts | 5 ++-- .../server/screenshots/observable.ts | 14 ++++++++--- .../server/screenshots/screenshots.test.ts | 2 +- .../server/screenshots/screenshots.ts | 21 +++++++++++++---- x-pack/plugins/screenshotting/server/utils.ts | 15 ++---------- x-pack/plugins/screenshotting/tsconfig.json | 3 +-- yarn.lock | 4 ++++ 47 files changed, 193 insertions(+), 85 deletions(-) create mode 100644 packages/kbn-screenshotting-server/README.md create mode 100644 packages/kbn-screenshotting-server/index.ts create mode 100644 packages/kbn-screenshotting-server/jest.config.js create mode 100644 packages/kbn-screenshotting-server/kibana.jsonc create mode 100644 packages/kbn-screenshotting-server/package.json rename {x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory => packages/kbn-screenshotting-server/src}/args.test.ts (89%) rename {x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory => packages/kbn-screenshotting-server/src}/args.ts (92%) rename {x-pack/plugins/screenshotting/server => packages/kbn-screenshotting-server/src}/config/create_config.test.ts (86%) rename {x-pack/plugins/screenshotting/server => packages/kbn-screenshotting-server/src}/config/create_config.ts (89%) rename {x-pack/plugins/screenshotting/server => packages/kbn-screenshotting-server/src}/config/default_chromium_sandbox_disabled.test.ts (92%) rename {x-pack/plugins/screenshotting/server => packages/kbn-screenshotting-server/src}/config/default_chromium_sandbox_disabled.ts (90%) rename {x-pack/plugins/screenshotting/server => packages/kbn-screenshotting-server/src}/config/index.ts (93%) rename {x-pack/plugins/screenshotting/server => packages/kbn-screenshotting-server/src}/config/schema.ts (94%) create mode 100644 packages/kbn-screenshotting-server/src/get_chromium_package.ts rename {x-pack/plugins/screenshotting/server/browsers/chromium => packages/kbn-screenshotting-server/src}/paths.ts (96%) create mode 100644 packages/kbn-screenshotting-server/tsconfig.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f366f654c7770..8a307d8ce90a1 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -732,6 +732,7 @@ examples/screenshot_mode_example @elastic/appex-sharedux src/plugins/screenshot_mode @elastic/appex-sharedux x-pack/examples/screenshotting_example @elastic/appex-sharedux x-pack/plugins/screenshotting @elastic/kibana-reporting-services +packages/kbn-screenshotting-server @elastic/appex-sharedux packages/kbn-search-api-panels @elastic/search-kibana x-pack/plugins/search_assistant @elastic/search-kibana packages/kbn-search-connectors @elastic/search-kibana diff --git a/package.json b/package.json index 949f7bbaad953..20221c21a8f7b 100644 --- a/package.json +++ b/package.json @@ -750,6 +750,7 @@ "@kbn/screenshot-mode-plugin": "link:src/plugins/screenshot_mode", "@kbn/screenshotting-example-plugin": "link:x-pack/examples/screenshotting_example", "@kbn/screenshotting-plugin": "link:x-pack/plugins/screenshotting", + "@kbn/screenshotting-server": "link:packages/kbn-screenshotting-server", "@kbn/search-api-panels": "link:packages/kbn-search-api-panels", "@kbn/search-assistant": "link:x-pack/plugins/search_assistant", "@kbn/search-connectors": "link:packages/kbn-search-connectors", diff --git a/packages/kbn-screenshotting-server/README.md b/packages/kbn-screenshotting-server/README.md new file mode 100644 index 0000000000000..5dbac6d0ea00f --- /dev/null +++ b/packages/kbn-screenshotting-server/README.md @@ -0,0 +1,3 @@ +# @kbn/screenshotting-server + +Stateless code pertaining to the capture of screenshots for Kibana Reporting diff --git a/packages/kbn-screenshotting-server/index.ts b/packages/kbn-screenshotting-server/index.ts new file mode 100644 index 0000000000000..8ba3e368f4629 --- /dev/null +++ b/packages/kbn-screenshotting-server/index.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 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 { args } from './src/args'; +export { ChromiumArchivePaths, type PackageInfo } from './src/paths'; +export { getChromiumPackage } from './src/get_chromium_package'; +export { type ConfigType, createConfig, config, durationToNumber } from './src/config'; +export { ConfigSchema } from './src/config/schema'; diff --git a/packages/kbn-screenshotting-server/jest.config.js b/packages/kbn-screenshotting-server/jest.config.js new file mode 100644 index 0000000000000..7436a349ebfc7 --- /dev/null +++ b/packages/kbn-screenshotting-server/jest.config.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../..', + roots: ['/packages/kbn-screenshotting-server'], +}; diff --git a/packages/kbn-screenshotting-server/kibana.jsonc b/packages/kbn-screenshotting-server/kibana.jsonc new file mode 100644 index 0000000000000..1f2aa1c0f5794 --- /dev/null +++ b/packages/kbn-screenshotting-server/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-server", + "id": "@kbn/screenshotting-server", + "owner": "@elastic/appex-sharedux" +} diff --git a/packages/kbn-screenshotting-server/package.json b/packages/kbn-screenshotting-server/package.json new file mode 100644 index 0000000000000..11f02c6cb5c30 --- /dev/null +++ b/packages/kbn-screenshotting-server/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/screenshotting-server", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/args.test.ts b/packages/kbn-screenshotting-server/src/args.test.ts similarity index 89% rename from x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/args.test.ts rename to packages/kbn-screenshotting-server/src/args.test.ts index d66386deb1669..b3ed9a8a4003c 100644 --- a/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/args.test.ts +++ b/packages/kbn-screenshotting-server/src/args.test.ts @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import os from 'os'; diff --git a/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/args.ts b/packages/kbn-screenshotting-server/src/args.ts similarity index 92% rename from x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/args.ts rename to packages/kbn-screenshotting-server/src/args.ts index 2337e452cdc94..a1b1b82e8a24a 100644 --- a/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/args.ts +++ b/packages/kbn-screenshotting-server/src/args.ts @@ -1,12 +1,13 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import os from 'os'; -import type { ConfigType } from '../../../config'; +import type { ConfigType } from './config'; interface WindowSize { height: number; diff --git a/x-pack/plugins/screenshotting/server/config/create_config.test.ts b/packages/kbn-screenshotting-server/src/config/create_config.test.ts similarity index 86% rename from x-pack/plugins/screenshotting/server/config/create_config.test.ts rename to packages/kbn-screenshotting-server/src/config/create_config.test.ts index 4bc5ff65727d0..9a6a7e1cdd579 100644 --- a/x-pack/plugins/screenshotting/server/config/create_config.test.ts +++ b/packages/kbn-screenshotting-server/src/config/create_config.test.ts @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import type { Logger } from '@kbn/core/server'; diff --git a/x-pack/plugins/screenshotting/server/config/create_config.ts b/packages/kbn-screenshotting-server/src/config/create_config.ts similarity index 89% rename from x-pack/plugins/screenshotting/server/config/create_config.ts rename to packages/kbn-screenshotting-server/src/config/create_config.ts index c2ab86b5de76e..099dc0b8cb9e6 100644 --- a/x-pack/plugins/screenshotting/server/config/create_config.ts +++ b/packages/kbn-screenshotting-server/src/config/create_config.ts @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import { set } from '@kbn/safer-lodash-set'; diff --git a/x-pack/plugins/screenshotting/server/config/default_chromium_sandbox_disabled.test.ts b/packages/kbn-screenshotting-server/src/config/default_chromium_sandbox_disabled.test.ts similarity index 92% rename from x-pack/plugins/screenshotting/server/config/default_chromium_sandbox_disabled.test.ts rename to packages/kbn-screenshotting-server/src/config/default_chromium_sandbox_disabled.test.ts index 0b5f503e86921..01e863556691d 100644 --- a/x-pack/plugins/screenshotting/server/config/default_chromium_sandbox_disabled.test.ts +++ b/packages/kbn-screenshotting-server/src/config/default_chromium_sandbox_disabled.test.ts @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ jest.mock('getos', () => jest.fn()); diff --git a/x-pack/plugins/screenshotting/server/config/default_chromium_sandbox_disabled.ts b/packages/kbn-screenshotting-server/src/config/default_chromium_sandbox_disabled.ts similarity index 90% rename from x-pack/plugins/screenshotting/server/config/default_chromium_sandbox_disabled.ts rename to packages/kbn-screenshotting-server/src/config/default_chromium_sandbox_disabled.ts index 34986e804f45a..19b268f20439c 100644 --- a/x-pack/plugins/screenshotting/server/config/default_chromium_sandbox_disabled.ts +++ b/packages/kbn-screenshotting-server/src/config/default_chromium_sandbox_disabled.ts @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import getOsSync from 'getos'; diff --git a/x-pack/plugins/screenshotting/server/config/index.ts b/packages/kbn-screenshotting-server/src/config/index.ts similarity index 93% rename from x-pack/plugins/screenshotting/server/config/index.ts rename to packages/kbn-screenshotting-server/src/config/index.ts index 468f092780112..583952da6cba6 100644 --- a/x-pack/plugins/screenshotting/server/config/index.ts +++ b/packages/kbn-screenshotting-server/src/config/index.ts @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import type { PluginConfigDescriptor } from '@kbn/core/server'; diff --git a/x-pack/plugins/screenshotting/server/config/schema.ts b/packages/kbn-screenshotting-server/src/config/schema.ts similarity index 94% rename from x-pack/plugins/screenshotting/server/config/schema.ts rename to packages/kbn-screenshotting-server/src/config/schema.ts index 0dda1e3ae9981..ce542f2a849f4 100644 --- a/x-pack/plugins/screenshotting/server/config/schema.ts +++ b/packages/kbn-screenshotting-server/src/config/schema.ts @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import { schema, TypeOf, offeringBasedSchema } from '@kbn/config-schema'; diff --git a/packages/kbn-screenshotting-server/src/get_chromium_package.ts b/packages/kbn-screenshotting-server/src/get_chromium_package.ts new file mode 100644 index 0000000000000..af79341d0046a --- /dev/null +++ b/packages/kbn-screenshotting-server/src/get_chromium_package.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 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 os from 'os'; +import { ChromiumArchivePaths } from './paths'; + +const paths = new ChromiumArchivePaths(); + +export const getChromiumPackage = () => { + const platform = process.platform; + const architecture = os.arch(); + + const chromiumPackageInfo = paths.find(process.platform, architecture); + if (!chromiumPackageInfo) { + throw new Error(`Unsupported platform: ${platform}-${architecture}`); + } + return chromiumPackageInfo; +}; diff --git a/x-pack/plugins/screenshotting/server/browsers/chromium/paths.ts b/packages/kbn-screenshotting-server/src/paths.ts similarity index 96% rename from x-pack/plugins/screenshotting/server/browsers/chromium/paths.ts rename to packages/kbn-screenshotting-server/src/paths.ts index ba82fe21734e4..f3c339988567f 100644 --- a/x-pack/plugins/screenshotting/server/browsers/chromium/paths.ts +++ b/packages/kbn-screenshotting-server/src/paths.ts @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import path from 'path'; diff --git a/packages/kbn-screenshotting-server/tsconfig.json b/packages/kbn-screenshotting-server/tsconfig.json new file mode 100644 index 0000000000000..1ca4b9da2b0f6 --- /dev/null +++ b/packages/kbn-screenshotting-server/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts" + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/core", + "@kbn/safer-lodash-set", + "@kbn/config-schema" + ] +} diff --git a/tsconfig.base.json b/tsconfig.base.json index 9f37b2ad90f59..690d74cfab916 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1458,6 +1458,8 @@ "@kbn/screenshotting-example-plugin/*": ["x-pack/examples/screenshotting_example/*"], "@kbn/screenshotting-plugin": ["x-pack/plugins/screenshotting"], "@kbn/screenshotting-plugin/*": ["x-pack/plugins/screenshotting/*"], + "@kbn/screenshotting-server": ["packages/kbn-screenshotting-server"], + "@kbn/screenshotting-server/*": ["packages/kbn-screenshotting-server/*"], "@kbn/search-api-panels": ["packages/kbn-search-api-panels"], "@kbn/search-api-panels/*": ["packages/kbn-search-api-panels/*"], "@kbn/search-assistant": ["x-pack/plugins/search_assistant"], diff --git a/x-pack/plugins/screenshotting/server/browsers/chromium/driver.test.ts b/x-pack/plugins/screenshotting/server/browsers/chromium/driver.test.ts index c9b9bbc9f8b03..e63d6690c72f1 100644 --- a/x-pack/plugins/screenshotting/server/browsers/chromium/driver.test.ts +++ b/x-pack/plugins/screenshotting/server/browsers/chromium/driver.test.ts @@ -7,9 +7,9 @@ import type { Logger } from '@kbn/logging'; import { ScreenshotModePluginSetup } from '@kbn/screenshot-mode-plugin/server'; +import { ConfigType } from '@kbn/screenshotting-server'; import * as puppeteer from 'puppeteer'; import { Size } from '../../../common/layout'; -import { ConfigType } from '../../config'; import { PreserveLayout } from '../../layouts/preserve_layout'; import { HeadlessChromiumDriver } from './driver'; diff --git a/x-pack/plugins/screenshotting/server/browsers/chromium/driver.ts b/x-pack/plugins/screenshotting/server/browsers/chromium/driver.ts index fbe118280fe85..02d611f9ca00f 100644 --- a/x-pack/plugins/screenshotting/server/browsers/chromium/driver.ts +++ b/x-pack/plugins/screenshotting/server/browsers/chromium/driver.ts @@ -10,13 +10,13 @@ import { KBN_SCREENSHOT_MODE_HEADER, ScreenshotModePluginSetup, } from '@kbn/screenshot-mode-plugin/server'; +import { ConfigType } from '@kbn/screenshotting-server'; import { truncate } from 'lodash'; import open from 'opn'; -import { ElementHandle, Page, EvaluateFunc, HTTPResponse } from 'puppeteer'; +import { ElementHandle, EvaluateFunc, HTTPResponse, Page } from 'puppeteer'; import { Subject } from 'rxjs'; import { parse as parseUrl } from 'url'; import { getDisallowedOutgoingUrlError } from '.'; -import { ConfigType } from '../../config'; import { Layout } from '../../layouts'; import { getPrintLayoutSelectors } from '../../layouts/print_layout'; import { allowRequest } from '../network_policy'; diff --git a/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/index.test.ts b/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/index.test.ts index 13b9070edb7fb..109de627a78e5 100644 --- a/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/index.test.ts +++ b/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/index.test.ts @@ -8,11 +8,11 @@ import type { Logger } from '@kbn/core/server'; import { loggerMock } from '@kbn/logging-mocks'; import type { ScreenshotModePluginSetup } from '@kbn/screenshot-mode-plugin/server'; +import { ConfigType } from '@kbn/screenshotting-server'; import * as puppeteer from 'puppeteer'; import * as Rx from 'rxjs'; import { mergeMap, take } from 'rxjs'; import { DEFAULT_VIEWPORT, HeadlessChromiumDriverFactory } from '.'; -import { ConfigType } from '../../../config'; jest.mock('puppeteer'); diff --git a/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/index.ts b/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/index.ts index 66a4dac0c37a2..f6015c319cc0a 100644 --- a/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/index.ts +++ b/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/index.ts @@ -7,23 +7,22 @@ import type { Logger } from '@kbn/core/server'; import type { ScreenshotModePluginSetup } from '@kbn/screenshot-mode-plugin/server'; +import { ConfigType, args } from '@kbn/screenshotting-server'; import { getDataPath } from '@kbn/utils'; import { spawn } from 'child_process'; import del from 'del'; import fs from 'fs'; import { uniq } from 'lodash'; import path from 'path'; -import puppeteer, { Browser, ConsoleMessage, Page, Viewport, PageEvents } from 'puppeteer'; +import puppeteer, { Browser, ConsoleMessage, Page, PageEvents, Viewport } from 'puppeteer'; import { createInterface } from 'readline'; import * as Rx from 'rxjs'; -import { catchError, concatMap, ignoreElements, mergeMap, map, reduce, takeUntil, tap } from 'rxjs'; -import { PerformanceMetrics } from '../../../../common/types'; +import { catchError, concatMap, ignoreElements, map, mergeMap, reduce, takeUntil, tap } from 'rxjs'; import { getChromiumDisconnectedError } from '..'; import { errors } from '../../../../common'; -import { ConfigType } from '../../../config'; +import { PerformanceMetrics } from '../../../../common/types'; import { safeChildProcess } from '../../safe_child_process'; import { HeadlessChromiumDriver } from '../driver'; -import { args } from './args'; import { getMetrics } from './metrics'; interface CreatePageOptions { diff --git a/x-pack/plugins/screenshotting/server/browsers/chromium/index.ts b/x-pack/plugins/screenshotting/server/browsers/chromium/index.ts index e3f96f3a7445b..78b66601663d5 100644 --- a/x-pack/plugins/screenshotting/server/browsers/chromium/index.ts +++ b/x-pack/plugins/screenshotting/server/browsers/chromium/index.ts @@ -20,5 +20,3 @@ export const getDisallowedOutgoingUrlError = (interceptedUrl: string) => export { HeadlessChromiumDriver } from './driver'; export type { Context } from './driver'; export { DEFAULT_VIEWPORT, HeadlessChromiumDriverFactory } from './driver_factory'; -export { ChromiumArchivePaths } from './paths'; -export type { PackageInfo } from './paths'; diff --git a/x-pack/plugins/screenshotting/server/browsers/chromium/integration_tests/downloads.test.ts b/x-pack/plugins/screenshotting/server/browsers/chromium/integration_tests/downloads.test.ts index d6f215df9bef4..da9add2c33c4f 100644 --- a/x-pack/plugins/screenshotting/server/browsers/chromium/integration_tests/downloads.test.ts +++ b/x-pack/plugins/screenshotting/server/browsers/chromium/integration_tests/downloads.test.ts @@ -6,10 +6,10 @@ */ import { loggingSystemMock } from '@kbn/core-logging-server-mocks'; +import { PackageInfo } from '@kbn/screenshotting-server'; import assert from 'assert'; import axios from 'axios'; import path from 'path'; -import { PackageInfo } from '..'; import { paths as chromiumArchivePaths } from '../../../utils'; import { download } from '../../download'; import { install } from '../../install'; diff --git a/x-pack/plugins/screenshotting/server/browsers/download/index.test.ts b/x-pack/plugins/screenshotting/server/browsers/download/index.test.ts index 96d9bd0299327..24725c811f5d1 100644 --- a/x-pack/plugins/screenshotting/server/browsers/download/index.test.ts +++ b/x-pack/plugins/screenshotting/server/browsers/download/index.test.ts @@ -5,13 +5,13 @@ * 2.0. */ -import path from 'path'; -import mockFs from 'mock-fs'; +import { ChromiumArchivePaths, PackageInfo } from '@kbn/screenshotting-server'; import { access, readdir } from 'fs/promises'; -import { ChromiumArchivePaths, PackageInfo } from '../chromium'; -import { fetch } from './fetch'; -import { sha256 } from './checksum'; +import mockFs from 'mock-fs'; +import path from 'path'; import { download } from '.'; +import { sha256 } from './checksum'; +import { fetch } from './fetch'; jest.mock('./checksum'); jest.mock('./fetch'); diff --git a/x-pack/plugins/screenshotting/server/browsers/download/index.ts b/x-pack/plugins/screenshotting/server/browsers/download/index.ts index bef22c7c2196a..03c3ecda02eb4 100644 --- a/x-pack/plugins/screenshotting/server/browsers/download/index.ts +++ b/x-pack/plugins/screenshotting/server/browsers/download/index.ts @@ -5,10 +5,10 @@ * 2.0. */ -import { access } from 'fs/promises'; -import del from 'del'; import type { Logger } from '@kbn/core/server'; -import type { ChromiumArchivePaths, PackageInfo } from '../chromium'; +import type { ChromiumArchivePaths, PackageInfo } from '@kbn/screenshotting-server'; +import del from 'del'; +import { access } from 'fs/promises'; import { sha256 } from './checksum'; import { fetch } from './fetch'; diff --git a/x-pack/plugins/screenshotting/server/browsers/index.ts b/x-pack/plugins/screenshotting/server/browsers/index.ts index 0b6402a0bd6fb..3c3a1a2171686 100644 --- a/x-pack/plugins/screenshotting/server/browsers/index.ts +++ b/x-pack/plugins/screenshotting/server/browsers/index.ts @@ -10,7 +10,6 @@ export { install } from './install'; export type { Context } from './chromium'; export { getChromiumDisconnectedError, - ChromiumArchivePaths, DEFAULT_VIEWPORT, HeadlessChromiumDriver, HeadlessChromiumDriverFactory, diff --git a/x-pack/plugins/screenshotting/server/browsers/install.ts b/x-pack/plugins/screenshotting/server/browsers/install.ts index 84b9ddc85923b..2a7e79e7fe150 100644 --- a/x-pack/plugins/screenshotting/server/browsers/install.ts +++ b/x-pack/plugins/screenshotting/server/browsers/install.ts @@ -5,10 +5,10 @@ * 2.0. */ +import type { Logger } from '@kbn/core/server'; +import { ChromiumArchivePaths, PackageInfo } from '@kbn/screenshotting-server'; import del from 'del'; import path from 'path'; -import type { Logger } from '@kbn/core/server'; -import { ChromiumArchivePaths, PackageInfo } from './chromium'; import { download } from './download'; import { sha256 } from './download/checksum'; import { extract } from './extract'; diff --git a/x-pack/plugins/screenshotting/server/config/schema.test.ts b/x-pack/plugins/screenshotting/server/config/schema.test.ts index a3a141429b4db..18ef1aa41415c 100644 --- a/x-pack/plugins/screenshotting/server/config/schema.test.ts +++ b/x-pack/plugins/screenshotting/server/config/schema.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { ConfigSchema } from './schema'; +import { ConfigSchema } from '@kbn/screenshotting-server'; describe('ConfigSchema', () => { it(`should produce correct config for context {"dev": false,"dist": false}`, () => { diff --git a/x-pack/plugins/screenshotting/server/index.ts b/x-pack/plugins/screenshotting/server/index.ts index 414fde21c85a9..f8d448aba412d 100755 --- a/x-pack/plugins/screenshotting/server/index.ts +++ b/x-pack/plugins/screenshotting/server/index.ts @@ -15,7 +15,7 @@ export async function plugin(pluginInitializerContext: PluginInitializerContext) return new ScreenshottingPlugin(pluginInitializerContext); } -export { config } from './config'; +export { config } from '@kbn/screenshotting-server'; export type { PdfScreenshotOptions, PdfScreenshotResult, diff --git a/x-pack/plugins/screenshotting/server/plugin.ts b/x-pack/plugins/screenshotting/server/plugin.ts index 7cfb5d3982eb8..30ca101b8b422 100755 --- a/x-pack/plugins/screenshotting/server/plugin.ts +++ b/x-pack/plugins/screenshotting/server/plugin.ts @@ -5,8 +5,7 @@ * 2.0. */ -import { from } from 'rxjs'; -import { switchMap } from 'rxjs'; +import type { CloudSetup } from '@kbn/cloud-plugin/server'; import type { CoreSetup, CoreStart, @@ -16,11 +15,15 @@ import type { PluginInitializerContext, } from '@kbn/core/server'; import type { ScreenshotModePluginSetup } from '@kbn/screenshot-mode-plugin/server'; -import type { CloudSetup } from '@kbn/cloud-plugin/server'; -import { ChromiumArchivePaths, HeadlessChromiumDriverFactory, install } from './browsers'; -import { ConfigType, createConfig } from './config'; +import { + ChromiumArchivePaths, + ConfigType, + createConfig, + getChromiumPackage, +} from '@kbn/screenshotting-server'; +import { from, switchMap } from 'rxjs'; +import { HeadlessChromiumDriverFactory, install } from './browsers'; import { Screenshots } from './screenshots'; -import { getChromiumPackage } from './utils'; interface SetupDeps { screenshotMode: ScreenshotModePluginSetup; diff --git a/x-pack/plugins/screenshotting/server/screenshots/event_logger/index.test.ts b/x-pack/plugins/screenshotting/server/screenshots/event_logger/index.test.ts index 3a20c404ff497..5a4236704e232 100644 --- a/x-pack/plugins/screenshotting/server/screenshots/event_logger/index.test.ts +++ b/x-pack/plugins/screenshotting/server/screenshots/event_logger/index.test.ts @@ -5,11 +5,11 @@ * 2.0. */ -import moment from 'moment'; import { loggingSystemMock } from '@kbn/core/server/mocks'; +import { ConfigType } from '@kbn/screenshotting-server'; +import moment from 'moment'; import { Actions, EventLogger, ScreenshottingAction, Transactions } from '.'; import { ElementPosition } from '../get_element_position_data'; -import { ConfigType } from '../../config'; jest.mock('uuid', () => ({ v4: () => 'NEW_UUID', diff --git a/x-pack/plugins/screenshotting/server/screenshots/event_logger/index.ts b/x-pack/plugins/screenshotting/server/screenshots/event_logger/index.ts index d067b99750d19..c31e1870615b6 100644 --- a/x-pack/plugins/screenshotting/server/screenshots/event_logger/index.ts +++ b/x-pack/plugins/screenshotting/server/screenshots/event_logger/index.ts @@ -6,11 +6,11 @@ */ import { Logger, LogMeta } from '@kbn/core/server'; +import { ConfigType } from '@kbn/screenshotting-server'; import apm from 'elastic-apm-node'; import { v4 as uuidv4 } from 'uuid'; import { CaptureResult } from '..'; import { PLUGIN_ID } from '../../../common'; -import { ConfigType } from '../../config'; import { ElementPosition } from '../get_element_position_data'; import type { Screenshot } from '../types'; diff --git a/x-pack/plugins/screenshotting/server/screenshots/get_element_position_data.test.ts b/x-pack/plugins/screenshotting/server/screenshots/get_element_position_data.test.ts index c32135f530bf3..cb88b9369a5c0 100644 --- a/x-pack/plugins/screenshotting/server/screenshots/get_element_position_data.test.ts +++ b/x-pack/plugins/screenshotting/server/screenshots/get_element_position_data.test.ts @@ -6,8 +6,8 @@ */ import { loggingSystemMock } from '@kbn/core/server/mocks'; +import { ConfigType } from '@kbn/screenshotting-server'; import { createMockBrowserDriver } from '../browsers/mock'; -import { ConfigType } from '../config'; import { createMockLayout } from '../layouts/mock'; import { EventLogger } from './event_logger'; import { getElementPositionAndAttributes } from './get_element_position_data'; diff --git a/x-pack/plugins/screenshotting/server/screenshots/get_number_of_items.test.ts b/x-pack/plugins/screenshotting/server/screenshots/get_number_of_items.test.ts index a7c4f27065bcf..a968ff458804d 100644 --- a/x-pack/plugins/screenshotting/server/screenshots/get_number_of_items.test.ts +++ b/x-pack/plugins/screenshotting/server/screenshots/get_number_of_items.test.ts @@ -6,8 +6,8 @@ */ import { loggingSystemMock } from '@kbn/core/server/mocks'; +import { ConfigType } from '@kbn/screenshotting-server'; import { createMockBrowserDriver } from '../browsers/mock'; -import { ConfigType } from '../config'; import { createMockLayout } from '../layouts/mock'; import { EventLogger } from './event_logger'; import { getNumberOfItems } from './get_number_of_items'; diff --git a/x-pack/plugins/screenshotting/server/screenshots/get_render_errors.test.ts b/x-pack/plugins/screenshotting/server/screenshots/get_render_errors.test.ts index ece25b37725c8..70a914f4aa4d5 100644 --- a/x-pack/plugins/screenshotting/server/screenshots/get_render_errors.test.ts +++ b/x-pack/plugins/screenshotting/server/screenshots/get_render_errors.test.ts @@ -6,8 +6,8 @@ */ import { loggingSystemMock } from '@kbn/core/server/mocks'; +import { ConfigType } from '@kbn/screenshotting-server'; import { createMockBrowserDriver } from '../browsers/mock'; -import { ConfigType } from '../config'; import { createMockLayout } from '../layouts/mock'; import { EventLogger } from './event_logger'; import { getRenderErrors } from './get_render_errors'; diff --git a/x-pack/plugins/screenshotting/server/screenshots/get_screenshots.test.ts b/x-pack/plugins/screenshotting/server/screenshots/get_screenshots.test.ts index 52298b5966f25..cc1235a852b87 100644 --- a/x-pack/plugins/screenshotting/server/screenshots/get_screenshots.test.ts +++ b/x-pack/plugins/screenshotting/server/screenshots/get_screenshots.test.ts @@ -6,8 +6,8 @@ */ import { loggingSystemMock } from '@kbn/core/server/mocks'; +import { ConfigType } from '@kbn/screenshotting-server'; import { createMockBrowserDriver } from '../browsers/mock'; -import { ConfigType } from '../config'; import { Layout } from '../layouts'; import { createMockLayout } from '../layouts/mock'; import { EventLogger } from './event_logger'; diff --git a/x-pack/plugins/screenshotting/server/screenshots/get_time_range.test.ts b/x-pack/plugins/screenshotting/server/screenshots/get_time_range.test.ts index a7a7b9295068e..a3b4677ef7357 100644 --- a/x-pack/plugins/screenshotting/server/screenshots/get_time_range.test.ts +++ b/x-pack/plugins/screenshotting/server/screenshots/get_time_range.test.ts @@ -6,8 +6,8 @@ */ import { loggingSystemMock } from '@kbn/core/server/mocks'; +import { ConfigType } from '@kbn/screenshotting-server'; import { createMockBrowserDriver } from '../browsers/mock'; -import { ConfigType } from '../config'; import { createMockLayout } from '../layouts/mock'; import { EventLogger } from './event_logger'; import { getTimeRange } from './get_time_range'; diff --git a/x-pack/plugins/screenshotting/server/screenshots/index.test.ts b/x-pack/plugins/screenshotting/server/screenshots/index.test.ts index 3c6540f287706..6ecaa0916b0f3 100644 --- a/x-pack/plugins/screenshotting/server/screenshots/index.test.ts +++ b/x-pack/plugins/screenshotting/server/screenshots/index.test.ts @@ -8,6 +8,7 @@ import type { CloudSetup } from '@kbn/cloud-plugin/server'; import type { Logger, PackageInfo } from '@kbn/core/server'; import { httpServiceMock, loggingSystemMock } from '@kbn/core/server/mocks'; +import type { ConfigType } from '@kbn/screenshotting-server'; import { lastValueFrom, of, throwError } from 'rxjs'; import { ScreenshotOptions, Screenshots } from '.'; import { @@ -18,7 +19,6 @@ import { import * as errors from '../../common/errors'; import type { HeadlessChromiumDriverFactory } from '../browsers'; import { createMockBrowserDriver, createMockBrowserDriverFactory } from '../browsers/mock'; -import type { ConfigType } from '../config'; import type { PngScreenshotOptions } from '../formats'; import * as Layouts from '../layouts/create_layout'; import { createMockLayout } from '../layouts/mock'; diff --git a/x-pack/plugins/screenshotting/server/screenshots/observable.test.ts b/x-pack/plugins/screenshotting/server/screenshots/observable.test.ts index 9ebbead104cc6..82f1467ffa5d1 100644 --- a/x-pack/plugins/screenshotting/server/screenshots/observable.test.ts +++ b/x-pack/plugins/screenshotting/server/screenshots/observable.test.ts @@ -6,10 +6,9 @@ */ import { loggingSystemMock } from '@kbn/core/server/mocks'; -import { interval, lastValueFrom, of, throwError } from 'rxjs'; -import { map } from 'rxjs'; +import type { ConfigType } from '@kbn/screenshotting-server'; +import { interval, lastValueFrom, map, of, throwError } from 'rxjs'; import { createMockBrowserDriver } from '../browsers/mock'; -import type { ConfigType } from '../config'; import { createMockLayout } from '../layouts/mock'; import { EventLogger } from './event_logger'; import { ScreenshotObservableHandler, ScreenshotObservableOptions } from './observable'; diff --git a/x-pack/plugins/screenshotting/server/screenshots/observable.ts b/x-pack/plugins/screenshotting/server/screenshots/observable.ts index 8c9854f376706..0b7382a5770b5 100644 --- a/x-pack/plugins/screenshotting/server/screenshots/observable.ts +++ b/x-pack/plugins/screenshotting/server/screenshots/observable.ts @@ -6,8 +6,17 @@ */ import type { Headers } from '@kbn/core/server'; -import { defer, forkJoin, Observable, throwError } from 'rxjs'; -import { catchError, mergeMap, switchMapTo, timeoutWith } from 'rxjs'; +import { ConfigType, durationToNumber as toNumber } from '@kbn/screenshotting-server'; +import { + catchError, + defer, + forkJoin, + mergeMap, + Observable, + switchMapTo, + throwError, + timeoutWith, +} from 'rxjs'; import { errors } from '../../common'; import { Context, @@ -15,7 +24,6 @@ import { getChromiumDisconnectedError, HeadlessChromiumDriver, } from '../browsers'; -import { ConfigType, durationToNumber as toNumber } from '../config'; import type { PdfScreenshotOptions } from '../formats'; import { Layout } from '../layouts'; import { Actions, EventLogger } from './event_logger'; diff --git a/x-pack/plugins/screenshotting/server/screenshots/screenshots.test.ts b/x-pack/plugins/screenshotting/server/screenshots/screenshots.test.ts index 9ba12f2211cfa..4f217ef96c611 100644 --- a/x-pack/plugins/screenshotting/server/screenshots/screenshots.test.ts +++ b/x-pack/plugins/screenshotting/server/screenshots/screenshots.test.ts @@ -11,12 +11,12 @@ import type { PackageInfo } from '@kbn/core/server'; import type { Logger } from '@kbn/logging'; import { loggerMock } from '@kbn/logging-mocks'; import type { ScreenshotModePluginSetup } from '@kbn/screenshot-mode-plugin/server'; +import type { ConfigType } from '@kbn/screenshotting-server'; import puppeteer from 'puppeteer'; import * as Rx from 'rxjs'; import { firstValueFrom } from 'rxjs'; import type { PngScreenshotOptions } from '..'; import { HeadlessChromiumDriverFactory } from '../browsers'; -import type { ConfigType } from '../config'; import { Screenshots } from './screenshots'; jest.mock('puppeteer'); diff --git a/x-pack/plugins/screenshotting/server/screenshots/screenshots.ts b/x-pack/plugins/screenshotting/server/screenshots/screenshots.ts index 24a00ed00108a..abc731b4fbcfe 100644 --- a/x-pack/plugins/screenshotting/server/screenshots/screenshots.ts +++ b/x-pack/plugins/screenshotting/server/screenshots/screenshots.ts @@ -8,13 +8,28 @@ import ipaddr from 'ipaddr.js'; import { defaultsDeep, sum } from 'lodash'; import moment from 'moment'; -import { Observable, from, of, throwError } from 'rxjs'; -import { catchError, concatMap, first, map, mergeMap, take, takeUntil, tap, toArray } from 'rxjs'; +import { + Observable, + catchError, + concatMap, + first, + from, + map, + mergeMap, + of, + take, + takeUntil, + tap, + throwError, + toArray, +} from 'rxjs'; import type { CloudSetup } from '@kbn/cloud-plugin/server'; import type { HttpServiceSetup, Logger, PackageInfo } from '@kbn/core/server'; import { Semaphore } from '@kbn/std'; +import type { ConfigType } from '@kbn/screenshotting-server'; +import { durationToNumber } from '@kbn/screenshotting-server'; import { CaptureResult, ScreenshotOptions, ScreenshotResult } from '.'; import { SCREENSHOTTING_APP_ID, @@ -24,8 +39,6 @@ import { } from '../../common'; import { HeadlessChromiumDriverFactory } from '../browsers'; import { systemHasInsufficientMemory } from '../cloud'; -import type { ConfigType } from '../config'; -import { durationToNumber } from '../config'; import { PdfScreenshotOptions, PdfScreenshotResult, diff --git a/x-pack/plugins/screenshotting/server/utils.ts b/x-pack/plugins/screenshotting/server/utils.ts index cee0837e067a1..40262b1e65e7b 100644 --- a/x-pack/plugins/screenshotting/server/utils.ts +++ b/x-pack/plugins/screenshotting/server/utils.ts @@ -5,22 +5,11 @@ * 2.0. */ -import os from 'os'; -import { ChromiumArchivePaths, download as baseDownload, install as baseInstall } from './browsers'; +import { ChromiumArchivePaths } from '@kbn/screenshotting-server'; +import { download as baseDownload, install as baseInstall } from './browsers'; const paths = new ChromiumArchivePaths(); -export const getChromiumPackage = () => { - const platform = process.platform; - const architecture = os.arch(); - - const chromiumPackageInfo = paths.find(process.platform, architecture); - if (!chromiumPackageInfo) { - throw new Error(`Unsupported platform: ${platform}-${architecture}`); - } - return chromiumPackageInfo; -}; - export const download = baseDownload.bind(undefined, paths); export const install = baseInstall.bind(undefined, paths); diff --git a/x-pack/plugins/screenshotting/tsconfig.json b/x-pack/plugins/screenshotting/tsconfig.json index 8421b0c9fdd7d..5e37b84bbf2e9 100644 --- a/x-pack/plugins/screenshotting/tsconfig.json +++ b/x-pack/plugins/screenshotting/tsconfig.json @@ -16,17 +16,16 @@ "@kbn/screenshot-mode-plugin", "@kbn/cloud-plugin", "@kbn/utility-types", - "@kbn/config-schema", "@kbn/logging", "@kbn/std", "@kbn/i18n", "@kbn/utils", - "@kbn/safer-lodash-set", "@kbn/core-logging-server-mocks", "@kbn/logging-mocks", "@kbn/core-http-server", "@kbn/core-plugins-server", "@kbn/task-manager-plugin", + "@kbn/screenshotting-server", ], "exclude": [ "target/**/*", diff --git a/yarn.lock b/yarn.lock index 549fd4e2e86bf..d6eaf10e8d0eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6212,6 +6212,10 @@ version "0.0.0" uid "" +"@kbn/screenshotting-server@link:packages/kbn-screenshotting-server": + version "0.0.0" + uid "" + "@kbn/search-api-panels@link:packages/kbn-search-api-panels": version "0.0.0" uid "" From 307b1d5f49fbecd5e053bfcdbe94918fde1b2629 Mon Sep 17 00:00:00 2001 From: Elastic Machine Date: Thu, 22 Aug 2024 19:46:42 +0100 Subject: [PATCH 31/59] [main] Sync bundled packages with Package Storage (#191121) Automated by https://buildkite.com/elastic/package-storage-infra-kibana-discover-release-branches/builds/1147 --- fleet_packages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fleet_packages.json b/fleet_packages.json index b1e18cc431484..5c345da5fc02e 100644 --- a/fleet_packages.json +++ b/fleet_packages.json @@ -30,7 +30,7 @@ }, { "name": "elastic_agent", - "version": "2.0.2" + "version": "2.0.3" }, { "name": "endpoint", From 58ba9cce9246b1a66f041b50eacfa2ddb30a42f2 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Fri, 23 Aug 2024 05:07:06 +1000 Subject: [PATCH 32/59] [ES|QL] Update function metadata (#191118) This PR updates the function definitions and inline docs based on the latest metadata from Elasticsearch. --- .../src/definitions/functions.ts | 155 ++++++++++++++++ .../src/validation/validation.test.ts | 165 ++++++++++++++++++ .../src/esql_documentation_sections.tsx | 34 ++++ 3 files changed, 354 insertions(+) diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts index a548287683e5c..c627bc0a62176 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts @@ -4145,6 +4145,160 @@ const mvMinDefinition: FunctionDefinition = { ], }; +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const mvPercentileDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_percentile', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_percentile', { + defaultMessage: + 'Converts a multivalued field into a single valued field containing the value at which a certain percentage of observed values occur.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + { + name: 'percentile', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + { + name: 'percentile', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + { + name: 'percentile', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + { + name: 'percentile', + type: 'double', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + { + name: 'percentile', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + { + name: 'percentile', + type: 'long', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + { + name: 'percentile', + type: 'double', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + { + name: 'percentile', + type: 'integer', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + { + name: 'percentile', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW values = [5, 5, 10, 12, 5000]\n| EVAL p50 = MV_PERCENTILE(values, 50), median = MV_MEDIAN(values)', + ], +}; + // Do not edit this manually... generated by scripts/generate_function_definitions.ts const mvPseriesWeightedSumDefinition: FunctionDefinition = { type: 'eval', @@ -8323,6 +8477,7 @@ export const evalFunctionDefinitions = [ mvMaxDefinition, mvMedianDefinition, mvMinDefinition, + mvPercentileDefinition, mvPseriesWeightedSumDefinition, mvSliceDefinition, mvSortDefinition, diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts index bd1de77be408a..f67c7d120fcd3 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts @@ -15879,6 +15879,171 @@ describe('validation logic', () => { [] ); }); + + describe('mv_percentile', () => { + testErrorsAndWarnings('row var = mv_percentile(5.5, 5.5)', []); + testErrorsAndWarnings('row mv_percentile(5.5, 5.5)', []); + testErrorsAndWarnings('row var = mv_percentile(to_double(true), to_double(true))', []); + testErrorsAndWarnings('row var = mv_percentile(5.5, 5)', []); + testErrorsAndWarnings('row mv_percentile(5.5, 5)', []); + testErrorsAndWarnings('row var = mv_percentile(to_double(true), to_integer(true))', []); + testErrorsAndWarnings('row var = mv_percentile(to_double(true), 5)', []); + testErrorsAndWarnings('row var = mv_percentile(5, 5.5)', []); + testErrorsAndWarnings('row mv_percentile(5, 5.5)', []); + testErrorsAndWarnings('row var = mv_percentile(to_integer(true), to_double(true))', []); + testErrorsAndWarnings('row var = mv_percentile(5, 5)', []); + testErrorsAndWarnings('row mv_percentile(5, 5)', []); + testErrorsAndWarnings('row var = mv_percentile(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = mv_percentile(to_integer(true), 5)', []); + testErrorsAndWarnings('row var = mv_percentile(5, to_double(true))', []); + testErrorsAndWarnings('row var = mv_percentile(5, to_integer(true))', []); + + testErrorsAndWarnings('row var = mv_percentile(true, true)', [ + 'Argument of [mv_percentile] must be [double], found value [true] type [boolean]', + 'Argument of [mv_percentile] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | where mv_percentile(doubleField, doubleField) > 0', + [] + ); + + testErrorsAndWarnings( + 'from a_index | where mv_percentile(booleanField, booleanField) > 0', + [ + 'Argument of [mv_percentile] must be [double], found value [booleanField] type [boolean]', + 'Argument of [mv_percentile] must be [double], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | where mv_percentile(doubleField, integerField) > 0', + [] + ); + testErrorsAndWarnings('from a_index | where mv_percentile(doubleField, longField) > 0', []); + testErrorsAndWarnings( + 'from a_index | where mv_percentile(integerField, doubleField) > 0', + [] + ); + testErrorsAndWarnings( + 'from a_index | where mv_percentile(integerField, integerField) > 0', + [] + ); + testErrorsAndWarnings( + 'from a_index | where mv_percentile(integerField, longField) > 0', + [] + ); + testErrorsAndWarnings('from a_index | where mv_percentile(longField, doubleField) > 0', []); + testErrorsAndWarnings( + 'from a_index | where mv_percentile(longField, integerField) > 0', + [] + ); + testErrorsAndWarnings('from a_index | where mv_percentile(longField, longField) > 0', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_percentile(doubleField, doubleField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_percentile(doubleField, doubleField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_percentile(to_double(booleanField), to_double(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval mv_percentile(booleanField, booleanField)', [ + 'Argument of [mv_percentile] must be [double], found value [booleanField] type [boolean]', + 'Argument of [mv_percentile] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_percentile(doubleField, integerField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_percentile(doubleField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_percentile(to_double(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_percentile(doubleField, longField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_percentile(doubleField, longField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_percentile(to_double(booleanField), longField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_percentile(integerField, doubleField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_percentile(integerField, doubleField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_percentile(to_integer(booleanField), to_double(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_percentile(integerField, integerField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_percentile(integerField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_percentile(to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_percentile(integerField, longField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_percentile(integerField, longField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_percentile(to_integer(booleanField), longField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_percentile(longField, doubleField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_percentile(longField, doubleField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_percentile(longField, to_double(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_percentile(longField, integerField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_percentile(longField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_percentile(longField, to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_percentile(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval mv_percentile(longField, longField)', []); + + testErrorsAndWarnings( + 'from a_index | eval mv_percentile(doubleField, doubleField, extraArg)', + ['Error: [mv_percentile] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings('from a_index | sort mv_percentile(doubleField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_percentile(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_percentile(nullVar, nullVar)', []); + }); }); }); diff --git a/packages/kbn-text-based-editor/src/esql_documentation_sections.tsx b/packages/kbn-text-based-editor/src/esql_documentation_sections.tsx index 05cb7b452c18b..9976078804819 100644 --- a/packages/kbn-text-based-editor/src/esql_documentation_sections.tsx +++ b/packages/kbn-text-based-editor/src/esql_documentation_sections.tsx @@ -2176,6 +2176,39 @@ export const functions = { ROW a=[2, 1] | EVAL min_a = MV_MIN(a) \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_percentile', + { + defaultMessage: 'MV_PERCENTILE', + } + ), + description: ( + + + ### MV_PERCENTILE + Converts a multivalued field into a single valued field containing the value at which a certain percentage of observed values occur. + + \`\`\` + ROW values = [5, 5, 10, 12, 5000] + | EVAL p50 = MV_PERCENTILE(values, 50), median = MV_MEDIAN(values) + \`\`\` `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', @@ -3370,6 +3403,7 @@ export const functions = { ROW string = ["1953-09-02T00:00:00.000Z", "1964-06-02T00:00:00.000Z", "1964-06-02 00:00:00"] | EVAL datetime = TO_DATETIME(string) \`\`\` + Note: Note that when converting from nanosecond resolution to millisecond resolution with this function, the nanosecond date is truncated, not rounded. `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', From b6ce155bb5e434ac826554fb5f04283d50fdfd2c Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Thu, 22 Aug 2024 12:43:59 -0700 Subject: [PATCH 33/59] [DOCS] Clarify access to alerting system indices (#191114) --- docs/user/alerting/alerting-setup.asciidoc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/user/alerting/alerting-setup.asciidoc b/docs/user/alerting/alerting-setup.asciidoc index cf1f84c9cc032..b3af9bfbe0303 100644 --- a/docs/user/alerting/alerting-setup.asciidoc +++ b/docs/user/alerting/alerting-setup.asciidoc @@ -54,12 +54,11 @@ To use {alert-features} in a {kib} app, you must have the appropriate feature pr |=== | Action | {kib} privileges -| Give full access to manage alerts, connectors, and rules in *{stack-manage-app}* or *Discover* +| Give full access to manage alerts, connectors, and rules in *{stack-manage-app}* a| * `All` for the *Management > {stack-rules-feature}* feature. * `All` for the *Management > Rules Settings* feature. * `All` for the *Management > {connectors-feature}* feature. -* `Read` index privileges for the `.alerts-*` system indices [NOTE] ==== @@ -77,12 +76,11 @@ For {observability} rules, you must have `all` privileges for the appropriate {o For Security rules, refer to {security-guide}/detections-permissions-section.html[Detections prerequisites and requirements]. ==== -| Give view-only access to alerts, connectors, and rules in *{stack-manage-app}* or *Discover* +| Give view-only access to alerts, connectors, and rules in *{stack-manage-app}* a| * `Read` for the *Management > {stack-rules-feature}* feature. * `Read` for the *Management > Rules Settings* feature. * `Read` for the *Management > {connectors-feature}* feature. -* `Read` index privileges for the `.alerts-*` system indices [NOTE] ==== @@ -93,12 +91,16 @@ For {observability} rules, you must have `read` privileges for the appropriate { For Security rules, refer to {security-guide}/detections-permissions-section.html[Detections prerequisites and requirements]. ==== -| Revoke all access to alerts, connectors, and rules in *{stack-manage-app}* or *Discover* +| Give view-only access to alerts in *Discover* or *Dashboards* +a| +* `Read` index privileges for the `.alerts-*` system indices. + +| Revoke all access to alerts, connectors, and rules in *{stack-manage-app}*, *Discover*, or *Dashboards* a| * `None` for the *Management > {stack-rules-feature}* feature. * `None` for the *Management > Rules Settings* feature. * `None` for the *Management > {connectors-feature}* feature. - +* No index privileges for the `.alerts-*` system indices. |=== For more information on configuring roles that provide access to features, go to <>. From 79051d46f7481db75b37cddf12f3d770a845e40c Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Thu, 22 Aug 2024 14:13:51 -0600 Subject: [PATCH 34/59] [controls] Refactor control group settings functional tests (#190999) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refactor control group settings tests 1. move non-functional test cases to unit tests 2. use pre-built dashboard to avoid time of building dashboard in test ### Before Tests take 4 minutes to run locally Screenshot 2024-08-21 at 3 12 31 PM ### After Tests take 1 minute to run locally Screenshot 2024-08-21 at 2 53 37 PM --------- Co-authored-by: Elastic Machine --- .../components/control_group_editor.test.tsx | 50 +++++++ .../{ => components}/control_group_editor.tsx | 18 +-- .../components/control_panel.test.tsx | 106 +++++++++++++++ .../components/control_panel.tsx | 9 +- .../open_edit_control_group_flyout.tsx | 2 +- .../controls/common/control_group_settings.ts | 125 +----------------- .../controls/common/index.ts | 1 - .../dashboard/current/kibana.json | 50 +++++++ 8 files changed, 221 insertions(+), 140 deletions(-) create mode 100644 src/plugins/controls/public/react_controls/control_group/components/control_group_editor.test.tsx rename src/plugins/controls/public/react_controls/control_group/{ => components}/control_group_editor.tsx (95%) create mode 100644 src/plugins/controls/public/react_controls/control_group/components/control_panel.test.tsx diff --git a/src/plugins/controls/public/react_controls/control_group/components/control_group_editor.test.tsx b/src/plugins/controls/public/react_controls/control_group/components/control_group_editor.test.tsx new file mode 100644 index 0000000000000..99feed42d0857 --- /dev/null +++ b/src/plugins/controls/public/react_controls/control_group/components/control_group_editor.test.tsx @@ -0,0 +1,50 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { BehaviorSubject } from 'rxjs'; +import { render } from '@testing-library/react'; +import { ControlGroupEditor } from './control_group_editor'; +import { ControlGroupApi, ControlStyle, ParentIgnoreSettings } from '../../..'; +import { ControlGroupChainingSystem, DEFAULT_CONTROL_STYLE } from '../../../../common'; +import { DefaultControlApi } from '../../controls/types'; + +describe('render', () => { + const children$ = new BehaviorSubject<{ [key: string]: DefaultControlApi }>({}); + const props = { + api: { + children$, + } as unknown as ControlGroupApi, + onCancel: () => {}, + onSave: () => {}, + onDeleteAll: () => {}, + stateManager: { + chainingSystem: new BehaviorSubject('HIERARCHICAL'), + labelPosition: new BehaviorSubject(DEFAULT_CONTROL_STYLE), + autoApplySelections: new BehaviorSubject(true), + ignoreParentSettings: new BehaviorSubject(undefined), + }, + }; + + beforeEach(() => { + children$.next({}); + }); + + test('should not display delete all controls button when there are no controls', () => { + const editor = render(); + expect(editor.queryByTestId('delete-all-controls-button')).not.toBeInTheDocument(); + }); + + test('should display delete all controls button when there are controls', () => { + children$.next({ + alpha: {} as unknown as DefaultControlApi, + }); + const editor = render(); + expect(editor.queryByTestId('delete-all-controls-button')).toBeInTheDocument(); + }); +}); diff --git a/src/plugins/controls/public/react_controls/control_group/control_group_editor.tsx b/src/plugins/controls/public/react_controls/control_group/components/control_group_editor.tsx similarity index 95% rename from src/plugins/controls/public/react_controls/control_group/control_group_editor.tsx rename to src/plugins/controls/public/react_controls/control_group/components/control_group_editor.tsx index 9c8ca5b52b0ae..a65c8c1ac5bba 100644 --- a/src/plugins/controls/public/react_controls/control_group/control_group_editor.tsx +++ b/src/plugins/controls/public/react_controls/control_group/components/control_group_editor.tsx @@ -27,11 +27,11 @@ import { } from '@elastic/eui'; import { css } from '@emotion/react'; import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; -import { ControlStyle, ParentIgnoreSettings } from '../..'; +import { ControlStyle, ParentIgnoreSettings } from '../../..'; -import { ControlStateManager } from '../controls/types'; -import { ControlGroupStrings } from './control_group_strings'; -import { ControlGroupApi, ControlGroupEditorState } from './types'; +import { ControlStateManager } from '../../controls/types'; +import { ControlGroupStrings } from '../control_group_strings'; +import { ControlGroupApi, ControlGroupEditorState } from '../types'; const CONTROL_LAYOUT_OPTIONS = [ { @@ -46,7 +46,7 @@ const CONTROL_LAYOUT_OPTIONS = [ }, ]; -interface EditControlGroupProps { +interface Props { onCancel: () => void; onSave: () => void; onDeleteAll: () => void; @@ -54,13 +54,7 @@ interface EditControlGroupProps { api: ControlGroupApi; // controls must always have a parent API } -export const ControlGroupEditor = ({ - onCancel, - onSave, - onDeleteAll, - stateManager, - api, -}: EditControlGroupProps) => { +export const ControlGroupEditor = ({ onCancel, onSave, onDeleteAll, stateManager, api }: Props) => { const [ children, selectedLabelPosition, diff --git a/src/plugins/controls/public/react_controls/control_group/components/control_panel.test.tsx b/src/plugins/controls/public/react_controls/control_group/components/control_panel.test.tsx new file mode 100644 index 0000000000000..34d3f344b1a81 --- /dev/null +++ b/src/plugins/controls/public/react_controls/control_group/components/control_panel.test.tsx @@ -0,0 +1,106 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useImperativeHandle } from 'react'; +import { BehaviorSubject } from 'rxjs'; +import { render, waitFor } from '@testing-library/react'; +import { ControlPanel } from './control_panel'; +import { registry as presentationUtilServicesRegistry } from '@kbn/presentation-util-plugin/public/services/plugin_services.story'; +import { pluginServices as presentationUtilPluginServices } from '@kbn/presentation-util-plugin/public/services'; +import { ControlStyle, ControlWidth } from '../../..'; + +describe('render', () => { + let mockApi = {}; + const Component = React.forwardRef((_, ref) => { + // expose the api into the imperative handle + useImperativeHandle(ref, () => mockApi, []); + + return
; + }) as any; + + beforeAll(() => { + presentationUtilServicesRegistry.start({}); + presentationUtilPluginServices.setRegistry(presentationUtilServicesRegistry); + presentationUtilPluginServices.getServices().uiActions.getTriggerCompatibleActions = jest + .fn() + .mockImplementation(() => { + return [ + { + isCompatible: jest.fn().mockResolvedValue(true), + id: 'testAction', + MenuItem: () =>
test1
, + }, + ]; + }); + }); + + beforeEach(() => { + mockApi = {}; + }); + + describe('control width', () => { + test('defaults to medium and grow enabled', async () => { + const controlPanel = render(); + await waitFor(() => { + const controlFrame = controlPanel.getByTestId('control-frame'); + expect(controlFrame.getAttribute('class')).toContain('controlFrameWrapper--medium'); + expect(controlFrame.getAttribute('class')).toContain('controlFrameWrapper--grow'); + }); + }); + + test('should use small class when using small width', async () => { + mockApi = { + uuid: 'control1', + width: new BehaviorSubject('small'), + }; + const controlPanel = render(); + await waitFor(() => { + const controlFrame = controlPanel.getByTestId('control-frame'); + expect(controlFrame.getAttribute('class')).toContain('controlFrameWrapper--small'); + }); + }); + }); + + describe('label position', () => { + test('should use one line layout class when using one line layout', async () => { + mockApi = { + uuid: 'control1', + parentApi: { + labelPosition: new BehaviorSubject('oneLine'), + }, + }; + const controlPanel = render(); + await waitFor(() => { + const floatingActions = controlPanel.getByTestId( + 'presentationUtil__floatingActions__control1' + ); + expect(floatingActions.getAttribute('class')).toContain( + 'controlFrameFloatingActions--oneLine' + ); + }); + }); + + test('should use two line layout class when using two line layout', async () => { + mockApi = { + uuid: 'control1', + parentApi: { + labelPosition: new BehaviorSubject('twoLine'), + }, + }; + const controlPanel = render(); + await waitFor(() => { + const floatingActions = controlPanel.getByTestId( + 'presentationUtil__floatingActions__control1' + ); + expect(floatingActions.getAttribute('class')).toContain( + 'controlFrameFloatingActions--twoLine' + ); + }); + }); + }); +}); diff --git a/src/plugins/controls/public/react_controls/control_group/components/control_panel.tsx b/src/plugins/controls/public/react_controls/control_group/components/control_panel.tsx index b83b0b464b5c5..9ed24904f25cd 100644 --- a/src/plugins/controls/public/react_controls/control_group/components/control_panel.tsx +++ b/src/plugins/controls/public/react_controls/control_group/components/control_panel.tsx @@ -27,7 +27,7 @@ import { useBatchedOptionalPublishingSubjects, } from '@kbn/presentation-publishing'; import { FloatingActions } from '@kbn/presentation-util-plugin/public'; -import { DEFAULT_CONTROL_WIDTH } from '../../../../common'; +import { DEFAULT_CONTROL_GROW, DEFAULT_CONTROL_WIDTH } from '../../../../common'; import { ControlPanelProps, DefaultControlApi } from '../../controls/types'; import { ControlError } from './control_error'; @@ -121,17 +121,18 @@ export const ControlPanel = { before(async () => { - await dashboard.navigateToApp(); - await dashboard.gotoDashboardLandingPage(); - await dashboard.clickNewDashboard(); - await timePicker.setDefaultDataRange(); - await dashboard.saveDashboard('Test Control Group Settings'); - }); - - it('adjust layout of controls', async () => { + await dashboard.loadSavedDashboard('control group settings test dashboard'); await dashboard.switchToEditMode(); - await dashboardControls.createControl({ - controlType: OPTIONS_LIST_CONTROL, - dataViewTitle: 'animals-*', - fieldName: 'sound.keyword', - }); - await dashboardControls.adjustControlsLayout('twoLine'); - const controlGroupWrapper = await testSubjects.find('controls-group-wrapper'); - expect(await controlGroupWrapper.elementHasClass('controlsWrapper--twoLine')).to.be(true); - }); - - describe('apply new default width and grow', async () => { - it('defaults to medium width and grow enabled', async () => { - await dashboardControls.openCreateControlFlyout(); - const mediumWidthButton = await testSubjects.find('control-editor-width-medium'); - expect(await mediumWidthButton.elementHasClass('euiButtonGroupButton-isSelected')).to.be( - true - ); - const growSwitch = await testSubjects.find('control-editor-grow-switch'); - expect(await growSwitch.getAttribute('aria-checked')).to.be('true'); - await testSubjects.click('control-editor-cancel'); - }); - - it('sets default to width and grow of last created control', async () => { - await dashboardControls.createControl({ - controlType: OPTIONS_LIST_CONTROL, - dataViewTitle: 'animals-*', - fieldName: 'name.keyword', - width: 'small', - grow: false, - }); - - const controlIds = await dashboardControls.getAllControlIds(); - const firstControl = await find.byXPath(`//div[@data-control-id="${controlIds[0]}"]`); - expect(await firstControl.elementHasClass('controlFrameWrapper--medium')).to.be(true); - expect(await firstControl.getAttribute('class')).not.to.contain('euiFlexItem-growZero'); - const secondControl = await find.byXPath(`//div[@data-control-id="${controlIds[1]}"]`); - expect(await secondControl.elementHasClass('controlFrameWrapper--small')).to.be(true); - expect(await secondControl.getAttribute('class')).to.contain('euiFlexItem-growZero'); - - await dashboardControls.openCreateControlFlyout(); - const smallWidthButton = await testSubjects.find('control-editor-width-small'); - expect(await smallWidthButton.elementHasClass('euiButtonGroupButton-isSelected')).to.be( - true - ); - const growSwitch = await testSubjects.find('control-editor-grow-switch'); - expect(await growSwitch.getAttribute('aria-checked')).to.be('false'); - await testSubjects.click('control-editor-cancel'); - }); }); describe('filtering settings', async () => { - let firstOptionsListId: string; + const firstOptionsListId = 'bcb81550-0843-44ea-9020-6c1ebf3228ac'; let beforeCount: number; - let rangeSliderId: string; + const rangeSliderId = '15925456-9e12-4b08-b2e6-4ae6ac27114d'; let beforeRange: number; const getRange = async () => { @@ -106,19 +48,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }; before(async () => { - await dashboardControls.createControl({ - controlType: RANGE_SLIDER_CONTROL, - dataViewTitle: 'animals-*', - fieldName: 'weightLbs', - }); - await dashboard.clickQuickSave(); - - firstOptionsListId = (await dashboardControls.getAllControlIds())[0]; await dashboardControls.optionsListWaitForLoading(firstOptionsListId); await dashboardControls.optionsListOpenPopover(firstOptionsListId); beforeCount = await dashboardControls.optionsListPopoverGetAvailableOptionsCount(); - rangeSliderId = (await dashboardControls.getAllControlIds())[2]; beforeRange = await getRange(); }); @@ -172,65 +105,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - describe('flyout only show settings that are relevant', async () => { - before(async () => { - await dashboard.switchToEditMode(); - }); - - it('when no controls', async () => { - await dashboardControls.deleteAllControls(); - await dashboardControls.openControlGroupSettingsFlyout(); - await testSubjects.missingOrFail('delete-all-controls-button'); - }); - - it('when at least one control', async () => { - await dashboardControls.createControl({ - controlType: OPTIONS_LIST_CONTROL, - dataViewTitle: 'animals-*', - fieldName: 'sound.keyword', - }); - await dashboardControls.openControlGroupSettingsFlyout(); - await testSubjects.existOrFail('delete-all-controls-button'); - }); - - afterEach(async () => { - await testSubjects.click('euiFlyoutCloseButton'); - if (await testSubjects.exists('confirmModalConfirmButton')) { - await testSubjects.click('confirmModalConfirmButton'); - } - }); - - after(async () => { - await dashboardControls.deleteAllControls(); - }); - }); - describe('control group settings flyout closes', async () => { - it('on save', async () => { - await dashboardControls.openControlGroupSettingsFlyout(); - await dashboard.saveDashboard('Test Control Group Settings', { - saveAsNew: false, - exitFromEditMode: false, - }); - await testSubjects.missingOrFail('control-group-settings-flyout'); - }); - - it('on view mode change', async () => { - await dashboardControls.openControlGroupSettingsFlyout(); - await dashboard.clickCancelOutOfEditMode(); - await testSubjects.missingOrFail('control-group-settings-flyout'); - }); - it('when navigating away from dashboard', async () => { await dashboard.switchToEditMode(); await dashboardControls.openControlGroupSettingsFlyout(); await dashboard.gotoDashboardLandingPage(); await testSubjects.missingOrFail('control-group-settings-flyout'); }); - - after(async () => { - await dashboard.loadSavedDashboard('Test Control Group Settings'); - }); }); }); } diff --git a/test/functional/apps/dashboard_elements/controls/common/index.ts b/test/functional/apps/dashboard_elements/controls/common/index.ts index c5fb1621e61f3..58c9a3dcb80fe 100644 --- a/test/functional/apps/dashboard_elements/controls/common/index.ts +++ b/test/functional/apps/dashboard_elements/controls/common/index.ts @@ -26,7 +26,6 @@ export default function ({ loadTestFile, getService, getPageObjects }: FtrProvid defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - // enable the controls lab and navigate to the dashboard listing page to start await dashboard.navigateToApp(); await dashboard.preserveCrossAppState(); } diff --git a/test/functional/fixtures/kbn_archiver/dashboard/current/kibana.json b/test/functional/fixtures/kbn_archiver/dashboard/current/kibana.json index 500443f11900a..a89dcf714dfc3 100644 --- a/test/functional/fixtures/kbn_archiver/dashboard/current/kibana.json +++ b/test/functional/fixtures/kbn_archiver/dashboard/current/kibana.json @@ -3175,3 +3175,53 @@ "coreMigrationVersion": "8.8.0", "typeMigrationVersion": "8.9.0" } + +{ + "id": "153e3302-1b37-4c45-9b11-91deec40ab47", + "type": "dashboard", + "namespaces": [ + "default" + ], + "updated_at": "2024-08-21T20:48:22.388Z", + "created_at": "2024-08-21T20:46:21.250Z", + "version": "WzQ4MCwxXQ==", + "attributes": { + "version": 2, + "controlGroupInput": { + "controlStyle": "oneLine", + "chainingSystem": "HIERARCHICAL", + "showApplySelections": false, + "panelsJSON": "{\"bcb81550-0843-44ea-9020-6c1ebf3228ac\":{\"type\":\"optionsListControl\",\"order\":0,\"grow\":true,\"width\":\"medium\",\"explicitInput\":{\"id\":\"bcb81550-0843-44ea-9020-6c1ebf3228ac\",\"fieldName\":\"sound.keyword\",\"title\":\"sound.keyword\",\"grow\":true,\"width\":\"medium\",\"searchTechnique\":\"prefix\",\"enhancements\":{}}},\"15925456-9e12-4b08-b2e6-4ae6ac27114d\":{\"type\":\"rangeSliderControl\",\"order\":1,\"grow\":true,\"width\":\"medium\",\"explicitInput\":{\"fieldName\":\"weightLbs\",\"title\":\"weightLbs\",\"searchTechnique\":\"exact\",\"id\":\"15925456-9e12-4b08-b2e6-4ae6ac27114d\",\"enhancements\":{}}}}", + "ignoreParentSettingsJSON": "{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}" + }, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "description": "", + "refreshInterval": { + "pause": true, + "value": 60000 + }, + "timeRestore": true, + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "panelsJSON": "[]", + "timeFrom": "2018-01-01T00:00:00.000Z", + "title": "control group settings test dashboard", + "timeTo": "2018-04-13T00:00:00.000Z" + }, + "references": [ + { + "name": "controlGroup_bcb81550-0843-44ea-9020-6c1ebf3228ac:optionsListDataView", + "type": "index-pattern", + "id": "a0f483a0-3dc9-11e8-8660-4d65aa086b3c" + }, + { + "name": "controlGroup_15925456-9e12-4b08-b2e6-4ae6ac27114d:rangeSliderDataView", + "type": "index-pattern", + "id": "a0f483a0-3dc9-11e8-8660-4d65aa086b3c" + } + ], + "managed": false, + "coreMigrationVersion": "8.8.0", + "typeMigrationVersion": "10.2.0" +} From b660d42b08a645bcbb8f1e5c78341f32f6c5d5fe Mon Sep 17 00:00:00 2001 From: Marius Iversen Date: Thu, 22 Aug 2024 22:52:28 +0200 Subject: [PATCH 35/59] [Elastic Assistant] Update default assistant graph (#190686) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary **NOTE** I will need help testing this before we merge it! I spoke with @spong about an upcoming PR we have here: https://github.com/elastic/kibana/pull/190426 which bumps the langgraph version from 0.0.31 to 0.0.34, unfortunately this caused a lot of type errors in the default assistant. After some more discussion we proposed to open a PR that removes some of the more complex layers and to fix up the type issues. Though I have not worked on this graph before, the changes hopefully makes sense 👍 Graph flow: ![image](https://github.com/user-attachments/assets/911190c1-2cdc-429f-bd1b-2b4a6a343729) The PR changes the below items to remove some of the abstractions and resolve some of the type issues, also adds a few improvements in general: - Moves `llmType`, `bedrockChatEnabled`, `isStream` and `conversationId` to be invoke parameters rather than compile parameters. This allows them to be used in state, and removes the need to pass them everywhere as parameters. Adding them to the state also allows them to be available in langsmith. - Removes the constants defining each node with wrappers and rather expose them directly as async functions. This removes a lot of the boilerplate code and it makes reading the stacktraces much easier. - Moved to a single `stepRouter` used for the current conditional edges. This allows one to very easily extend the routing between either existing or new nodes, and makes it much easier to understand what conditions are routed where. - Exports a common `NodeType` object constant (no need for the extra compile overhead of Enums here, we are only using strings), to make the node name strings auto-complete and prevent hardcoded names for the router. - Added a `modelInput` node to be the starter node. This was first because adding nodes inside if conditions usually create errors, so it was created to be able to set the `hasRespondStep` state. However this node is nice to have as an entrypoint in which you find yourself wanting to change the state based on the invoke parameters or other conditions retrieved from other parts of the stack etc before it continues to any of the other nodes. - Added a `yarn draw-graph` command, that outputs to `docs/img/default_assistant_graph.png`. This is then also included in the readme. This makes it better for changes by other teams (like me) to understand the intended graph workflows easier. ### 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 ### 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) --------- Co-authored-by: Elastic Machine --- package.json | 2 +- x-pack/plugins/elastic_assistant/README.md | 10 + .../docs/img/default_assistant_graph.png | Bin 0 -> 30104 bytes x-pack/plugins/elastic_assistant/package.json | 5 +- .../elastic_assistant/scripts/draw_graph.js | 9 + .../scripts/draw_graph_script.ts | 66 ++++++ .../default_assistant_graph/constants.ts | 17 ++ .../graphs/default_assistant_graph/graph.ts | 216 +++++++----------- .../default_assistant_graph/helpers.test.ts | 18 +- .../graphs/default_assistant_graph/helpers.ts | 16 +- .../graphs/default_assistant_graph/index.ts | 17 +- .../nodes/execute_tools.ts | 25 +- .../nodes/generate_chat_title.ts | 22 +- .../nodes/get_persisted_conversation.ts | 35 ++- .../nodes/model_input.ts | 31 +++ .../nodes/persist_conversation_changes.ts | 34 +-- .../default_assistant_graph/nodes/respond.ts | 22 +- .../nodes/run_agent.ts | 26 +-- .../nodes/should_continue.ts | 57 ----- .../nodes/step_router.ts | 38 +++ .../graphs/default_assistant_graph/types.ts | 16 ++ .../server/routes/evaluate/post_evaluate.ts | 23 +- yarn.lock | 43 +++- 23 files changed, 437 insertions(+), 311 deletions(-) create mode 100644 x-pack/plugins/elastic_assistant/docs/img/default_assistant_graph.png create mode 100644 x-pack/plugins/elastic_assistant/scripts/draw_graph.js create mode 100644 x-pack/plugins/elastic_assistant/scripts/draw_graph_script.ts create mode 100644 x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/constants.ts create mode 100644 x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/model_input.ts delete mode 100644 x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/should_continue.ts create mode 100644 x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/step_router.ts diff --git a/package.json b/package.json index 20221c21a8f7b..aeb93ebd56b5e 100644 --- a/package.json +++ b/package.json @@ -972,7 +972,7 @@ "@langchain/community": "0.2.18", "@langchain/core": "^0.2.18", "@langchain/google-genai": "^0.0.23", - "@langchain/langgraph": "^0.0.31", + "@langchain/langgraph": "0.0.34", "@langchain/openai": "^0.1.3", "@langtrase/trace-attributes": "^3.0.8", "@launchdarkly/node-server-sdk": "^9.5.1", diff --git a/x-pack/plugins/elastic_assistant/README.md b/x-pack/plugins/elastic_assistant/README.md index d1d4cefe84622..2a1e47c177591 100755 --- a/x-pack/plugins/elastic_assistant/README.md +++ b/x-pack/plugins/elastic_assistant/README.md @@ -8,6 +8,16 @@ This plugin does NOT contain UI components. See `x-pack/packages/kbn-elastic-ass Maintained by the Security Solution team +## Graph structure + +![DefaultAssistantGraph](./docs/img/default_assistant_graph.png) + +## Development + +### Generate graph structure + +To generate the graph structure, run `yarn draw-graph` from the plugin directory. +The graph will be generated in the `docs/img` directory of the plugin. ### Testing diff --git a/x-pack/plugins/elastic_assistant/docs/img/default_assistant_graph.png b/x-pack/plugins/elastic_assistant/docs/img/default_assistant_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..e4ef8382317e5f827778d1bb34984644f87bbf9d GIT binary patch literal 30104 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 S?F<&7j~_pA#Dr2mr~U_C`zs#+ literal 0 HcmV?d00001 diff --git a/x-pack/plugins/elastic_assistant/package.json b/x-pack/plugins/elastic_assistant/package.json index b6f19d2ec7a3c..140015eed0b82 100644 --- a/x-pack/plugins/elastic_assistant/package.json +++ b/x-pack/plugins/elastic_assistant/package.json @@ -5,6 +5,7 @@ "private": true, "license": "Elastic License 2.0", "scripts": { - "evaluate-model": "node ./scripts/model_evaluator" + "evaluate-model": "node ./scripts/model_evaluator", + "draw-graph": "node ./scripts/draw_graph" } -} \ No newline at end of file +} diff --git a/x-pack/plugins/elastic_assistant/scripts/draw_graph.js b/x-pack/plugins/elastic_assistant/scripts/draw_graph.js new file mode 100644 index 0000000000000..dd920c79c32ec --- /dev/null +++ b/x-pack/plugins/elastic_assistant/scripts/draw_graph.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('./draw_graph_script').draw(); diff --git a/x-pack/plugins/elastic_assistant/scripts/draw_graph_script.ts b/x-pack/plugins/elastic_assistant/scripts/draw_graph_script.ts new file mode 100644 index 0000000000000..c44912ebf8d94 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/scripts/draw_graph_script.ts @@ -0,0 +1,66 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ToolingLog } from '@kbn/tooling-log'; +import fs from 'fs/promises'; +import path from 'path'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import type { Logger } from '@kbn/logging'; +import { ChatPromptTemplate } from '@langchain/core/prompts'; +import { FakeLLM } from '@langchain/core/utils/testing'; +import { createOpenAIFunctionsAgent } from 'langchain/agents'; +import { getDefaultAssistantGraph } from '../server/lib/langchain/graphs/default_assistant_graph/graph'; + +// Just defining some test variables to get the graph to compile.. +const testPrompt = ChatPromptTemplate.fromMessages([ + ['system', 'You are a helpful assistant'], + ['placeholder', '{chat_history}'], + ['human', '{input}'], + ['placeholder', '{agent_scratchpad}'], +]); + +const mockLlm = new FakeLLM({ + response: JSON.stringify({}, null, 2), +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +const createLlmInstance = () => { + return mockLlm; +}; + +async function getGraph(logger: Logger) { + const agentRunnable = await createOpenAIFunctionsAgent({ + llm: mockLlm, + tools: [], + prompt: testPrompt, + streamRunnable: false, + }); + const graph = getDefaultAssistantGraph({ + agentRunnable, + logger, + createLlmInstance, + tools: [], + replacements: {}, + }); + return graph.getGraph(); +} + +export const draw = async () => { + const logger = new ToolingLog({ + level: 'info', + writeTo: process.stdout, + }) as unknown as Logger; + logger.info('Compiling graph'); + const outputPath = path.join(__dirname, '../docs/img/default_assistant_graph.png'); + const graph = await getGraph(logger); + const output = await graph.drawMermaidPng(); + const buffer = Buffer.from(await output.arrayBuffer()); + logger.info(`Writing graph to ${outputPath}`); + await fs.writeFile(outputPath, buffer); +}; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/constants.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/constants.ts new file mode 100644 index 0000000000000..ba491c8de979b --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/constants.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +export const NodeType = { + PERSIST_CONVERSATION_CHANGES: 'persistConversationChanges', + GET_PERSISTED_CONVERSATION: 'getPersistedConversation', + GENERATE_CHAT_TITLE: 'generateChatTitle', + AGENT: 'agent', + TOOLS: 'tools', + RESPOND: 'respond', + MODEL_INPUT: 'modelInput', + STEP_ROUTER: 'stepRouter', + END: 'end', +} as const; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/graph.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/graph.ts index 2708c3b9c5702..8395076ad62ee 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/graph.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/graph.ts @@ -5,7 +5,6 @@ * 2.0. */ -import { RunnableConfig } from '@langchain/core/runnables'; import { END, START, StateGraph, StateGraphArgs } from '@langchain/langgraph'; import { AgentAction, AgentFinish, AgentStep } from '@langchain/core/agents'; import { AgentRunnableSequence } from 'langchain/dist/agents/agent'; @@ -17,57 +16,37 @@ import { BaseChatModel } from '@langchain/core/language_models/chat_models'; import { ConversationResponse, Replacements } from '@kbn/elastic-assistant-common'; import { AgentState, NodeParamsBase } from './types'; import { AssistantDataClients } from '../../executors/types'; -import { - shouldContinue, - shouldContinueGenerateTitle, - shouldContinueGetConversation, -} from './nodes/should_continue'; -import { AGENT_NODE, runAgent } from './nodes/run_agent'; -import { executeTools, TOOLS_NODE } from './nodes/execute_tools'; -import { GENERATE_CHAT_TITLE_NODE, generateChatTitle } from './nodes/generate_chat_title'; -import { - GET_PERSISTED_CONVERSATION_NODE, - getPersistedConversation, -} from './nodes/get_persisted_conversation'; -import { - PERSIST_CONVERSATION_CHANGES_NODE, - persistConversationChanges, -} from './nodes/persist_conversation_changes'; -import { RESPOND_NODE, respond } from './nodes/respond'; + +import { stepRouter } from './nodes/step_router'; +import { modelInput } from './nodes/model_input'; +import { runAgent } from './nodes/run_agent'; +import { executeTools } from './nodes/execute_tools'; +import { generateChatTitle } from './nodes/generate_chat_title'; +import { getPersistedConversation } from './nodes/get_persisted_conversation'; +import { persistConversationChanges } from './nodes/persist_conversation_changes'; +import { respond } from './nodes/respond'; +import { NodeType } from './constants'; export const DEFAULT_ASSISTANT_GRAPH_ID = 'Default Security Assistant Graph'; export interface GetDefaultAssistantGraphParams { agentRunnable: AgentRunnableSequence; dataClients?: AssistantDataClients; - conversationId?: string; createLlmInstance: () => BaseChatModel; logger: Logger; tools: StructuredTool[]; - responseLanguage: string; replacements: Replacements; - llmType: string | undefined; - bedrockChatEnabled?: boolean; - isStreaming: boolean; } export type DefaultAssistantGraph = ReturnType; -/** - * Returns a compiled default assistant graph - */ export const getDefaultAssistantGraph = ({ agentRunnable, - conversationId, dataClients, createLlmInstance, logger, - responseLanguage, tools, replacements, - llmType, - bedrockChatEnabled, - isStreaming, }: GetDefaultAssistantGraphParams) => { try { // Default graph state @@ -76,10 +55,18 @@ export const getDefaultAssistantGraph = ({ value: (x: string, y?: string) => y ?? x, default: () => '', }, + lastNode: { + value: (x: string, y?: string) => y ?? x, + default: () => 'start', + }, steps: { value: (x: AgentStep[], y: AgentStep[]) => x.concat(y), default: () => [], }, + hasRespondStep: { + value: (x: boolean, y?: boolean) => y ?? x, + default: () => false, + }, agentOutcome: { value: ( x: AgentAction | AgentFinish | undefined, @@ -95,11 +82,31 @@ export const getDefaultAssistantGraph = ({ value: (x: string, y?: string) => y ?? x, default: () => '', }, + llmType: { + value: (x: string, y?: string) => y ?? x, + default: () => 'unknown', + }, + bedrockChatEnabled: { + value: (x: boolean, y?: boolean) => y ?? x, + default: () => false, + }, + isStream: { + value: (x: boolean, y?: boolean) => y ?? x, + default: () => false, + }, conversation: { value: (x: ConversationResponse | undefined, y?: ConversationResponse | undefined) => y ?? x, default: () => undefined, }, + conversationId: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + responseLanguage: { + value: (x: string, y?: string) => y ?? x, + default: () => 'English', + }, }; // Default node parameters @@ -107,107 +114,54 @@ export const getDefaultAssistantGraph = ({ logger, }; - // Create nodes - const runAgentNode = (state: AgentState, config?: RunnableConfig) => - runAgent({ - ...nodeParams, - agentRunnable, - config, - dataClients, - logger: logger.get(AGENT_NODE), - state, - }); - const executeToolsNode = (state: AgentState, config?: RunnableConfig) => - executeTools({ - ...nodeParams, - config, - logger: logger.get(TOOLS_NODE), - state, - tools, - }); - const generateChatTitleNode = (state: AgentState) => - generateChatTitle({ - ...nodeParams, - model: createLlmInstance(), - llmType, - state, - responseLanguage, - }); - - const getPersistedConversationNode = (state: AgentState) => - getPersistedConversation({ - ...nodeParams, - state, - conversationsDataClient: dataClients?.conversationsDataClient, - conversationId, - }); - - const persistConversationChangesNode = (state: AgentState) => - persistConversationChanges({ - ...nodeParams, - state, - conversationsDataClient: dataClients?.conversationsDataClient, - conversationId, - replacements, - }); - const respondNode = (state: AgentState) => - respond({ - ...nodeParams, - model: createLlmInstance(), - state, - }); - const shouldContinueEdge = (state: AgentState) => shouldContinue({ ...nodeParams, state }); - const shouldContinueGenerateTitleEdge = (state: AgentState) => - shouldContinueGenerateTitle({ ...nodeParams, state }); - const shouldContinueGetConversationEdge = (state: AgentState) => - shouldContinueGetConversation({ ...nodeParams, state, conversationId }); - - // Put together a new graph using the nodes and default state from above - const graph = new StateGraph< - AgentState, - Partial, - | '__start__' - | 'agent' - | 'tools' - | 'generateChatTitle' - | 'getPersistedConversation' - | 'persistConversationChanges' - | 'respond' - >({ + // Put together a new graph using default state from above + const graph = new StateGraph({ channels: graphState, - }); - // Define the nodes to cycle between - graph.addNode(GET_PERSISTED_CONVERSATION_NODE, getPersistedConversationNode); - graph.addNode(GENERATE_CHAT_TITLE_NODE, generateChatTitleNode); - graph.addNode(PERSIST_CONVERSATION_CHANGES_NODE, persistConversationChangesNode); - graph.addNode(AGENT_NODE, runAgentNode); - graph.addNode(TOOLS_NODE, executeToolsNode); - - const hasRespondStep = isStreaming && bedrockChatEnabled && llmType === 'bedrock'; - - if (hasRespondStep) { - graph.addNode(RESPOND_NODE, respondNode); - graph.addEdge(RESPOND_NODE, END); - } - - // Add edges, alternating between agent and action until finished - graph.addConditionalEdges(START, shouldContinueGetConversationEdge, { - continue: GET_PERSISTED_CONVERSATION_NODE, - end: AGENT_NODE, - }); - graph.addConditionalEdges(GET_PERSISTED_CONVERSATION_NODE, shouldContinueGenerateTitleEdge, { - continue: GENERATE_CHAT_TITLE_NODE, - end: PERSIST_CONVERSATION_CHANGES_NODE, - }); - graph.addEdge(GENERATE_CHAT_TITLE_NODE, PERSIST_CONVERSATION_CHANGES_NODE); - graph.addEdge(PERSIST_CONVERSATION_CHANGES_NODE, AGENT_NODE); - // Add conditional edge for basic routing - graph.addConditionalEdges(AGENT_NODE, shouldContinueEdge, { - continue: TOOLS_NODE, - end: hasRespondStep ? RESPOND_NODE : END, - }); - graph.addEdge(TOOLS_NODE, AGENT_NODE); - // Compile the graph + }) + .addNode(NodeType.GET_PERSISTED_CONVERSATION, (state: AgentState) => + getPersistedConversation({ + ...nodeParams, + state, + conversationsDataClient: dataClients?.conversationsDataClient, + }) + ) + .addNode(NodeType.GENERATE_CHAT_TITLE, (state: AgentState) => + generateChatTitle({ ...nodeParams, state, model: createLlmInstance() }) + ) + .addNode(NodeType.PERSIST_CONVERSATION_CHANGES, (state: AgentState) => + persistConversationChanges({ + ...nodeParams, + state, + conversationsDataClient: dataClients?.conversationsDataClient, + replacements, + }) + ) + .addNode(NodeType.AGENT, (state: AgentState) => + runAgent({ ...nodeParams, state, agentRunnable }) + ) + .addNode(NodeType.TOOLS, (state: AgentState) => executeTools({ ...nodeParams, state, tools })) + .addNode(NodeType.RESPOND, (state: AgentState) => + respond({ ...nodeParams, state, model: createLlmInstance() }) + ) + .addNode(NodeType.MODEL_INPUT, (state: AgentState) => modelInput({ ...nodeParams, state })) + .addEdge(START, NodeType.MODEL_INPUT) + .addEdge(NodeType.RESPOND, END) + .addEdge(NodeType.GENERATE_CHAT_TITLE, NodeType.PERSIST_CONVERSATION_CHANGES) + .addEdge(NodeType.PERSIST_CONVERSATION_CHANGES, NodeType.AGENT) + .addEdge(NodeType.TOOLS, NodeType.AGENT) + .addConditionalEdges(NodeType.MODEL_INPUT, stepRouter, { + [NodeType.GET_PERSISTED_CONVERSATION]: NodeType.GET_PERSISTED_CONVERSATION, + [NodeType.AGENT]: NodeType.AGENT, + }) + .addConditionalEdges(NodeType.GET_PERSISTED_CONVERSATION, stepRouter, { + [NodeType.PERSIST_CONVERSATION_CHANGES]: NodeType.PERSIST_CONVERSATION_CHANGES, + [NodeType.GENERATE_CHAT_TITLE]: NodeType.GENERATE_CHAT_TITLE, + }) + .addConditionalEdges(NodeType.AGENT, stepRouter, { + [NodeType.RESPOND]: NodeType.RESPOND, + [NodeType.TOOLS]: NodeType.TOOLS, + [NodeType.END]: END, + }); return graph.compile(); } catch (e) { throw new Error(`Unable to compile DefaultAssistantGraph\n${e}`); diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.test.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.test.ts index 2ac1c5b0ea373..f15941e9931fe 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.test.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.test.ts @@ -96,12 +96,15 @@ describe('streamGraph', () => { const response = await streamGraph({ apmTracer: mockApmTracer, assistantGraph: mockAssistantGraph, - inputs: { input: 'input' }, + inputs: { + input: 'input', + bedrockChatEnabled: false, + llmType: 'openai', + responseLanguage: 'English', + }, logger: mockLogger, onLlmResponse: mockOnLlmResponse, request: mockRequest, - bedrockChatEnabled: false, - llmType: 'openai', }); expect(response).toBe(mockResponseWithHeaders); @@ -177,12 +180,15 @@ describe('streamGraph', () => { const response = await streamGraph({ apmTracer: mockApmTracer, assistantGraph: mockAssistantGraph, - inputs: { input: 'input' }, + inputs: { + input: 'input', + bedrockChatEnabled: false, + responseLanguage: 'English', + llmType: 'gemini', + }, logger: mockLogger, onLlmResponse: mockOnLlmResponse, request: mockRequest, - bedrockChatEnabled: false, - llmType: 'gemini', }); expect(response).toBe(mockResponseWithHeaders); diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.ts index dc146d6b1b692..93890f9dfb121 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.ts @@ -16,14 +16,13 @@ import { AIMessageChunk } from '@langchain/core/messages'; import { withAssistantSpan } from '../../tracers/apm/with_assistant_span'; import { AGENT_NODE_TAG } from './nodes/run_agent'; import { DEFAULT_ASSISTANT_GRAPH_ID, DefaultAssistantGraph } from './graph'; +import { GraphInputs } from './types'; import type { OnLlmResponse, TraceOptions } from '../../executors/types'; interface StreamGraphParams { apmTracer: APMTracer; assistantGraph: DefaultAssistantGraph; - bedrockChatEnabled: boolean; - inputs: { input: string }; - llmType: string | undefined; + inputs: GraphInputs; logger: Logger; onLlmResponse?: OnLlmResponse; request: KibanaRequest; @@ -43,8 +42,6 @@ interface StreamGraphParams { */ export const streamGraph = async ({ apmTracer, - llmType, - bedrockChatEnabled, assistantGraph, inputs, logger, @@ -82,7 +79,10 @@ export const streamGraph = async ({ streamingSpan?.end(); }; - if ((llmType === 'bedrock' || llmType === 'gemini') && bedrockChatEnabled) { + if ( + (inputs?.llmType === 'bedrock' || inputs?.llmType === 'gemini') && + inputs?.bedrockChatEnabled + ) { const stream = await assistantGraph.streamEvents( inputs, { @@ -92,7 +92,7 @@ export const streamGraph = async ({ version: 'v2', streamMode: 'values', }, - llmType === 'bedrock' ? { includeNames: ['Summarizer'] } : undefined + inputs?.llmType === 'bedrock' ? { includeNames: ['Summarizer'] } : undefined ); for await (const { event, data, tags } of stream) { @@ -225,7 +225,7 @@ export const streamGraph = async ({ interface InvokeGraphParams { apmTracer: APMTracer; assistantGraph: DefaultAssistantGraph; - inputs: { input: string }; + inputs: GraphInputs; onLlmResponse?: OnLlmResponse; traceOptions?: TraceOptions; } diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts index 758a3a757eb76..f17accfc85d08 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts @@ -24,6 +24,7 @@ import { openAIFunctionAgentPrompt, structuredChatAgentPrompt, } from './prompts'; +import { GraphInputs } from './types'; import { getDefaultAssistantGraph } from './graph'; import { invokeGraph, streamGraph } from './helpers'; import { transformESSearchToAnonymizationFields } from '../../../../ai_assistant_data_clients/anonymization_fields/helpers'; @@ -151,26 +152,26 @@ export const callAssistantGraph: AgentExecutor = async ({ const assistantGraph = getDefaultAssistantGraph({ agentRunnable, - conversationId, dataClients, // we need to pass it like this or streaming does not work for bedrock createLlmInstance, logger, tools, - responseLanguage, replacements, - llmType, - bedrockChatEnabled, - isStreaming: isStream, }); - const inputs = { input: latestMessage[0]?.content as string }; + const inputs: GraphInputs = { + bedrockChatEnabled, + responseLanguage, + conversationId, + llmType, + isStream, + input: latestMessage[0]?.content as string, + }; if (isStream) { return streamGraph({ apmTracer, assistantGraph, - llmType, - bedrockChatEnabled, inputs, logger, onLlmResponse, diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/execute_tools.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/execute_tools.ts index 6796385686cc6..ef4797a4cec9e 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/execute_tools.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/execute_tools.ts @@ -11,35 +11,34 @@ import { ToolExecutor } from '@langchain/langgraph/prebuilt'; import { castArray } from 'lodash'; import { AgentAction } from 'langchain/agents'; import { AgentState, NodeParamsBase } from '../types'; +import { NodeType } from '../constants'; export interface ExecuteToolsParams extends NodeParamsBase { state: AgentState; - config?: RunnableConfig; tools: StructuredTool[]; + config?: RunnableConfig; } -export const TOOLS_NODE = 'tools'; - /** * Node to execute tools * * Note: Could maybe leverage `ToolNode` if tool selection state is pushed to `messages[]`. * See: https://github.com/langchain-ai/langgraphjs/blob/0ef76d603b55c00a04f5793d1e6ab15af7c756cb/langgraph/src/prebuilt/tool_node.ts * - * @param config - Any configuration that may've been supplied * @param logger - The scoped logger * @param state - The current state of the graph * @param tools - The tools available to execute + * @param config - Any configuration that may've been supplied */ -export const executeTools = async ({ config, logger, state, tools }: ExecuteToolsParams) => { - logger.debug(() => `Node state:\n${JSON.stringify(state, null, 2)}`); +export async function executeTools({ + logger, + state, + tools, + config, +}: ExecuteToolsParams): Promise> { + logger.debug(() => `${NodeType.TOOLS}: Node state:\n${JSON.stringify(state, null, 2)}`); const toolExecutor = new ToolExecutor({ tools }); - const agentAction = state.agentOutcome; - - if (!agentAction || 'returnValues' in agentAction) { - throw new Error('Agent has not been run yet'); - } const steps = await Promise.all( castArray(state.agentOutcome as AgentAction)?.map(async (action) => { @@ -60,5 +59,5 @@ export const executeTools = async ({ config, logger, state, tools }: ExecuteTool }) ); - return { steps }; -}; + return { steps, lastNode: NodeType.TOOLS }; +} diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/generate_chat_title.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/generate_chat_title.ts index 1ed5e8949fcbe..dcef2ae6345f4 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/generate_chat_title.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/generate_chat_title.ts @@ -9,6 +9,7 @@ import { StringOutputParser } from '@langchain/core/output_parsers'; import { ChatPromptTemplate } from '@langchain/core/prompts'; import { BaseChatModel } from '@langchain/core/language_models/chat_models'; import { AgentState, NodeParamsBase } from '../types'; +import { NodeType } from '../constants'; export const GENERATE_CHAT_TITLE_PROMPT = (responseLanguage: string, llmType?: string) => llmType === 'bedrock' @@ -48,25 +49,21 @@ export const GENERATE_CHAT_TITLE_PROMPT = (responseLanguage: string, llmType?: s ]); export interface GenerateChatTitleParams extends NodeParamsBase { - llmType?: string; - responseLanguage: string; state: AgentState; model: BaseChatModel; } -export const GENERATE_CHAT_TITLE_NODE = 'generateChatTitle'; - -export const generateChatTitle = async ({ - llmType, - responseLanguage, +export async function generateChatTitle({ logger, - model, state, -}: GenerateChatTitleParams) => { - logger.debug(() => `Node state:\n ${JSON.stringify(state, null, 2)}`); + model, +}: GenerateChatTitleParams): Promise> { + logger.debug( + () => `${NodeType.GENERATE_CHAT_TITLE}: Node state:\n${JSON.stringify(state, null, 2)}` + ); const outputParser = new StringOutputParser(); - const graph = GENERATE_CHAT_TITLE_PROMPT(responseLanguage, llmType) + const graph = GENERATE_CHAT_TITLE_PROMPT(state.responseLanguage, state.llmType) .pipe(model) .pipe(outputParser); @@ -77,5 +74,6 @@ export const generateChatTitle = async ({ return { chatTitle, + lastNode: NodeType.GENERATE_CHAT_TITLE, }; -}; +} diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/get_persisted_conversation.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/get_persisted_conversation.ts index a4dd031507067..b3d3bf655ceac 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/get_persisted_conversation.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/get_persisted_conversation.ts @@ -8,44 +8,34 @@ import { AgentState, NodeParamsBase } from '../types'; import { AIAssistantConversationsDataClient } from '../../../../../ai_assistant_data_clients/conversations'; import { getLangChainMessages } from '../../../helpers'; +import { NodeType } from '../constants'; export interface GetPersistedConversationParams extends NodeParamsBase { conversationsDataClient?: AIAssistantConversationsDataClient; - conversationId?: string; state: AgentState; } -export const GET_PERSISTED_CONVERSATION_NODE = 'getPersistedConversation'; - -export const getPersistedConversation = async ({ - conversationsDataClient, - conversationId, +export async function getPersistedConversation({ logger, state, -}: GetPersistedConversationParams) => { - logger.debug(`Node state:\n ${JSON.stringify(state, null, 2)}`); - if (!conversationId) { - logger.debug('Cannot get conversation, because conversationId is undefined'); - return { - conversation: undefined, - messages: [], - chatTitle: '', - input: state.input, - }; - } + conversationsDataClient, +}: GetPersistedConversationParams): Promise> { + logger.debug( + () => `${NodeType.GET_PERSISTED_CONVERSATION}: Node state:\n${JSON.stringify(state, null, 2)}` + ); - const conversation = await conversationsDataClient?.getConversation({ id: conversationId }); + const conversation = await conversationsDataClient?.getConversation({ id: state.conversationId }); if (!conversation) { logger.debug('Requested conversation, because conversation is undefined'); return { conversation: undefined, messages: [], chatTitle: '', - input: state.input, + lastNode: NodeType.GET_PERSISTED_CONVERSATION, }; } - logger.debug(`conversationId: ${conversationId}`); + logger.debug(`conversationId: ${state.conversationId}`); const messages = getLangChainMessages(conversation.messages ?? []); @@ -56,6 +46,7 @@ export const getPersistedConversation = async ({ messages, chatTitle: conversation.title, input: lastMessage?.content as string, + lastNode: NodeType.GET_PERSISTED_CONVERSATION, }; } @@ -63,6 +54,6 @@ export const getPersistedConversation = async ({ conversation, messages, chatTitle: conversation.title, - input: state.input, + lastNode: NodeType.GET_PERSISTED_CONVERSATION, }; -}; +} diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/model_input.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/model_input.ts new file mode 100644 index 0000000000000..f634d10f5cd4a --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/model_input.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 { NodeType } from '../constants'; +import { NodeParamsBase, AgentState } from '../types'; + +interface ModelInputParams extends NodeParamsBase { + state: AgentState; +} + +/* + * This is the entrypoint of the graph. + * Any logic that should affect the state based on for example the invoke input should be done here. + * + * @param logger - The scoped logger + * @param state - The current state of the graph + */ +export function modelInput({ logger, state }: ModelInputParams): Partial { + logger.debug(() => `${NodeType.MODEL_INPUT}: Node state:\n${JSON.stringify(state, null, 2)}`); + + const hasRespondStep = state.isStream && state.bedrockChatEnabled && state.llmType === 'bedrock'; + + return { + hasRespondStep, + lastNode: NodeType.MODEL_INPUT, + }; +} diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/persist_conversation_changes.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/persist_conversation_changes.ts index 615c4b2449c4c..04bca3c91b171 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/persist_conversation_changes.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/persist_conversation_changes.ts @@ -12,30 +12,30 @@ import { import { AgentState, NodeParamsBase } from '../types'; import { AIAssistantConversationsDataClient } from '../../../../../ai_assistant_data_clients/conversations'; import { getLangChainMessages } from '../../../helpers'; +import { NodeType } from '../constants'; export interface PersistConversationChangesParams extends NodeParamsBase { - conversationsDataClient?: AIAssistantConversationsDataClient; - conversationId?: string; state: AgentState; + conversationsDataClient?: AIAssistantConversationsDataClient; replacements?: Replacements; } -export const PERSIST_CONVERSATION_CHANGES_NODE = 'persistConversationChanges'; - -export const persistConversationChanges = async ({ - conversationsDataClient, - conversationId, +export async function persistConversationChanges({ logger, state, + conversationsDataClient, replacements = {}, -}: PersistConversationChangesParams) => { - logger.debug(`Node state:\n ${JSON.stringify(state, null, 2)}`); +}: PersistConversationChangesParams): Promise> { + logger.debug( + () => `${NodeType.PERSIST_CONVERSATION_CHANGES}: Node state:\n${JSON.stringify(state, null, 2)}` + ); - if (!state.conversation || !conversationId) { + if (!state.conversation || !state.conversationId) { logger.debug('No need to generate chat title, conversationId is undefined'); return { conversation: undefined, messages: [], + lastNode: NodeType.PERSIST_CONVERSATION_CHANGES, }; } @@ -43,7 +43,7 @@ export const persistConversationChanges = async ({ if (state.conversation?.title !== state.chatTitle) { conversation = await conversationsDataClient?.updateConversation({ conversationUpdateProps: { - id: conversationId, + id: state.conversationId, title: state.chatTitle, }, }); @@ -59,6 +59,7 @@ export const persistConversationChanges = async ({ return { conversation: state.conversation, messages, + lastNode: NodeType.PERSIST_CONVERSATION_CHANGES, }; } @@ -77,15 +78,20 @@ export const persistConversationChanges = async ({ }); if (!updatedConversation) { logger.debug('Not updated conversation'); - return { conversation: undefined, messages: [] }; + return { + conversation: undefined, + messages: [], + lastNode: NodeType.PERSIST_CONVERSATION_CHANGES, + }; } - logger.debug(`conversationId: ${conversationId}`); + logger.debug(`conversationId: ${state.conversationId}`); const langChainMessages = getLangChainMessages(updatedConversation.messages ?? []); const messages = langChainMessages.slice(0, -1); // all but the last message return { conversation: updatedConversation, messages, + lastNode: NodeType.PERSIST_CONVERSATION_CHANGES, }; -}; +} diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/respond.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/respond.ts index 7c11b96bbca0d..bfd62ee7aab21 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/respond.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/respond.ts @@ -8,10 +8,21 @@ import { BaseChatModel } from '@langchain/core/language_models/chat_models'; import { StringWithAutocomplete } from '@langchain/core/dist/utils/types'; import { AGENT_NODE_TAG } from './run_agent'; -import { AgentState } from '../types'; +import { AgentState, NodeParamsBase } from '../types'; +import { NodeType } from '../constants'; + +export interface RespondParams extends NodeParamsBase { + state: AgentState; + model: BaseChatModel; +} + +export async function respond({ + logger, + state, + model, +}: RespondParams): Promise> { + logger.debug(() => `${NodeType.RESPOND}: Node state:\n${JSON.stringify(state, null, 2)}`); -export const RESPOND_NODE = 'respond'; -export const respond = async ({ model, state }: { model: BaseChatModel; state: AgentState }) => { if (state?.agentOutcome && 'returnValues' in state.agentOutcome) { const userMessage = [ 'user', @@ -33,7 +44,8 @@ export const respond = async ({ model, state }: { model: BaseChatModel; state: A output: responseMessage.content, }, }, + lastNode: NodeType.RESPOND, }; } - return state; -}; + return { lastNode: NodeType.RESPOND }; +} diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/run_agent.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/run_agent.ts index fcd6686f1d17f..36c15aa44445d 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/run_agent.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/run_agent.ts @@ -8,36 +8,31 @@ import { RunnableConfig } from '@langchain/core/runnables'; import { AgentRunnableSequence } from 'langchain/dist/agents/agent'; import { AgentState, NodeParamsBase } from '../types'; -import { AssistantDataClients } from '../../../executors/types'; +import { NodeType } from '../constants'; export interface RunAgentParams extends NodeParamsBase { - agentRunnable: AgentRunnableSequence; - dataClients?: AssistantDataClients; state: AgentState; config?: RunnableConfig; + agentRunnable: AgentRunnableSequence; } -export const AGENT_NODE = 'agent'; - export const AGENT_NODE_TAG = 'agent_run'; /** * Node to run the agent * - * @param agentRunnable - The agent to run - * @param config - Any configuration that may've been supplied * @param logger - The scoped logger - * @param dataClients - Data clients available for use * @param state - The current state of the graph + * @param config - Any configuration that may've been supplied + * @param agentRunnable - The agent to run */ -export const runAgent = async ({ - agentRunnable, - config, - dataClients, +export async function runAgent({ logger, state, -}: RunAgentParams) => { - logger.debug(() => `Node state:\n${JSON.stringify(state, null, 2)}`); + agentRunnable, + config, +}: RunAgentParams): Promise> { + logger.debug(() => `${NodeType.AGENT}: Node state:\n${JSON.stringify(state, null, 2)}`); const agentOutcome = await agentRunnable.withConfig({ tags: [AGENT_NODE_TAG] }).invoke( { @@ -49,5 +44,6 @@ export const runAgent = async ({ return { agentOutcome, + lastNode: NodeType.AGENT, }; -}; +} diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/should_continue.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/should_continue.ts deleted file mode 100644 index 803fedb6f42dc..0000000000000 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/should_continue.ts +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { NEW_CHAT } from '../../../../../routes/helpers'; -import { AgentState, NodeParamsBase } from '../types'; - -export interface ShouldContinueParams extends NodeParamsBase { - state: AgentState; -} - -/** - * Node to determine which conditional edge to choose. Essentially the 'router' node. - * - * @param logger - The scoped logger - * @param state - The current state of the graph - */ -export const shouldContinue = ({ logger, state }: ShouldContinueParams) => { - logger.debug(() => `Node state:\n${JSON.stringify(state, null, 2)}`); - - if (state.agentOutcome && 'returnValues' in state.agentOutcome) { - return 'end'; - } - - return 'continue'; -}; - -export const shouldContinueGenerateTitle = ({ logger, state }: ShouldContinueParams) => { - logger.debug(`Node state:\n${JSON.stringify(state, null, 2)}`); - - if (state.conversation?.title?.length && state.conversation?.title !== NEW_CHAT) { - return 'end'; - } - - return 'continue'; -}; - -export interface ShouldContinueGetConversation extends NodeParamsBase { - state: AgentState; - conversationId?: string; -} -export const shouldContinueGetConversation = ({ - logger, - state, - conversationId, -}: ShouldContinueGetConversation) => { - logger.debug(`Node state:\n${JSON.stringify(state, null, 2)}`); - - if (!conversationId) { - return 'end'; - } - - return 'continue'; -}; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/step_router.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/step_router.ts new file mode 100644 index 0000000000000..dafa55cdf89e5 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/step_router.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { NodeType } from '../constants'; +import { AgentState } from '../types'; +import { NEW_CHAT } from '../../../../../routes/helpers'; + +/* + * We use a single router endpoint for common conditional edges. + * This allows for much easier extension later, where one node might want to go back and validate with an earlier node + * or to a new node that's been added to the graph. + * More routers could always be added later when needed. + */ +export function stepRouter(state: AgentState): string { + switch (state.lastNode) { + case NodeType.AGENT: + if (state.agentOutcome && 'returnValues' in state.agentOutcome) { + return state.hasRespondStep ? NodeType.RESPOND : NodeType.END; + } + return NodeType.TOOLS; + + case NodeType.GET_PERSISTED_CONVERSATION: + if (state.conversation?.title?.length && state.conversation?.title !== NEW_CHAT) { + return NodeType.PERSIST_CONVERSATION_CHANGES; + } + return NodeType.GENERATE_CHAT_TITLE; + + case NodeType.MODEL_INPUT: + return state.conversationId ? NodeType.GET_PERSISTED_CONVERSATION : NodeType.AGENT; + + default: + return NodeType.END; + } +} diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/types.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/types.ts index 5d86a0f6b97ed..17d06b0f7042e 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/types.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/types.ts @@ -15,11 +15,27 @@ export interface AgentStateBase { steps: AgentStep[]; } +export interface GraphInputs { + bedrockChatEnabled?: boolean; + conversationId?: string; + llmType?: string; + isStream?: boolean; + input: string; + responseLanguage?: string; +} + export interface AgentState extends AgentStateBase { input: string; messages: BaseMessage[]; chatTitle: string; + lastNode: string; + hasRespondStep: boolean; + isStream: boolean; + bedrockChatEnabled: boolean; + llmType: string; + responseLanguage: string; conversation: ConversationResponse | undefined; + conversationId: string; } export interface NodeParamsBase { 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 80130e1750c42..1d85de96f630e 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 @@ -183,7 +183,11 @@ export const postEvaluateRoute = ( // Fetch any tools registered to the security assistant const assistantTools = assistantContext.getRegisteredTools(DEFAULT_PLUGIN_NAME); - const graphs: Array<{ name: string; graph: DefaultAssistantGraph }> = await Promise.all( + const graphs: Array<{ + name: string; + graph: DefaultAssistantGraph; + llmType: string | undefined; + }> = await Promise.all( connectors.map(async (connector) => { const llmType = getLlmType(connector.actionTypeId); const isOpenAI = llmType === 'openai'; @@ -286,31 +290,34 @@ export const postEvaluateRoute = ( return { name: `${runName} - ${connector.name}`, + llmType, graph: getDefaultAssistantGraph({ agentRunnable, - conversationId: undefined, dataClients, createLlmInstance, logger, tools, - responseLanguage: 'English', replacements: {}, - llmType, - bedrockChatEnabled: true, - isStreaming: false, }), }; }) ); // Run an evaluation for each graph so they show up separately (resulting in each dataset run grouped by connector) - await asyncForEach(graphs, async ({ name, graph }) => { + await asyncForEach(graphs, async ({ name, graph, llmType }) => { // Wrapper function for invoking the graph (to parse different input/output formats) const predict = async (input: { input: string }) => { logger.debug(`input:\n ${JSON.stringify(input, null, 2)}`); const r = await graph.invoke( - { input: input.input }, // TODO: Update to use the correct input format per dataset type + { + input: input.input, + conversationId: undefined, + responseLanguage: 'English', + llmType, + bedrockChatEnabled: true, + isStreaming: false, + }, // TODO: Update to use the correct input format per dataset type { runName, tags: ['evaluation'], diff --git a/yarn.lock b/yarn.lock index d6eaf10e8d0eb..eda377e5180cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7213,7 +7213,7 @@ zod "^3.22.3" zod-to-json-schema "^3.22.5" -"@langchain/core@>0.1.0 <0.3.0", "@langchain/core@>=0.2.11 <0.3.0", "@langchain/core@>=0.2.16 <0.3.0", "@langchain/core@>=0.2.18 <0.3.0", "@langchain/core@>=0.2.5 <0.3.0", "@langchain/core@^0.2.18", "@langchain/core@~0.2.11": +"@langchain/core@>0.1.0 <0.3.0", "@langchain/core@>=0.2.11 <0.3.0", "@langchain/core@>=0.2.16 <0.3.0", "@langchain/core@>=0.2.20 <0.3.0", "@langchain/core@>=0.2.5 <0.3.0", "@langchain/core@^0.2.18", "@langchain/core@~0.2.11": version "0.2.18" resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.2.18.tgz#1ac4f307fa217ab3555c9634147a6c4ad9826092" integrity sha512-ru542BwNcsnDfjTeDbIkFIchwa54ctHZR+kVrC8U9NPS9/36iM8p8ruprOV7Zccj/oxtLE5UpEhV+9MZhVcFlA== @@ -7240,12 +7240,12 @@ "@langchain/core" ">=0.2.16 <0.3.0" zod-to-json-schema "^3.22.4" -"@langchain/langgraph@^0.0.31": - version "0.0.31" - resolved "https://registry.yarnpkg.com/@langchain/langgraph/-/langgraph-0.0.31.tgz#4585fc9b4e9ad9677e97fd8debcfec2ae43a5fb4" - integrity sha512-f5QMSLy/RnLktsqnNm2mq8gp1xplHwQf87XIPVO0IYuumOJiafx5lE7ahPO+fVmCzAz6LxcsVocvD0JqxXR/2w== +"@langchain/langgraph@0.0.34": + version "0.0.34" + resolved "https://registry.yarnpkg.com/@langchain/langgraph/-/langgraph-0.0.34.tgz#1504c29ce524d08d6f076c34e0623c6de1f1246c" + integrity sha512-cuig46hGmZkf+eXw1Cx2CtkAWgsAbIpa5ABLxn9oe1rbtvHXmfekqHZA6tGE0DipEmsN4H64zFcDEJydll6Sdw== dependencies: - "@langchain/core" ">=0.2.18 <0.3.0" + "@langchain/core" ">=0.2.20 <0.3.0" uuid "^10.0.0" zod "^3.23.8" @@ -29585,7 +29585,7 @@ string-replace-loader@^2.2.0: loader-utils "^1.2.3" schema-utils "^1.0.0" -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -29603,6 +29603,15 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -29713,7 +29722,7 @@ stringify-object@^3.2.1: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -29727,6 +29736,13 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -32645,7 +32661,7 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -32671,6 +32687,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" From 0c911c8f6217cd97d20b9086f9092e74569a2e63 Mon Sep 17 00:00:00 2001 From: Drew Tate Date: Thu, 22 Aug 2024 14:54:18 -0600 Subject: [PATCH 36/59] [ES|QL] min and max allow strings (#191119) ## Summary Close https://github.com/elastic/elasticsearch/pull/111544 Follow-on to https://github.com/elastic/elasticsearch/pull/111544 --- .../autocomplete.command.stats.test.ts | 21 +- .../src/definitions/aggs.ts | 24 ++ .../esql_validation_meta_tests.json | 232 ++++++++++++++++-- .../src/validation/validation.test.ts | 128 ++++++++-- 4 files changed, 367 insertions(+), 38 deletions(-) diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts index cdf4a6239a9ab..13d471d53d7ec 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts @@ -137,10 +137,27 @@ describe('autocomplete.suggest', () => { test('when typing inside function left paren', async () => { const { assertSuggestions } = await setup(); const expected = [ - ...getFieldNamesByType([...ESQL_COMMON_NUMERIC_TYPES, 'date', 'boolean', 'ip']), + ...getFieldNamesByType([ + ...ESQL_COMMON_NUMERIC_TYPES, + 'date', + 'boolean', + 'ip', + 'version', + 'text', + 'keyword', + ]), ...getFunctionSignaturesByReturnType( 'stats', - [...ESQL_COMMON_NUMERIC_TYPES, 'date', 'date_period', 'boolean', 'ip'], + [ + ...ESQL_COMMON_NUMERIC_TYPES, + 'date', + 'date_period', + 'boolean', + 'ip', + 'version', + 'text', + 'keyword', + ], { scalar: true, } diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts index 262d7a2fc7b32..4ce0ad1a0f230 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts @@ -155,6 +155,18 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ params: [{ name: 'column', type: 'ip', noNestingFunctions: true }], returnType: 'ip', }, + { + params: [{ name: 'column', type: 'version', noNestingFunctions: true }], + returnType: 'version', + }, + { + params: [{ name: 'column', type: 'keyword', noNestingFunctions: true }], + returnType: 'keyword', + }, + { + params: [{ name: 'column', type: 'text', noNestingFunctions: true }], + returnType: 'text', + }, ], examples: [`from index | stats result = max(field)`, `from index | stats max(field)`], }, @@ -186,6 +198,18 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ params: [{ name: 'column', type: 'ip', noNestingFunctions: true }], returnType: 'ip', }, + { + params: [{ name: 'column', type: 'version', noNestingFunctions: true }], + returnType: 'version', + }, + { + params: [{ name: 'column', type: 'keyword', noNestingFunctions: true }], + returnType: 'keyword', + }, + { + params: [{ name: 'column', type: 'text', noNestingFunctions: true }], + returnType: 'text', + }, ], examples: [`from index | stats result = min(field)`, `from index | stats min(field)`], }, diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json index 46bdf3c2a13d2..d290bd04b64e5 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json +++ b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json @@ -31860,23 +31860,17 @@ }, { "query": "from a_index | stats max(concat(\"20\", \"22\"))", - "error": [ - "Argument of [max] must be [double], found value [concat(\"20\",\"22\")] type [keyword]" - ], + "error": [], "warning": [] }, { "query": "from a_index | stats var = max(textField)", - "error": [ - "Argument of [max] must be [double], found value [textField] type [text]" - ], + "error": [], "warning": [] }, { "query": "from a_index | stats max(textField)", - "error": [ - "Argument of [max] must be [double], found value [textField] type [text]" - ], + "error": [], "warning": [] }, { @@ -31921,6 +31915,110 @@ ], "warning": [] }, + { + "query": "from a_index | stats var = max(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = max(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where max(versionField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(versionField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(keywordField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(keywordField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(versionField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(versionField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(versionField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(versionField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(keywordField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(keywordField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(keywordField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(keywordField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, { "query": "from a_index | stats var = min(doubleField)", "error": [], @@ -32500,23 +32598,17 @@ }, { "query": "from a_index | stats min(concat(\"20\", \"22\"))", - "error": [ - "Argument of [min] must be [double], found value [concat(\"20\",\"22\")] type [keyword]" - ], + "error": [], "warning": [] }, { "query": "from a_index | stats var = min(textField)", - "error": [ - "Argument of [min] must be [double], found value [textField] type [text]" - ], + "error": [], "warning": [] }, { "query": "from a_index | stats min(textField)", - "error": [ - "Argument of [min] must be [double], found value [textField] type [text]" - ], + "error": [], "warning": [] }, { @@ -32561,6 +32653,110 @@ ], "warning": [] }, + { + "query": "from a_index | stats var = min(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = min(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where min(versionField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(versionField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(keywordField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(keywordField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(versionField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(versionField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(versionField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(versionField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(keywordField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(keywordField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(keywordField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(keywordField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, { "query": "from a_index | stats var = count(textField)", "error": [], diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts index f67c7d120fcd3..a4b097430851c 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts @@ -12270,17 +12270,11 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | stats max(null)', []); testErrorsAndWarnings('row nullVar = null | stats max(nullVar)', []); testErrorsAndWarnings('from a_index | stats max("2022")', []); - testErrorsAndWarnings('from a_index | stats max(concat("20", "22"))', [ - 'Argument of [max] must be [double], found value [concat("20","22")] type [keyword]', - ]); + testErrorsAndWarnings('from a_index | stats max(concat("20", "22"))', []); - testErrorsAndWarnings('from a_index | stats var = max(textField)', [ - 'Argument of [max] must be [double], found value [textField] type [text]', - ]); + testErrorsAndWarnings('from a_index | stats var = max(textField)', []); - testErrorsAndWarnings('from a_index | stats max(textField)', [ - 'Argument of [max] must be [double], found value [textField] type [text]', - ]); + testErrorsAndWarnings('from a_index | stats max(textField)', []); testErrorsAndWarnings('from a_index | where max(textField)', [ 'WHERE does not support function max', @@ -12305,6 +12299,58 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval max(textField) > 0', [ 'EVAL does not support function max', ]); + testErrorsAndWarnings('from a_index | stats var = max(versionField)', []); + testErrorsAndWarnings('from a_index | stats max(versionField)', []); + testErrorsAndWarnings('from a_index | stats var = max(keywordField)', []); + testErrorsAndWarnings('from a_index | stats max(keywordField)', []); + + testErrorsAndWarnings('from a_index | where max(versionField)', [ + 'WHERE does not support function max', + ]); + + testErrorsAndWarnings('from a_index | where max(versionField) > 0', [ + 'WHERE does not support function max', + ]); + + testErrorsAndWarnings('from a_index | where max(keywordField)', [ + 'WHERE does not support function max', + ]); + + testErrorsAndWarnings('from a_index | where max(keywordField) > 0', [ + 'WHERE does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(versionField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(versionField) > 0', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(versionField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(versionField) > 0', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(keywordField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(keywordField) > 0', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(keywordField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(keywordField) > 0', [ + 'EVAL does not support function max', + ]); }); describe('min', () => { @@ -12624,17 +12670,11 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | stats min(null)', []); testErrorsAndWarnings('row nullVar = null | stats min(nullVar)', []); testErrorsAndWarnings('from a_index | stats min("2022")', []); - testErrorsAndWarnings('from a_index | stats min(concat("20", "22"))', [ - 'Argument of [min] must be [double], found value [concat("20","22")] type [keyword]', - ]); + testErrorsAndWarnings('from a_index | stats min(concat("20", "22"))', []); - testErrorsAndWarnings('from a_index | stats var = min(textField)', [ - 'Argument of [min] must be [double], found value [textField] type [text]', - ]); + testErrorsAndWarnings('from a_index | stats var = min(textField)', []); - testErrorsAndWarnings('from a_index | stats min(textField)', [ - 'Argument of [min] must be [double], found value [textField] type [text]', - ]); + testErrorsAndWarnings('from a_index | stats min(textField)', []); testErrorsAndWarnings('from a_index | where min(textField)', [ 'WHERE does not support function min', @@ -12659,6 +12699,58 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval min(textField) > 0', [ 'EVAL does not support function min', ]); + testErrorsAndWarnings('from a_index | stats var = min(versionField)', []); + testErrorsAndWarnings('from a_index | stats min(versionField)', []); + testErrorsAndWarnings('from a_index | stats var = min(keywordField)', []); + testErrorsAndWarnings('from a_index | stats min(keywordField)', []); + + testErrorsAndWarnings('from a_index | where min(versionField)', [ + 'WHERE does not support function min', + ]); + + testErrorsAndWarnings('from a_index | where min(versionField) > 0', [ + 'WHERE does not support function min', + ]); + + testErrorsAndWarnings('from a_index | where min(keywordField)', [ + 'WHERE does not support function min', + ]); + + testErrorsAndWarnings('from a_index | where min(keywordField) > 0', [ + 'WHERE does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(versionField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(versionField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(versionField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(versionField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(keywordField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(keywordField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(keywordField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(keywordField) > 0', [ + 'EVAL does not support function min', + ]); }); describe('count', () => { From f9c373203f223e1b7d45bdf84b8591b7622f5e83 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 22 Aug 2024 23:42:10 +0100 Subject: [PATCH 37/59] skip flaky suite (#191017) --- .../cloud_security_posture/agentless/cis_integration_aws.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/agentless/cis_integration_aws.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/agentless/cis_integration_aws.ts index a33c484f8c90d..6adbbac3cdc57 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/agentless/cis_integration_aws.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/agentless/cis_integration_aws.ts @@ -143,7 +143,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); }); - describe('Serverless - Agentless CIS_AWS Create flow', () => { + // FLAKY: https://github.com/elastic/kibana/issues/191017 + describe.skip('Serverless - Agentless CIS_AWS Create flow', () => { it(`user should save agentless integration policy when there are no api or validation errors and button is not disabled`, async () => { await cisIntegration.createAgentlessIntegration({ cloudProvider: 'aws', From 942cb37b115040e8b86aba126dd343a60b974af4 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 22 Aug 2024 23:49:26 +0100 Subject: [PATCH 38/59] skip flaky suite (#183350) --- .../group1/tests/alerting/backfill/task_runner.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/backfill/task_runner.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/backfill/task_runner.ts index 354678cee71d4..66514e645e6d7 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/backfill/task_runner.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/backfill/task_runner.ts @@ -86,7 +86,8 @@ export default function createBackfillTaskRunnerTests({ getService }: FtrProvide moment().utc().startOf('day').subtract(9, 'days').add(667, 'seconds').toISOString(), ]; - describe('ad hoc backfill task', () => { + // FLAKY: https://github.com/elastic/kibana/issues/183350 + describe.skip('ad hoc backfill task', () => { beforeEach(async () => { await esTestIndexTool.destroy(); await esTestIndexTool.setup(); From 163d1efcb9672eea6924c7d25e78d85ee547e1e0 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 22 Aug 2024 23:50:58 +0100 Subject: [PATCH 39/59] skip flaky suite (#176874) --- .../test_suites/security/ftr/cases/attachment_framework.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/attachment_framework.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/attachment_framework.ts index ab186f44418d0..648309b3d5cab 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/attachment_framework.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/attachment_framework.ts @@ -25,7 +25,8 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const dashboardPanelActions = getService('dashboardPanelActions'); describe('Cases persistable attachments', () => { - describe('lens visualization', () => { + // FLAKY: https://github.com/elastic/kibana/issues/176874 + describe.skip('lens visualization', () => { before(async () => { await svlCommonPage.loginAsAdmin(); await common.navigateToApp('security', { path: 'dashboards' }); From 6b7c7d4282d8e774b165b495411f9f22241ee849 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 22 Aug 2024 23:52:32 +0100 Subject: [PATCH 40/59] skip flaky suite (#188488) --- .../cases/public/components/create/owner_selector.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/cases/public/components/create/owner_selector.test.tsx b/x-pack/plugins/cases/public/components/create/owner_selector.test.tsx index c61dd83dea42f..fb34b7fb0fedf 100644 --- a/x-pack/plugins/cases/public/components/create/owner_selector.test.tsx +++ b/x-pack/plugins/cases/public/components/create/owner_selector.test.tsx @@ -15,7 +15,8 @@ import type { AppMockRenderer } from '../../common/mock'; import { createAppMockRenderer } from '../../common/mock'; import userEvent from '@testing-library/user-event'; -describe('Case Owner Selection', () => { +// FLAKY: https://github.com/elastic/kibana/issues/188488 +describe.skip('Case Owner Selection', () => { const onOwnerChange = jest.fn(); const selectedOwner = SECURITY_SOLUTION_OWNER; From 04916ffc98185972a0bdbe8b6b390980aab11961 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 22 Aug 2024 23:54:08 +0100 Subject: [PATCH 41/59] skip flaky suite (#177304) --- .../public/components/custom_fields/toggle/create.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/cases/public/components/custom_fields/toggle/create.test.tsx b/x-pack/plugins/cases/public/components/custom_fields/toggle/create.test.tsx index 8eb7c50300840..9eb47f86bb693 100644 --- a/x-pack/plugins/cases/public/components/custom_fields/toggle/create.test.tsx +++ b/x-pack/plugins/cases/public/components/custom_fields/toggle/create.test.tsx @@ -13,7 +13,8 @@ import { Create } from './create'; import { customFieldsConfigurationMock } from '../../../containers/mock'; import userEvent from '@testing-library/user-event'; -describe('Create ', () => { +// FLAKY: https://github.com/elastic/kibana/issues/177304 +describe.skip('Create ', () => { const onSubmit = jest.fn(); beforeEach(() => { From c95f01b97b53c739e311e62a77072baf4228aa82 Mon Sep 17 00:00:00 2001 From: Paulo Henrique Date: Thu, 22 Aug 2024 18:17:43 -0700 Subject: [PATCH 42/59] [Cloud Security] Set DataTable row density to expanded (#191138) ## Summary Due to a [recent change](https://github.com/elastic/kibana/pull/188495) on the UnifiedDataTable component, the density was set to default to `compact`. This PR overrides this property to `expanded` in order to keep consistency with the Design specs. ## Screenshot ### Before PR changes: ![image](https://github.com/user-attachments/assets/329673ae-31f6-42f0-8552-253dbd465a7f) ### After PR changes: ![image](https://github.com/user-attachments/assets/bf9d9930-25e6-40a5-9639-a691d9d56893) ### Design spec ![image](https://github.com/user-attachments/assets/5f6ab4f8-807c-4e4c-a89e-56359493e4b2) --- .../cloud_security_data_table/cloud_security_data_table.tsx | 2 ++ 1 file changed, 2 insertions(+) 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 68a28a869efb7..7b63673707056 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 @@ -7,6 +7,7 @@ import React, { useState, useMemo } from 'react'; import _ from 'lodash'; import { + DataGridDensity, UnifiedDataTableSettings, UnifiedDataTableSettingsColumn, useColumns, @@ -362,6 +363,7 @@ export const CloudSecurityDataTable = ({ gridStyleOverride={gridStyle} rowLineHeightOverride="24px" controlColumnIds={controlColumnIds} + dataGridDensityState={DataGridDensity.EXPANDED} />
From 705539edc39751111f354854c420c43ae52905c1 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Fri, 23 Aug 2024 15:02:47 +1000 Subject: [PATCH 43/59] [api-docs] 2024-08-23 Daily api_docs build (#191157) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/808 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.devdocs.json | 72 +- api_docs/alerting.mdx | 4 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.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 | 83 +- 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.mdx | 2 +- api_docs/data_quality.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/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 6 +- api_docs/deprecations_by_plugin.mdx | 21 +- api_docs/deprecations_by_team.mdx | 6 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.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/entities_data_access.mdx | 2 +- api_docs/entity_manager.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/esql.mdx | 2 +- api_docs/esql_data_grid.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.devdocs.json | 6 +- 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.devdocs.json | 138 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/fields_metadata.mdx | 2 +- api_docs/file_upload.devdocs.json | 62 + api_docs/file_upload.mdx | 4 +- 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.devdocs.json | 149 +- api_docs/index_management.mdx | 4 +- api_docs/inference.mdx | 4 +- api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/integration_assistant.devdocs.json | 68 +- api_docs/integration_assistant.mdx | 4 +- api_docs/interactive_setup.mdx | 2 +- api_docs/investigate.devdocs.json | 84 +- api_docs/investigate.mdx | 4 +- api_docs/investigate_app.devdocs.json | 78 +- api_docs/investigate_app.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_log_pattern_analysis.mdx | 2 +- api_docs/kbn_aiops_log_rate_analysis.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_comparators.mdx | 2 +- .../kbn_alerting_state_types.devdocs.json | 16 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.devdocs.json | 74 + api_docs/kbn_alerting_types.mdx | 4 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_grouping.mdx | 2 +- api_docs/kbn_alerts_ui_shared.devdocs.json | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_types.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_avc_banner.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.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.devdocs.json | 216 ++- api_docs/kbn_config_schema.mdx | 2 +- ...ent_management_content_editor.devdocs.json | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...ement_content_insights_public.devdocs.json | 619 +++++++ ...ent_management_content_insights_public.mdx | 39 + ...ement_content_insights_server.devdocs.json | 171 ++ ...ent_management_content_insights_server.mdx | 33 + ...bn_content_management_favorites_public.mdx | 2 +- ...bn_content_management_favorites_server.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...agement_table_list_view_table.devdocs.json | 23 + ...ntent_management_table_list_view_table.mdx | 4 +- .../kbn_content_management_user_profiles.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- .../kbn_core_analytics_browser.devdocs.json | 4 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- .../kbn_core_analytics_server.devdocs.json | 4 +- 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 | 16 + api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.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_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.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_fleet.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_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.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.devdocs.json | 4 +- 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 +- ...bn_ecs_data_quality_dashboard.devdocs.json | 12 + api_docs/kbn_ecs_data_quality_dashboard.mdx | 4 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.mdx | 2 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_entities_schema.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_esql_ast.devdocs.json | 32 + api_docs/kbn_esql_ast.mdx | 4 +- api_docs/kbn_esql_utils.mdx | 2 +- api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_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_grid_layout.mdx | 2 +- api_docs/kbn_grouping.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_index_management.mdx | 2 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- .../kbn_investigation_shared.devdocs.json | 540 +++++- api_docs/kbn_investigation_shared.mdx | 4 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.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_json_schemas.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_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- .../kbn_managed_content_badge.devdocs.json | 19 +- api_docs/kbn_managed_content_badge.mdx | 4 +- 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_cancellable_search.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_time_buckets.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_rule_utils.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_presentation_containers.mdx | 2 +- api_docs/kbn_presentation_publishing.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_hooks.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_recently_accessed.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- .../kbn_response_ops_feature_flag_service.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rollup.mdx | 2 +- api_docs/kbn_router_to_openapispec.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- .../kbn_screenshotting_server.devdocs.json | 806 +++++++++ api_docs/kbn_screenshotting_server.mdx | 42 + api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.mdx | 2 +- api_docs/kbn_search_errors.mdx | 2 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_search_types.mdx | 2 +- api_docs/kbn_security_api_key_management.mdx | 2 +- ...n_security_authorization_core.devdocs.json | 468 ++++++ api_docs/kbn_security_authorization_core.mdx | 39 + api_docs/kbn_security_form_components.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- ...ecurity_role_management_model.devdocs.json | 1489 +++++++++++++++++ .../kbn_security_role_management_model.mdx | 33 + ...kbn_security_solution_distribution_bar.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 +- ...ion_exception_list_components.devdocs.json | 10 +- ...ritysolution_exception_list_components.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 +- .../kbn_server_route_repository_client.mdx | 2 +- ...server_route_repository_utils.devdocs.json | 2 +- .../kbn_server_route_repository_utils.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- .../kbn_shared_ux_table_persist.devdocs.json | 86 + api_docs/kbn_shared_ux_table_persist.mdx | 33 + 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_sort_predicates.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_synthetics_e2e.mdx | 2 +- api_docs/kbn_synthetics_private_location.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.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_timerange.mdx | 2 +- api_docs/kbn_tooling_log.devdocs.json | 34 +- api_docs/kbn_tooling_log.mdx | 4 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.mdx | 2 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_unsaved_changes_prompt.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod.devdocs.json | 2 +- api_docs/kbn_zod.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.devdocs.json | 164 +- api_docs/logs_explorer.mdx | 7 +- 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 | 657 +++++++- api_docs/metrics_data_access.mdx | 7 +- api_docs/ml.devdocs.json | 2 +- api_docs/ml.mdx | 4 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.devdocs.json | 2 +- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- .../observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_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 | 53 +- api_docs/presentation_panel.mdx | 2 +- 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.devdocs.json | 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/search_assistant.devdocs.json | 114 ++ api_docs/search_assistant.mdx | 46 + api_docs/search_connectors.mdx | 2 +- api_docs/search_homepage.mdx | 2 +- api_docs/search_inference_endpoints.mdx | 2 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.devdocs.json | 30 + api_docs/search_playground.mdx | 4 +- api_docs/security.devdocs.json | 20 +- api_docs/security.mdx | 4 +- 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/slo.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/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.devdocs.json | 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.devdocs.json | 18 + api_docs/usage_collection.mdx | 7 +- 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 +- 768 files changed, 7023 insertions(+), 1207 deletions(-) create mode 100644 api_docs/kbn_content_management_content_insights_public.devdocs.json create mode 100644 api_docs/kbn_content_management_content_insights_public.mdx create mode 100644 api_docs/kbn_content_management_content_insights_server.devdocs.json create mode 100644 api_docs/kbn_content_management_content_insights_server.mdx create mode 100644 api_docs/kbn_screenshotting_server.devdocs.json create mode 100644 api_docs/kbn_screenshotting_server.mdx create mode 100644 api_docs/kbn_security_authorization_core.devdocs.json create mode 100644 api_docs/kbn_security_authorization_core.mdx create mode 100644 api_docs/kbn_security_role_management_model.devdocs.json create mode 100644 api_docs/kbn_security_role_management_model.mdx create mode 100644 api_docs/kbn_shared_ux_table_persist.devdocs.json create mode 100644 api_docs/kbn_shared_ux_table_persist.mdx create mode 100644 api_docs/search_assistant.devdocs.json create mode 100644 api_docs/search_assistant.mdx diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 18ebbd794411a..c7e6afda96713 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-08-21 +date: 2024-08-23 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 37550bfb08109..2d98c3ff77eb7 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index 8c902a84bfa9c..8b751d24d590b 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index bb4d27b6f99e3..2472ed9795e3f 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-08-21 +date: 2024-08-23 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 093c0a2a72a8c..a2ee90c61e223 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -3286,7 +3286,7 @@ "label": "monitoring", "description": [], "signature": [ - "Readonly<{} & { run: Readonly<{} & { history: Readonly<{ outcome?: Readonly<{ warning?: \"execute\" | \"validate\" | \"unknown\" | \"license\" | \"timeout\" | \"read\" | \"decrypt\" | \"disabled\" | \"maxExecutableActions\" | \"maxAlerts\" | \"maxQueuedActions\" | null | undefined; outcomeOrder?: number | undefined; outcomeMsg?: string[] | null | undefined; } & { outcome: \"warning\" | \"succeeded\" | \"failed\"; alertsCount: Readonly<{ recovered?: number | null | undefined; active?: number | null | undefined; new?: number | null | undefined; ignored?: number | null | undefined; } & {}>; }> | undefined; duration?: number | undefined; } & { timestamp: number; success: boolean; }>[]; calculated_metrics: Readonly<{ p50?: number | undefined; p95?: number | undefined; p99?: number | undefined; } & { success_ratio: number; }>; last_run: Readonly<{} & { timestamp: string; metrics: Readonly<{ duration?: number | undefined; total_search_duration_ms?: number | null | undefined; total_indexing_duration_ms?: number | null | undefined; total_alerts_detected?: number | null | undefined; total_alerts_created?: number | null | undefined; gap_duration_s?: number | null | undefined; } & {}>; }>; }>; }> | undefined" + "Readonly<{} & { run: Readonly<{} & { history: Readonly<{ outcome?: Readonly<{ warning?: \"execute\" | \"validate\" | \"unknown\" | \"license\" | \"ruleExecution\" | \"timeout\" | \"read\" | \"decrypt\" | \"disabled\" | \"maxExecutableActions\" | \"maxAlerts\" | \"maxQueuedActions\" | null | undefined; outcomeOrder?: number | undefined; outcomeMsg?: string[] | null | undefined; } & { outcome: \"warning\" | \"succeeded\" | \"failed\"; alertsCount: Readonly<{ recovered?: number | null | undefined; active?: number | null | undefined; new?: number | null | undefined; ignored?: number | null | undefined; } & {}>; }> | undefined; duration?: number | undefined; } & { timestamp: number; success: boolean; }>[]; calculated_metrics: Readonly<{ p50?: number | undefined; p95?: number | undefined; p99?: number | undefined; } & { success_ratio: number; }>; last_run: Readonly<{} & { timestamp: string; metrics: Readonly<{ duration?: number | undefined; total_search_duration_ms?: number | null | undefined; total_indexing_duration_ms?: number | null | undefined; total_alerts_detected?: number | null | undefined; total_alerts_created?: number | null | undefined; gap_duration_s?: number | null | undefined; } & {}>; }>; }>; }> | undefined" ], "path": "x-pack/plugins/alerting/server/application/rule/types/rule.ts", "deprecated": false, @@ -3342,7 +3342,7 @@ "label": "lastRun", "description": [], "signature": [ - "Readonly<{ warning?: \"execute\" | \"validate\" | \"unknown\" | \"license\" | \"timeout\" | \"read\" | \"decrypt\" | \"disabled\" | \"maxExecutableActions\" | \"maxAlerts\" | \"maxQueuedActions\" | null | undefined; outcomeOrder?: number | undefined; outcomeMsg?: string[] | null | undefined; } & { outcome: \"warning\" | \"succeeded\" | \"failed\"; alertsCount: Readonly<{ recovered?: number | null | undefined; active?: number | null | undefined; new?: number | null | undefined; ignored?: number | null | undefined; } & {}>; }> | null | undefined" + "Readonly<{ warning?: \"execute\" | \"validate\" | \"unknown\" | \"license\" | \"ruleExecution\" | \"timeout\" | \"read\" | \"decrypt\" | \"disabled\" | \"maxExecutableActions\" | \"maxAlerts\" | \"maxQueuedActions\" | null | undefined; outcomeOrder?: number | undefined; outcomeMsg?: string[] | null | undefined; } & { outcome: \"warning\" | \"succeeded\" | \"failed\"; alertsCount: Readonly<{ recovered?: number | null | undefined; active?: number | null | undefined; new?: number | null | undefined; ignored?: number | null | undefined; } & {}>; }> | null | undefined" ], "path": "x-pack/plugins/alerting/server/application/rule/types/rule.ts", "deprecated": false, @@ -4100,7 +4100,7 @@ "label": "schemas", "description": [], "signature": [ - "{ params?: { type: \"zod\"; schema: Zod.ZodObject | Zod.ZodIntersection; } | { type: \"config-schema\"; schema: ", + "{ params?: { type: \"zod\"; schema: any; } | { type: \"config-schema\"; schema: ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -5044,7 +5044,7 @@ }, ">; getAlertState: (params: ", "GetAlertStateParams", - ") => Promise | undefined; alertInstances?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; flapping?: boolean | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined; alertRecoveredInstances?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; flapping?: boolean | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined; previousStartedAt?: string | null | undefined; summaryActions?: Record> | undefined; } & {}>>; getAlertSummary: (params: ", + ") => Promise | undefined; alertInstances?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined; alertRecoveredInstances?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined; previousStartedAt?: string | null | undefined; summaryActions?: Record> | undefined; } & {}>>; getAlertSummary: (params: ", "GetAlertSummaryParams", ") => Promise<", { @@ -8529,6 +8529,20 @@ "path": "packages/kbn-alerting-types/rule_types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-common.Rule.flapping", + "type": "Object", + "tags": [], + "label": "flapping", + "description": [], + "signature": [ + "{ lookBackWindow: number; statusChangeThreshold: number; } | undefined" + ], + "path": "packages/kbn-alerting-types/rule_types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -9416,6 +9430,42 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "alerting", + "id": "def-common.RuleSpecificFlappingProperties", + "type": "Interface", + "tags": [], + "label": "RuleSpecificFlappingProperties", + "description": [], + "path": "x-pack/plugins/alerting/common/rules_settings.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "alerting", + "id": "def-common.RuleSpecificFlappingProperties.lookBackWindow", + "type": "number", + "tags": [], + "label": "lookBackWindow", + "description": [], + "path": "x-pack/plugins/alerting/common/rules_settings.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-common.RuleSpecificFlappingProperties.statusChangeThreshold", + "type": "number", + "tags": [], + "label": "statusChangeThreshold", + "description": [], + "path": "x-pack/plugins/alerting/common/rules_settings.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "alerting", "id": "def-common.RulesSettings", @@ -10665,7 +10715,7 @@ "label": "LatestAlertInstanceMetaSchema", "description": [], "signature": [ - "{ readonly uuid?: string | undefined; readonly lastScheduledActions?: Readonly<{ actions?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; readonly flappingHistory?: boolean[] | undefined; readonly flapping?: boolean | undefined; readonly maintenanceWindowIds?: string[] | undefined; readonly pendingRecoveredCount?: number | undefined; readonly activeCount?: number | undefined; }" + "{ readonly flapping?: boolean | undefined; readonly uuid?: string | undefined; readonly lastScheduledActions?: Readonly<{ actions?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; readonly flappingHistory?: boolean[] | undefined; readonly maintenanceWindowIds?: string[] | undefined; readonly pendingRecoveredCount?: number | undefined; readonly activeCount?: number | undefined; }" ], "path": "x-pack/packages/kbn-alerting-state-types/src/task_state/index.ts", "deprecated": false, @@ -10710,7 +10760,7 @@ "label": "LatestRawAlertInstanceSchema", "description": [], "signature": [ - "{ readonly meta?: Readonly<{ uuid?: string | undefined; lastScheduledActions?: Readonly<{ actions?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; flapping?: boolean | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; readonly state?: Record | undefined; }" + "{ readonly meta?: Readonly<{ flapping?: boolean | undefined; uuid?: string | undefined; lastScheduledActions?: Readonly<{ actions?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; readonly state?: Record | undefined; }" ], "path": "x-pack/packages/kbn-alerting-state-types/src/task_state/index.ts", "deprecated": false, @@ -10725,7 +10775,7 @@ "label": "LatestTaskStateSchema", "description": [], "signature": [ - "{ readonly alertTypeState?: Record | undefined; readonly alertInstances?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; flapping?: boolean | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined; readonly alertRecoveredInstances?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; flapping?: boolean | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined; readonly previousStartedAt?: string | null | undefined; readonly summaryActions?: Record> | undefined; }" + "{ readonly alertTypeState?: Record | undefined; readonly alertInstances?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined; readonly alertRecoveredInstances?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined; readonly previousStartedAt?: string | null | undefined; readonly summaryActions?: Record> | undefined; }" ], "path": "x-pack/packages/kbn-alerting-state-types/src/task_state/index.ts", "deprecated": false, @@ -11080,7 +11130,7 @@ "signature": [ "20" ], - "path": "x-pack/plugins/alerting/common/rules_settings.ts", + "path": "packages/kbn-alerting-types/rule_flapping.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -11110,7 +11160,7 @@ "signature": [ "20" ], - "path": "x-pack/plugins/alerting/common/rules_settings.ts", + "path": "packages/kbn-alerting-types/rule_flapping.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -11125,7 +11175,7 @@ "signature": [ "2" ], - "path": "x-pack/plugins/alerting/common/rules_settings.ts", + "path": "packages/kbn-alerting-types/rule_flapping.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -11155,7 +11205,7 @@ "signature": [ "2" ], - "path": "x-pack/plugins/alerting/common/rules_settings.ts", + "path": "packages/kbn-alerting-types/rule_flapping.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 716abf7084650..8ed71d6bcbe2d 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 871 | 1 | 839 | 52 | +| 875 | 1 | 843 | 52 | ## Client diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 93266331061ab..7a015e6f1ad72 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-08-21 +date: 2024-08-23 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 19d230a72e226..e2f4129a42285 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index d30453c03092f..85a05e3262d03 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-08-21 +date: 2024-08-23 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 8a1045be20df4..f4680d871ee01 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2024-08-21 +date: 2024-08-23 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 b08be174b485e..c5bf934faf0f6 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-08-21 +date: 2024-08-23 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 f40dce3015109..267843a336dee 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-08-21 +date: 2024-08-23 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 1c2244e992feb..3b03c9e04048b 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-08-21 +date: 2024-08-23 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 4997397ea4935..2e2a6b765313a 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-08-21 +date: 2024-08-23 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 29caf923eead9..3eacf8526efad 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-08-21 +date: 2024-08-23 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 a0f69d9367856..763672a01ae61 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-08-21 +date: 2024-08-23 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 31864a9c747be..c9bbefe01f698 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2024-08-21 +date: 2024-08-23 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 58a489fbc79af..2be4ac3105c1b 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-08-21 +date: 2024-08-23 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 740ccdf846ee8..f375f7b13c02c 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-08-21 +date: 2024-08-23 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 b8c0702ff9d62..2e0473b097025 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-08-21 +date: 2024-08-23 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 2f21f8e7649cf..fa81eb3778122 100644 --- a/api_docs/controls.devdocs.json +++ b/api_docs/controls.devdocs.json @@ -5276,41 +5276,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRuntimeState.defaultControlGrow", - "type": "CompoundType", - "tags": [], - "label": "defaultControlGrow", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/plugins/controls/public/react_controls/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRuntimeState.defaultControlWidth", - "type": "CompoundType", - "tags": [], - "label": "defaultControlWidth", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlWidth", - "text": "ControlWidth" - }, - " | undefined" - ], - "path": "src/plugins/controls/public/react_controls/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "controls", "id": "def-public.ControlGroupRuntimeState.labelPosition", @@ -6572,18 +6537,6 @@ "text": "PublishesUnsavedChanges" }, ", \"unsavedChanges\"> & ", - "PublishesControlDisplaySettings", - " & { labelPosition: ", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishingSubject", - "text": "PublishingSubject" - }, - "<", - "ControlStyle", - ">; } & ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -6655,7 +6608,7 @@ "section": "def-common.ControlInputTransform", "text": "ControlInputTransform" }, - " | undefined; } | undefined) => void; lastUsedDataViewId$: ", + " | undefined; } | undefined) => void; labelPosition: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -6663,7 +6616,9 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; }" + "<", + "ControlStyle", + ">; }" ], "path": "src/plugins/controls/public/react_controls/control_group/types.ts", "deprecated": false, @@ -6927,9 +6882,7 @@ "section": "def-public.PublishesUnsavedChanges", "text": "PublishesUnsavedChanges" }, - " & ", - "PublishesControlDisplaySettings", - " & Partial<", + " & Partial<", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -6997,7 +6950,31 @@ }, "<", "DefaultControlState", - ">; setDataLoading: (loading: boolean) => void; setBlockingError: (error: Error | undefined) => void; } & Omit<", + ">; setDataLoading: (loading: boolean) => void; setBlockingError: (error: Error | undefined) => void; grow: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "; width: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.ControlWidth", + "text": "ControlWidth" + }, + " | undefined>; } & Omit<", { "pluginId": "@kbn/presentation-publishing", "scope": "public", diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 2f947130b1fd6..e16c4dfee27da 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-08-21 +date: 2024-08-23 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 | |-------------------|-----------|------------------------|-----------------| -| 396 | 0 | 387 | 29 | +| 394 | 0 | 385 | 28 | ## Client diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index e38d3d4dfcbe5..3690de252c082 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-08-21 +date: 2024-08-23 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 93607e6059480..ba19fd7c590e8 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-08-21 +date: 2024-08-23 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 dc05031b8fe01..da46150b2b097 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-08-21 +date: 2024-08-23 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 81a1f32c13658..1c12685087570 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index 67af6249d7f73..dd39100824d66 100644 --- a/api_docs/data_quality.mdx +++ b/api_docs/data_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataQuality title: "dataQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the dataQuality plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index cf619026a8e63..077c10aa11247 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-08-21 +date: 2024-08-23 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 bd24a7f92b45b..739fcafaaa728 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-08-21 +date: 2024-08-23 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 eb468b07129aa..e2015a95c8308 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-08-21 +date: 2024-08-23 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 a2bec5784eab9..a031ea4ccb415 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-08-21 +date: 2024-08-23 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 411fa7167f7e8..0ef2c7d54d981 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-08-21 +date: 2024-08-23 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 356b7d69823d3..b086c09aac273 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-08-21 +date: 2024-08-23 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 fcbe1a139a169..a9e33ae5e2a8a 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index 4023aae4489b4..2a121ae5bdbdd 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 19511b36d42da..5f58be943dc6b 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -177,10 +177,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | spaces, security, actions, alerting, aiops, remoteClusters, ml, graph, indexLifecycleManagement, mapsEms, osquery, securitySolution, painlessLab, rollup, searchprofiler, snapshotRestore, transform, upgradeAssistant | 8.8.0 | | | fleet, apm, security, securitySolution | 8.8.0 | | | fleet, apm, security, securitySolution | 8.8.0 | -| | spaces, security, alerting, cases | 8.8.0 | +| | spaces, @kbn/security-authorization-core, security, alerting, cases, @kbn/security-role-management-model | 8.8.0 | | | @kbn/core-application-browser-internal, @kbn/core-application-browser-mocks, management, fleet, security, kibanaOverview, @kbn/core | 8.8.0 | | | embeddable, presentationUtil, lens, dashboard, discover, graph, links | 8.8.0 | -| | security | 8.8.0 | +| | security, @kbn/security-role-management-model | 8.8.0 | | | apm | 8.8.0 | | | mapsEms | 8.8.0 | | | savedObjectsTaggingOss | 8.8.0 | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 62e1e381a8330..279ecce05b35b 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -428,6 +428,23 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## @kbn/security-authorization-core + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [privileges.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/authorization_core/src/privileges/privileges.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures)+ 20 more | 8.8.0 | + + + +## @kbn/security-role-management-model + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [kibana_privileges.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/role_management_model/src/__fixtures__/kibana_privileges.ts#:~:text=getKibanaFeatures), [kibana_privileges.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/role_management_model/src/__fixtures__/kibana_privileges.ts#:~:text=getKibanaFeatures) | 8.8.0 | +| | [kibana_privileges.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/role_management_model/src/__fixtures__/kibana_privileges.ts#:~:text=getElasticsearchFeatures) | 8.8.0 | + + + ## @kbn/securitysolution-data-table | Deprecated API | Reference location(s) | Remove By | @@ -1325,7 +1342,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ This is relied on by the reporting feature, and should be removed once reporting migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/issues/19914 | -| | [app_authorization.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/app_authorization.ts#:~:text=getKibanaFeatures), [privileges.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.ts#:~:text=getKibanaFeatures), [authorization_service.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/authorization_service.tsx#:~:text=getKibanaFeatures), [app_authorization.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/app_authorization.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures)+ 24 more | 8.8.0 | +| | [app_authorization.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/app_authorization.ts#:~:text=getKibanaFeatures), [authorization_service.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/authorization_service.tsx#:~:text=getKibanaFeatures), [app_authorization.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/app_authorization.test.ts#:~:text=getKibanaFeatures) | 8.8.0 | | | [authorization_service.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/authorization_service.tsx#:~:text=getElasticsearchFeatures) | 8.8.0 | | | [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/common/licensing/license_service.test.ts#:~:text=mode), [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/common/licensing/license_service.test.ts#:~:text=mode), [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/common/licensing/license_service.test.ts#:~:text=mode) | 8.8.0 | | | [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/plugin.tsx#:~:text=license%24) | 8.8.0 | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index e85f6e71de3fa..a8be386d19906 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -87,8 +87,8 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ This is relied on by the reporting feature, and should be removed once reporting migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/issues/19914 | -| security | | [app_authorization.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/app_authorization.ts#:~:text=getKibanaFeatures), [privileges.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.ts#:~:text=getKibanaFeatures), [authorization_service.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/authorization_service.tsx#:~:text=getKibanaFeatures), [app_authorization.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/app_authorization.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures)+ 27 more | 8.8.0 | -| security | | [authorization_service.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/authorization_service.tsx#:~:text=getElasticsearchFeatures) | 8.8.0 | +| security | | [app_authorization.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/app_authorization.ts#:~:text=getKibanaFeatures), [authorization_service.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/authorization_service.tsx#:~:text=getKibanaFeatures), [app_authorization.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/app_authorization.test.ts#:~:text=getKibanaFeatures), [on_post_auth_interceptor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/spaces/server/lib/request_interceptors/on_post_auth_interceptor.ts#:~:text=getKibanaFeatures), [spaces_usage_collector.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/spaces/server/usage_collection/spaces_usage_collector.ts#:~:text=getKibanaFeatures), [on_post_auth_interceptor.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/spaces/server/lib/request_interceptors/on_post_auth_interceptor.test.ts#:~:text=getKibanaFeatures), [privileges.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/authorization_core/src/privileges/privileges.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures)+ 28 more | 8.8.0 | +| security | | [authorization_service.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/authorization_service.tsx#:~:text=getElasticsearchFeatures), [kibana_privileges.ts](https://github.com/elastic/kibana/tree/main/x-pack/packages/security/role_management_model/src/__fixtures__/kibana_privileges.ts#:~:text=getElasticsearchFeatures) | 8.8.0 | | security | | [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/common/licensing/license_service.test.ts#:~:text=mode), [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/common/licensing/license_service.test.ts#:~:text=mode), [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/common/licensing/license_service.test.ts#:~:text=mode) | 8.8.0 | | security | | [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/plugin.tsx#:~:text=license%24) | 8.8.0 | | security | | [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/common/licensing/license_service.test.ts#:~:text=mode), [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/common/licensing/license_service.test.ts#:~:text=mode), [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/common/licensing/license_service.test.ts#:~:text=mode) | 8.8.0 | diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 3cd59e049a8a1..f6d11875ea422 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-08-21 +date: 2024-08-23 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 108ea28b8e6fd..a981d65d81783 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-08-21 +date: 2024-08-23 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 73a54a3ea5267..2bb7ac122f2ff 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index 60b918c7d6378..1b0a82eb85317 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index d2d01f8fe1e5e..48a3bc3efb0b0 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-08-21 +date: 2024-08-23 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 b8b4f550d44c8..8b4ba692ba7f0 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-08-21 +date: 2024-08-23 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 4e639b5b41a72..81206ed4e9163 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-08-21 +date: 2024-08-23 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 f9719d664139b..9cddad2ac9fee 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-08-21 +date: 2024-08-23 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 94e71bc65e104..4b576936aa3b9 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-08-21 +date: 2024-08-23 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 37a269514e144..222bf0183d193 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index 72850c6069b33..0d7825c2fdf2d 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index f5b8809b8e327..a47af092d63c6 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 925011b3729a9..c92e5932f8ef1 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index a00821cf5c589..0c38a0976cf5f 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index ed1d2f13a09a4..5c5b5ff146f70 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 8f6b7c840b87c..defc3968076c3 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-08-21 +date: 2024-08-23 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 aa504bf848435..6ead5380f7a72 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.devdocs.json b/api_docs/event_log.devdocs.json index 3377b88eb598d..7ce5819610f98 100644 --- a/api_docs/event_log.devdocs.json +++ b/api_docs/event_log.devdocs.json @@ -1450,7 +1450,7 @@ "label": "data", "description": [], "signature": [ - "(Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; uuid?: string | undefined; flapping?: boolean | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; code?: string | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; provider?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined)[]" + "(Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; code?: string | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; provider?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined)[]" ], "path": "x-pack/plugins/event_log/server/es/cluster_client_adapter.ts", "deprecated": false, @@ -1470,7 +1470,7 @@ "label": "IEvent", "description": [], "signature": [ - "DeepPartial | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; uuid?: string | undefined; flapping?: boolean | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; code?: string | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; provider?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}>>> | undefined" + "DeepPartial | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; code?: string | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; provider?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}>>> | undefined" ], "path": "x-pack/plugins/event_log/generated/schemas.ts", "deprecated": false, @@ -1485,7 +1485,7 @@ "label": "IValidatedEvent", "description": [], "signature": [ - "Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; uuid?: string | undefined; flapping?: boolean | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; code?: string | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; provider?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined" + "Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; code?: string | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; provider?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined" ], "path": "x-pack/plugins/event_log/generated/schemas.ts", "deprecated": false, diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index d4a29b89c3b41..6e2a6a67b77f2 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-08-21 +date: 2024-08-23 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 7b998a15b76cc..62e028d3ce32d 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-08-21 +date: 2024-08-23 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 215c7f5b19704..27b36de0289a2 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-08-21 +date: 2024-08-23 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 ad7ae24e28359..60ef8d250d787 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-08-21 +date: 2024-08-23 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 453c1b64df9f8..f163478ee0430 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-08-21 +date: 2024-08-23 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 09b4bf207f13c..416b828807c4a 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-08-21 +date: 2024-08-23 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 dd96109aad6f1..a620bc75025bc 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-08-21 +date: 2024-08-23 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 2c6fc2fc39a1a..8e4ef138f270f 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-08-21 +date: 2024-08-23 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 44a75068afe45..48607321d1423 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-08-21 +date: 2024-08-23 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 20064dec4a784..7d938df0aa168 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-08-21 +date: 2024-08-23 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 2b602f705abc1..ddc6d724db4ba 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-08-21 +date: 2024-08-23 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 005b31fe46b4e..ca86e960f26ce 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-08-21 +date: 2024-08-23 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 8699185b89a27..05b1f2714dde7 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-08-21 +date: 2024-08-23 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 51db2671cd1bf..ef7dd3a22f588 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-08-21 +date: 2024-08-23 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 fb7072f3a1c07..5924d2b5a0daa 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-08-21 +date: 2024-08-23 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 a1681dc8edd3a..edc0ef60c9365 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.devdocs.json b/api_docs/features.devdocs.json index e6c5019a037fb..6b01f79e4bb96 100644 --- a/api_docs/features.devdocs.json +++ b/api_docs/features.devdocs.json @@ -2104,12 +2104,12 @@ "path": "x-pack/plugins/spaces/server/usage_collection/spaces_usage_collector.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/app_authorization.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.ts" }, { "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.ts" + "path": "x-pack/plugins/security/server/authorization/app_authorization.ts" }, { "plugin": "security", @@ -2128,128 +2128,132 @@ "path": "x-pack/plugins/security/server/authorization/app_authorization.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "spaces", + "path": "x-pack/plugins/spaces/server/lib/request_interceptors/on_post_auth_interceptor.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-role-management-model", + "path": "x-pack/packages/security/role_management_model/src/__fixtures__/kibana_privileges.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-role-management-model", + "path": "x-pack/packages/security/role_management_model/src/__fixtures__/kibana_privileges.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/privileges/privileges.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "spaces", - "path": "x-pack/plugins/spaces/server/lib/request_interceptors/on_post_auth_interceptor.test.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" }, { - "plugin": "security", - "path": "x-pack/plugins/security/public/management/roles/__fixtures__/kibana_privileges.ts" + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" + }, + { + "plugin": "@kbn/security-authorization-core", + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.test.ts" } ], "children": [], @@ -2285,6 +2289,10 @@ { "plugin": "security", "path": "x-pack/plugins/security/server/authorization/authorization_service.tsx" + }, + { + "plugin": "@kbn/security-role-management-model", + "path": "x-pack/packages/security/role_management_model/src/__fixtures__/kibana_privileges.ts" } ], "children": [], diff --git a/api_docs/features.mdx b/api_docs/features.mdx index dea40ac9d3420..4b5307ff58419 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-08-21 +date: 2024-08-23 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 c2fe01a1a115d..69fc4a6b3b94d 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index ed16ae4ca39b9..8aedc38cc1661 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.devdocs.json b/api_docs/file_upload.devdocs.json index ec813208b95dd..791269ecab683 100644 --- a/api_docs/file_upload.devdocs.json +++ b/api_docs/file_upload.devdocs.json @@ -981,6 +981,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "fileUpload", + "id": "def-common.FindFileStructureResponse.document_type", + "type": "string", + "tags": [], + "label": "document_type", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/file_upload/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "fileUpload", "id": "def-common.FindFileStructureResponse.field_stats", @@ -1295,6 +1309,26 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "fileUpload", + "id": "def-common.FindFileStructureResponse.ingest_pipeline", + "type": "Object", + "tags": [], + "label": "ingest_pipeline", + "description": [], + "signature": [ + { + "pluginId": "fileUpload", + "scope": "common", + "docId": "kibFileUploadPluginApi", + "section": "def-common.IngestPipeline", + "text": "IngestPipeline" + } + ], + "path": "x-pack/plugins/file_upload/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "fileUpload", "id": "def-common.FindFileStructureResponse.quote", @@ -1517,6 +1551,34 @@ "path": "x-pack/plugins/file_upload/common/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "fileUpload", + "id": "def-common.IngestPipeline.isManaged", + "type": "CompoundType", + "tags": [], + "label": "isManaged", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/file_upload/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "fileUpload", + "id": "def-common.IngestPipeline.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/file_upload/common/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 2f5e4d5bd14b3..752fcb763aebe 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 84 | 0 | 84 | 8 | +| 88 | 0 | 88 | 8 | ## Client diff --git a/api_docs/files.mdx b/api_docs/files.mdx index b5d3d53ad26cb..32286b595947e 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-08-21 +date: 2024-08-23 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 f85afbade513d..c3f3873d3cbda 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-08-21 +date: 2024-08-23 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 a5c02e8584500..511e4311c4726 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -27941,7 +27941,7 @@ "label": "RegistrySearchResult", "description": [], "signature": [ - "{ type?: \"input\" | \"integration\" | undefined; version: string; name: string; title: string; description: string; path: string; internal?: boolean | undefined; download: string; icons?: (", + "{ type?: \"input\" | \"integration\" | undefined; version: string; name: string; title: string; description: string; internal?: boolean | undefined; path: string; download: string; icons?: (", { "pluginId": "fleet", "scope": "common", diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index c6831804aad34..b15c6ec799252 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-08-21 +date: 2024-08-23 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 5eae4c4968561..ea98ae71624af 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-08-21 +date: 2024-08-23 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 2969d28bcf73d..20c3582d29192 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-08-21 +date: 2024-08-23 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 2bfa134da2bd4..57ce7c47e0e20 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-08-21 +date: 2024-08-23 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 d1d16cb016713..6a7a905680311 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-08-21 +date: 2024-08-23 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 02a3478e74755..43a7f5b6410f4 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.devdocs.json b/api_docs/index_management.devdocs.json index f0b2487774725..062bb86a24a7f 100644 --- a/api_docs/index_management.devdocs.json +++ b/api_docs/index_management.devdocs.json @@ -2405,6 +2405,145 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "indexManagement", + "id": "def-common.IndexModule", + "type": "Interface", + "tags": [], + "label": "IndexModule", + "description": [], + "path": "x-pack/plugins/index_management/common/types/indices.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "indexManagement", + "id": "def-common.IndexModule.number_of_shards", + "type": "CompoundType", + "tags": [], + "label": "number_of_shards", + "description": [], + "signature": [ + "string | number" + ], + "path": "x-pack/plugins/index_management/common/types/indices.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "indexManagement", + "id": "def-common.IndexModule.codec", + "type": "string", + "tags": [], + "label": "codec", + "description": [], + "path": "x-pack/plugins/index_management/common/types/indices.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "indexManagement", + "id": "def-common.IndexModule.routing_partition_size", + "type": "number", + "tags": [], + "label": "routing_partition_size", + "description": [], + "path": "x-pack/plugins/index_management/common/types/indices.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "indexManagement", + "id": "def-common.IndexModule.refresh_interval", + "type": "string", + "tags": [], + "label": "refresh_interval", + "description": [], + "path": "x-pack/plugins/index_management/common/types/indices.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "indexManagement", + "id": "def-common.IndexModule.load_fixed_bitset_filters_eagerly", + "type": "boolean", + "tags": [], + "label": "load_fixed_bitset_filters_eagerly", + "description": [], + "path": "x-pack/plugins/index_management/common/types/indices.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "indexManagement", + "id": "def-common.IndexModule.shard", + "type": "Object", + "tags": [], + "label": "shard", + "description": [], + "signature": [ + "{ check_on_startup: boolean | \"checksum\"; }" + ], + "path": "x-pack/plugins/index_management/common/types/indices.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "indexManagement", + "id": "def-common.IndexModule.number_of_replicas", + "type": "number", + "tags": [], + "label": "number_of_replicas", + "description": [], + "path": "x-pack/plugins/index_management/common/types/indices.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "indexManagement", + "id": "def-common.IndexModule.auto_expand_replicas", + "type": "CompoundType", + "tags": [], + "label": "auto_expand_replicas", + "description": [], + "signature": [ + "string | false" + ], + "path": "x-pack/plugins/index_management/common/types/indices.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "indexManagement", + "id": "def-common.IndexModule.lifecycle", + "type": "Object", + "tags": [], + "label": "lifecycle", + "description": [], + "signature": [ + "LifecycleModule" + ], + "path": "x-pack/plugins/index_management/common/types/indices.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "indexManagement", + "id": "def-common.IndexModule.routing", + "type": "Object", + "tags": [], + "label": "routing", + "description": [], + "signature": [ + "{ allocation: { enable: \"none\" | \"all\" | \"primaries\" | \"new_primaries\"; }; rebalance: { enable: \"none\" | \"all\" | \"primaries\" | \"replicas\"; }; }" + ], + "path": "x-pack/plugins/index_management/common/types/indices.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "indexManagement", "id": "def-common.IndexSettings", @@ -2424,7 +2563,15 @@ "label": "index", "description": [], "signature": [ - "Partial | undefined" + "Partial<", + { + "pluginId": "indexManagement", + "scope": "common", + "docId": "kibIndexManagementPluginApi", + "section": "def-common.IndexModule", + "text": "IndexModule" + }, + "> | undefined" ], "path": "x-pack/plugins/index_management/common/types/indices.ts", "deprecated": false, diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index f4b6be3f859b5..0f87c16a2a691 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kiban | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 227 | 0 | 222 | 1 | +| 238 | 0 | 233 | 1 | ## Client diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index 2e375f9c72ac9..fbeefebad5d87 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,14 +8,14 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; -Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) for questions regarding this plugin. +Contact [@elastic/appex-ai-infra](https://github.com/orgs/elastic/teams/appex-ai-infra) for questions regarding this plugin. **Code health stats** diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index aad7d9b1bf177..c734a16b4f1b9 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/ingest_pipelines.mdx b/api_docs/ingest_pipelines.mdx index 648e5dc62da5b..1f7d558b514de 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ingestPipelines'] --- import ingestPipelinesObj from './ingest_pipelines.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 26a75328b0e35..d97ac52c0ac44 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.devdocs.json b/api_docs/integration_assistant.devdocs.json index 9b7d0934031ff..ab607c4fa22fe 100644 --- a/api_docs/integration_assistant.devdocs.json +++ b/api_docs/integration_assistant.devdocs.json @@ -188,7 +188,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }[]; logo?: string | undefined; }; }" + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }; }" ], "path": "x-pack/plugins/integration_assistant/common/api/build_integration/build_integration.ts", "deprecated": false, @@ -353,7 +353,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }" + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts", "deprecated": false, @@ -497,7 +497,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }[]; logo?: string | undefined; }" + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts", "deprecated": false, @@ -667,6 +667,23 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.SamplesFormat", + "type": "Type", + "tags": [], + "label": "SamplesFormat", + "description": [ + "\nFormat of the provided log samples." + ], + "signature": [ + "{ name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }" + ], + "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], "objects": [ @@ -742,7 +759,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -758,7 +775,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -774,7 +791,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }>, \"many\">; logo: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }>, \"many\">; logo: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -790,7 +807,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }[]; logo?: string | undefined; }, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -806,7 +823,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }[]; logo?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -822,7 +839,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }[]; logo?: string | undefined; }; }, { integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }; }, { integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -838,7 +855,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }[]; logo?: string | undefined; }; }>" + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }; }>" ], "path": "x-pack/plugins/integration_assistant/common/api/build_integration/build_integration.ts", "deprecated": false, @@ -1297,7 +1314,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1313,7 +1330,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1329,7 +1346,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }>" + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }>" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts", "deprecated": false, @@ -1627,7 +1644,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1643,7 +1660,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1659,7 +1676,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }>, \"many\">; logo: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }>, \"many\">; logo: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1675,7 +1692,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }[]; logo?: string | undefined; }, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1691,7 +1708,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }[]; logo?: string | undefined; }>" + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }>" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts", "deprecated": false, @@ -2030,6 +2047,21 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.SamplesFormat", + "type": "Object", + "tags": [], + "label": "SamplesFormat", + "description": [], + "signature": [ + "Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>" + ], + "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ] } diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index 2e46491c5c191..d23dec3a4e026 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-scalability](https://github.com/orgs/elastic/teams/se | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 47 | 0 | 40 | 3 | +| 49 | 0 | 41 | 3 | ## Client diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index a513d20a6ccaa..d7a68d8b3622b 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/investigate.devdocs.json b/api_docs/investigate.devdocs.json index d90742c490ead..8febc4c6ac5f4 100644 --- a/api_docs/investigate.devdocs.json +++ b/api_docs/investigate.devdocs.json @@ -494,10 +494,10 @@ }, { "parentPluginId": "investigate", - "id": "def-public.InvestigateWidget.created", + "id": "def-public.InvestigateWidget.createdAt", "type": "number", "tags": [], - "label": "created", + "label": "createdAt", "description": [], "path": "x-pack/plugins/observability_solution/investigate/common/types.ts", "deprecated": false, @@ -505,10 +505,10 @@ }, { "parentPluginId": "investigate", - "id": "def-public.InvestigateWidget.last_updated", - "type": "number", + "id": "def-public.InvestigateWidget.createdBy", + "type": "string", "tags": [], - "label": "last_updated", + "label": "createdBy", "description": [], "path": "x-pack/plugins/observability_solution/investigate/common/types.ts", "deprecated": false, @@ -516,10 +516,10 @@ }, { "parentPluginId": "investigate", - "id": "def-public.InvestigateWidget.type", + "id": "def-public.InvestigateWidget.title", "type": "string", "tags": [], - "label": "type", + "label": "title", "description": [], "path": "x-pack/plugins/observability_solution/investigate/common/types.ts", "deprecated": false, @@ -527,20 +527,11 @@ }, { "parentPluginId": "investigate", - "id": "def-public.InvestigateWidget.user", - "type": "Object", + "id": "def-public.InvestigateWidget.type", + "type": "string", "tags": [], - "label": "user", + "label": "type", "description": [], - "signature": [ - { - "pluginId": "@kbn/core-security-common", - "scope": "common", - "docId": "kibKbnCoreSecurityCommonPluginApi", - "section": "def-common.AuthenticatedUser", - "text": "AuthenticatedUser" - } - ], "path": "x-pack/plugins/observability_solution/investigate/common/types.ts", "deprecated": false, "trackAdoption": false @@ -573,17 +564,6 @@ "path": "x-pack/plugins/observability_solution/investigate/common/types.ts", "deprecated": false, "trackAdoption": false - }, - { - "parentPluginId": "investigate", - "id": "def-public.InvestigateWidget.title", - "type": "string", - "tags": [], - "label": "title", - "description": [], - "path": "x-pack/plugins/observability_solution/investigate/common/types.ts", - "deprecated": false, - "trackAdoption": false } ], "initialIsOpen": false @@ -886,7 +866,7 @@ "section": "def-common.AuthenticatedUser", "text": "AuthenticatedUser" }, - "; investigationData?: { id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; } | undefined; }) => ", + "; investigationData?: { id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: \"esql\"; params: { esql: string; suggestion: any; }; })[]; } | undefined; }) => ", "UseInvestigationApi" ], "path": "x-pack/plugins/observability_solution/investigate/public/types.ts", @@ -932,7 +912,7 @@ "label": "investigationData", "description": [], "signature": [ - "{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; } | undefined" + "{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: \"esql\"; params: { esql: string; suggestion: any; }; })[]; } | undefined" ], "path": "x-pack/plugins/observability_solution/investigate/public/types.ts", "deprecated": false, @@ -1263,10 +1243,10 @@ }, { "parentPluginId": "investigate", - "id": "def-common.InvestigateWidget.created", + "id": "def-common.InvestigateWidget.createdAt", "type": "number", "tags": [], - "label": "created", + "label": "createdAt", "description": [], "path": "x-pack/plugins/observability_solution/investigate/common/types.ts", "deprecated": false, @@ -1274,10 +1254,10 @@ }, { "parentPluginId": "investigate", - "id": "def-common.InvestigateWidget.last_updated", - "type": "number", + "id": "def-common.InvestigateWidget.createdBy", + "type": "string", "tags": [], - "label": "last_updated", + "label": "createdBy", "description": [], "path": "x-pack/plugins/observability_solution/investigate/common/types.ts", "deprecated": false, @@ -1285,10 +1265,10 @@ }, { "parentPluginId": "investigate", - "id": "def-common.InvestigateWidget.type", + "id": "def-common.InvestigateWidget.title", "type": "string", "tags": [], - "label": "type", + "label": "title", "description": [], "path": "x-pack/plugins/observability_solution/investigate/common/types.ts", "deprecated": false, @@ -1296,20 +1276,11 @@ }, { "parentPluginId": "investigate", - "id": "def-common.InvestigateWidget.user", - "type": "Object", + "id": "def-common.InvestigateWidget.type", + "type": "string", "tags": [], - "label": "user", + "label": "type", "description": [], - "signature": [ - { - "pluginId": "@kbn/core-security-common", - "scope": "common", - "docId": "kibKbnCoreSecurityCommonPluginApi", - "section": "def-common.AuthenticatedUser", - "text": "AuthenticatedUser" - } - ], "path": "x-pack/plugins/observability_solution/investigate/common/types.ts", "deprecated": false, "trackAdoption": false @@ -1342,17 +1313,6 @@ "path": "x-pack/plugins/observability_solution/investigate/common/types.ts", "deprecated": false, "trackAdoption": false - }, - { - "parentPluginId": "investigate", - "id": "def-common.InvestigateWidget.title", - "type": "string", - "tags": [], - "label": "title", - "description": [], - "path": "x-pack/plugins/observability_solution/investigate/common/types.ts", - "deprecated": false, - "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index 76eec0732a204..cda1777957a85 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 94 | 0 | 94 | 5 | +| 92 | 0 | 92 | 5 | ## Client diff --git a/api_docs/investigate_app.devdocs.json b/api_docs/investigate_app.devdocs.json index 63620cf5df62f..cb7fd681facbe 100644 --- a/api_docs/investigate_app.devdocs.json +++ b/api_docs/investigate_app.devdocs.json @@ -50,33 +50,77 @@ "label": "InvestigateAppServerRouteRepository", "description": [], "signature": [ - "{ \"DELETE /api/observability/investigations/{id}/notes/{noteId} 2023-10-31\": { endpoint: \"DELETE /api/observability/investigations/{id}/notes/{noteId} 2023-10-31\"; params?: ", + "{ \"GET /api/observability/investigations/{investigationId}/items 2023-10-31\": { endpoint: \"GET /api/observability/investigations/{investigationId}/items 2023-10-31\"; params?: ", "TypeC", "<{ path: ", "TypeC", - "<{ id: ", + "<{ investigationId: ", + "StringC", + "; }>; }> | undefined; handler: ({}: ", + "InvestigateAppRouteHandlerResources", + " & { params: { path: { investigationId: string; }; }; }) => Promise<({ id: string; createdAt: number; createdBy: string; } & { title: string; type: \"esql\"; params: { esql: string; suggestion: any; }; })[]>; } & ", + "InvestigateAppRouteCreateOptions", + "; \"DELETE /api/observability/investigations/{investigationId}/items/{itemId} 2023-10-31\": { endpoint: \"DELETE /api/observability/investigations/{investigationId}/items/{itemId} 2023-10-31\"; params?: ", + "TypeC", + "<{ path: ", + "TypeC", + "<{ investigationId: ", + "StringC", + "; itemId: ", + "StringC", + "; }>; }> | undefined; handler: ({}: ", + "InvestigateAppRouteHandlerResources", + " & { params: { path: { investigationId: string; itemId: string; }; }; }) => Promise; } & ", + "InvestigateAppRouteCreateOptions", + "; \"POST /api/observability/investigations/{investigationId}/items 2023-10-31\": { endpoint: \"POST /api/observability/investigations/{investigationId}/items 2023-10-31\"; params?: ", + "TypeC", + "<{ path: ", + "TypeC", + "<{ investigationId: ", + "StringC", + "; }>; body: ", + "TypeC", + "<{ title: ", + "StringC", + "; type: ", + "LiteralC", + "<\"esql\">; params: ", + "TypeC", + "<{ esql: ", + "StringC", + "; suggestion: ", + "AnyC", + "; }>; }>; }> | undefined; handler: ({}: ", + "InvestigateAppRouteHandlerResources", + " & { params: { path: { investigationId: string; }; body: { title: string; type: \"esql\"; params: { esql: string; suggestion: any; }; }; }; }) => Promise<{ id: string; createdAt: number; createdBy: string; } & { title: string; type: \"esql\"; params: { esql: string; suggestion: any; }; }>; } & ", + "InvestigateAppRouteCreateOptions", + "; \"DELETE /api/observability/investigations/{investigationId}/notes/{noteId} 2023-10-31\": { endpoint: \"DELETE /api/observability/investigations/{investigationId}/notes/{noteId} 2023-10-31\"; params?: ", + "TypeC", + "<{ path: ", + "TypeC", + "<{ investigationId: ", "StringC", "; noteId: ", "StringC", "; }>; }> | undefined; handler: ({}: ", "InvestigateAppRouteHandlerResources", - " & { params: { path: { id: string; noteId: string; }; }; }) => Promise; } & ", + " & { params: { path: { investigationId: string; noteId: string; }; }; }) => Promise; } & ", "InvestigateAppRouteCreateOptions", - "; \"GET /api/observability/investigations/{id}/notes 2023-10-31\": { endpoint: \"GET /api/observability/investigations/{id}/notes 2023-10-31\"; params?: ", + "; \"GET /api/observability/investigations/{investigationId}/notes 2023-10-31\": { endpoint: \"GET /api/observability/investigations/{investigationId}/notes 2023-10-31\"; params?: ", "TypeC", "<{ path: ", "TypeC", - "<{ id: ", + "<{ investigationId: ", "StringC", "; }>; }> | undefined; handler: ({}: ", "InvestigateAppRouteHandlerResources", - " & { params: { path: { id: string; }; }; }) => Promise<{ id: string; content: string; createdAt: number; createdBy: string; }[]>; } & ", + " & { params: { path: { investigationId: string; }; }; }) => Promise<{ id: string; content: string; createdAt: number; createdBy: string; }[]>; } & ", "InvestigateAppRouteCreateOptions", - "; \"POST /api/observability/investigations/{id}/notes 2023-10-31\": { endpoint: \"POST /api/observability/investigations/{id}/notes 2023-10-31\"; params?: ", + "; \"POST /api/observability/investigations/{investigationId}/notes 2023-10-31\": { endpoint: \"POST /api/observability/investigations/{investigationId}/notes 2023-10-31\"; params?: ", "TypeC", "<{ path: ", "TypeC", - "<{ id: ", + "<{ investigationId: ", "StringC", "; }>; body: ", "TypeC", @@ -84,27 +128,27 @@ "StringC", "; }>; }> | undefined; handler: ({}: ", "InvestigateAppRouteHandlerResources", - " & { params: { path: { id: string; }; body: { content: string; }; }; }) => Promise<{ id: string; content: string; createdAt: number; createdBy: string; }>; } & ", + " & { params: { path: { investigationId: string; }; body: { content: string; }; }; }) => Promise<{ id: string; content: string; createdAt: number; createdBy: string; }>; } & ", "InvestigateAppRouteCreateOptions", - "; \"DELETE /api/observability/investigations/{id} 2023-10-31\": { endpoint: \"DELETE /api/observability/investigations/{id} 2023-10-31\"; params?: ", + "; \"DELETE /api/observability/investigations/{investigationId} 2023-10-31\": { endpoint: \"DELETE /api/observability/investigations/{investigationId} 2023-10-31\"; params?: ", "TypeC", "<{ path: ", "TypeC", - "<{ id: ", + "<{ investigationId: ", "StringC", "; }>; }> | undefined; handler: ({}: ", "InvestigateAppRouteHandlerResources", - " & { params: { path: { id: string; }; }; }) => Promise; } & ", + " & { params: { path: { investigationId: string; }; }; }) => Promise; } & ", "InvestigateAppRouteCreateOptions", - "; \"GET /api/observability/investigations/{id} 2023-10-31\": { endpoint: \"GET /api/observability/investigations/{id} 2023-10-31\"; params?: ", + "; \"GET /api/observability/investigations/{investigationId} 2023-10-31\": { endpoint: \"GET /api/observability/investigations/{investigationId} 2023-10-31\"; params?: ", "TypeC", "<{ path: ", "TypeC", - "<{ id: ", + "<{ investigationId: ", "StringC", "; }>; }> | undefined; handler: ({}: ", "InvestigateAppRouteHandlerResources", - " & { params: { path: { id: string; }; }; }) => Promise<{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; }>; } & ", + " & { params: { path: { investigationId: string; }; }; }) => Promise<{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: \"esql\"; params: { esql: string; suggestion: any; }; })[]; }>; } & ", "InvestigateAppRouteCreateOptions", "; \"GET /api/observability/investigations 2023-10-31\": { endpoint: \"GET /api/observability/investigations 2023-10-31\"; params?: ", "PartialC", @@ -118,7 +162,7 @@ "StringC", "; }>; }> | undefined; handler: ({}: ", "InvestigateAppRouteHandlerResources", - " & { params?: { query?: { alertId?: string | undefined; page?: string | undefined; perPage?: string | undefined; } | undefined; } | undefined; }) => Promise<{ page: number; perPage: number; total: number; results: { id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; }[]; }>; } & ", + " & { params?: { query?: { alertId?: string | undefined; page?: string | undefined; perPage?: string | undefined; } | undefined; } | undefined; }) => Promise<{ page: number; perPage: number; total: number; results: { id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: \"esql\"; params: { esql: string; suggestion: any; }; })[]; }[]; }>; } & ", "InvestigateAppRouteCreateOptions", "; \"POST /api/observability/investigations 2023-10-31\": { endpoint: \"POST /api/observability/investigations 2023-10-31\"; params?: ", "TypeC", @@ -150,7 +194,7 @@ "LiteralC", "<\"blank\">; }>]>; }>; }> | undefined; handler: ({}: ", "InvestigateAppRouteHandlerResources", - " & { params: { body: { id: string; title: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; }; }; }) => Promise<{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; }>; } & ", + " & { params: { body: { id: string; title: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; }; }; }) => Promise<{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: \"esql\"; params: { esql: string; suggestion: any; }; })[]; }>; } & ", "InvestigateAppRouteCreateOptions", "; }" ], diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index ffb2fb1efce3e..ffe76069ab27a 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index e5bab6264e2f1..6744b0c19e6ec 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index e32a3ef4c1b34..792436c383657 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 1afabe4518e3c..b1e831ff3bd6b 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index 752a6de3d16bc..5bd1860350682 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index 86ec4a9afed62..c88a385f76601 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 0e21c7c592d08..c77a9dd8d4a6e 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-08-21 +date: 2024-08-23 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_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index bb3f894f8fbf5..b85adabcc42b6 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.devdocs.json b/api_docs/kbn_alerting_state_types.devdocs.json index 4beda471f14be..2afc1a566a537 100644 --- a/api_docs/kbn_alerting_state_types.devdocs.json +++ b/api_docs/kbn_alerting_state_types.devdocs.json @@ -124,7 +124,7 @@ "label": "LatestAlertInstanceMetaSchema", "description": [], "signature": [ - "{ readonly uuid?: string | undefined; readonly lastScheduledActions?: Readonly<{ actions?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; readonly flappingHistory?: boolean[] | undefined; readonly flapping?: boolean | undefined; readonly maintenanceWindowIds?: string[] | undefined; readonly pendingRecoveredCount?: number | undefined; readonly activeCount?: number | undefined; }" + "{ readonly flapping?: boolean | undefined; readonly uuid?: string | undefined; readonly lastScheduledActions?: Readonly<{ actions?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; readonly flappingHistory?: boolean[] | undefined; readonly maintenanceWindowIds?: string[] | undefined; readonly pendingRecoveredCount?: number | undefined; readonly activeCount?: number | undefined; }" ], "path": "x-pack/packages/kbn-alerting-state-types/src/task_state/index.ts", "deprecated": false, @@ -169,7 +169,7 @@ "label": "LatestRawAlertInstanceSchema", "description": [], "signature": [ - "{ readonly meta?: Readonly<{ uuid?: string | undefined; lastScheduledActions?: Readonly<{ actions?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; flapping?: boolean | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; readonly state?: Record | undefined; }" + "{ readonly meta?: Readonly<{ flapping?: boolean | undefined; uuid?: string | undefined; lastScheduledActions?: Readonly<{ actions?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; readonly state?: Record | undefined; }" ], "path": "x-pack/packages/kbn-alerting-state-types/src/task_state/index.ts", "deprecated": false, @@ -184,7 +184,7 @@ "label": "LatestTaskStateSchema", "description": [], "signature": [ - "{ readonly alertTypeState?: Record | undefined; readonly alertInstances?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; flapping?: boolean | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined; readonly alertRecoveredInstances?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; flapping?: boolean | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined; readonly previousStartedAt?: string | null | undefined; readonly summaryActions?: Record> | undefined; }" + "{ readonly alertTypeState?: Record | undefined; readonly alertInstances?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined; readonly alertRecoveredInstances?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined; readonly previousStartedAt?: string | null | undefined; readonly summaryActions?: Record> | undefined; }" ], "path": "x-pack/packages/kbn-alerting-state-types/src/task_state/index.ts", "deprecated": false, @@ -214,7 +214,7 @@ "label": "MutableLatestAlertInstanceMetaSchema", "description": [], "signature": [ - "{ uuid?: Mutable; lastScheduledActions?: Mutable> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined>; flappingHistory?: Mutable; flapping?: Mutable; maintenanceWindowIds?: Mutable; pendingRecoveredCount?: Mutable; activeCount?: Mutable; }" + "{ flapping?: Mutable; uuid?: Mutable; lastScheduledActions?: Mutable> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined>; flappingHistory?: Mutable; maintenanceWindowIds?: Mutable; pendingRecoveredCount?: Mutable; activeCount?: Mutable; }" ], "path": "x-pack/packages/kbn-alerting-state-types/src/task_state/index.ts", "deprecated": false, @@ -229,7 +229,7 @@ "label": "MutableLatestTaskStateSchema", "description": [], "signature": [ - "{ alertTypeState?: Mutable | undefined>; alertInstances?: Mutable> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; flapping?: boolean | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined>; alertRecoveredInstances?: Mutable> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; flapping?: boolean | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined>; previousStartedAt?: Mutable; summaryActions?: Mutable> | undefined>; }" + "{ alertTypeState?: Mutable | undefined>; alertInstances?: Mutable> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined>; alertRecoveredInstances?: Mutable> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined>; previousStartedAt?: Mutable; summaryActions?: Mutable> | undefined>; }" ], "path": "x-pack/packages/kbn-alerting-state-types/src/task_state/index.ts", "deprecated": false, @@ -404,7 +404,7 @@ "label": "1", "description": [], "signature": [ - "{ up: (state: Record) => Readonly<{ alertTypeState?: Record | undefined; alertInstances?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; flapping?: boolean | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined; alertRecoveredInstances?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; flapping?: boolean | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined; previousStartedAt?: string | null | undefined; summaryActions?: Record> | undefined; } & {}>; schema: ", + "{ up: (state: Record) => Readonly<{ alertTypeState?: Record | undefined; alertInstances?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined; alertRecoveredInstances?: Record> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined; previousStartedAt?: string | null | undefined; summaryActions?: Record> | undefined; } & {}>; schema: ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -428,7 +428,7 @@ "section": "def-common.Type", "text": "Type" }, - "> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; flapping?: boolean | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined>; alertRecoveredInstances: ", + "> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined>; alertRecoveredInstances: ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -436,7 +436,7 @@ "section": "def-common.Type", "text": "Type" }, - "> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; flapping?: boolean | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined>; previousStartedAt: ", + "> | undefined; subgroup?: string | undefined; } & { date: string; group: string; }> | undefined; flappingHistory?: boolean[] | undefined; maintenanceWindowIds?: string[] | undefined; pendingRecoveredCount?: number | undefined; activeCount?: number | undefined; } & {}> | undefined; state?: Record | undefined; } & {}>> | undefined>; previousStartedAt: ", { "pluginId": "@kbn/config-schema", "scope": "common", diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index f4d86a24a9b2b..8769abaf03a2d 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.devdocs.json b/api_docs/kbn_alerting_types.devdocs.json index 51c85cf8a437e..7c10c27a4d38a 100644 --- a/api_docs/kbn_alerting_types.devdocs.json +++ b/api_docs/kbn_alerting_types.devdocs.json @@ -1577,6 +1577,20 @@ "path": "packages/kbn-alerting-types/rule_types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerting-types", + "id": "def-common.Rule.flapping", + "type": "Object", + "tags": [], + "label": "flapping", + "description": [], + "signature": [ + "{ lookBackWindow: number; statusChangeThreshold: number; } | undefined" + ], + "path": "packages/kbn-alerting-types/rule_types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -3206,6 +3220,66 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/alerting-types", + "id": "def-common.MAX_LOOK_BACK_WINDOW", + "type": "number", + "tags": [], + "label": "MAX_LOOK_BACK_WINDOW", + "description": [], + "signature": [ + "20" + ], + "path": "packages/kbn-alerting-types/rule_flapping.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/alerting-types", + "id": "def-common.MAX_STATUS_CHANGE_THRESHOLD", + "type": "number", + "tags": [], + "label": "MAX_STATUS_CHANGE_THRESHOLD", + "description": [], + "signature": [ + "20" + ], + "path": "packages/kbn-alerting-types/rule_flapping.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/alerting-types", + "id": "def-common.MIN_LOOK_BACK_WINDOW", + "type": "number", + "tags": [], + "label": "MIN_LOOK_BACK_WINDOW", + "description": [], + "signature": [ + "2" + ], + "path": "packages/kbn-alerting-types/rule_flapping.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/alerting-types", + "id": "def-common.MIN_STATUS_CHANGE_THRESHOLD", + "type": "number", + "tags": [], + "label": "MIN_STATUS_CHANGE_THRESHOLD", + "description": [], + "signature": [ + "2" + ], + "path": "packages/kbn-alerting-types/rule_flapping.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/alerting-types", "id": "def-common.RecoveredActionGroupId", diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index f3a79aa1eb816..8f88ec67b7798 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.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 | |-------------------|-----------|------------------------|-----------------| -| 217 | 0 | 214 | 0 | +| 222 | 0 | 219 | 0 | ## Common diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 1c8ab33c7b736..dd541ce226ed0 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-08-21 +date: 2024-08-23 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_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index 6efb3ff5712df..c5490d3682942 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.devdocs.json b/api_docs/kbn_alerts_ui_shared.devdocs.json index e9204e1654b32..c4423422e2a72 100644 --- a/api_docs/kbn_alerts_ui_shared.devdocs.json +++ b/api_docs/kbn_alerts_ui_shared.devdocs.json @@ -4129,7 +4129,7 @@ "label": "setRuleProperty", "description": [], "signature": [ - "(key: Prop, value: ", + "(key: Prop, value: ", { "pluginId": "@kbn/alerts-ui-shared", "scope": "public", diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 6c365852ff386..e00c36ade6135 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-08-21 +date: 2024-08-23 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 2971dba0c2aea..55a5c172250b2 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 179cdf884e74e..0a415d63b6f0c 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index d383945e86abc..346033b477f71 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index 14c67eae18f13..1ef36c6910e86 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index be49ea5c8567e..3a2224caae80c 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-08-21 +date: 2024-08-23 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 49e92a7193368..48e2c279076e0 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-08-21 +date: 2024-08-23 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_types.mdx b/api_docs/kbn_apm_types.mdx index e2a5dd2a7768c..891ed29023def 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 96ec9934a2671..d071411e54dac 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index e92298be9e02f..806a62aec16ea 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 42d4423f31e11..862b74b84207f 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx index ef5c43fde67da..68eeea1ed2d90 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error'] --- import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index bc022efb07c54..eb71eca84f945 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index bd585c19a450c..611c10b21dc3f 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index e5ac1ab610a7d..6a4bb36b0e16c 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-08-21 +date: 2024-08-23 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 3bd8edd4076f7..9254639429185 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-08-21 +date: 2024-08-23 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 98b3f41e32634..3248b3ca65504 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-08-21 +date: 2024-08-23 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 a019113255def..d1f22d1f802a2 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-08-21 +date: 2024-08-23 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 702e73d1f7f3e..ae2ab24e99813 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-08-21 +date: 2024-08-23 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 d2a08b074a57e..b3bd5f606b7c9 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-08-21 +date: 2024-08-23 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 c0c916aea79a5..b0e274b7ba05f 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-08-21 +date: 2024-08-23 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 a6a8ada3f8197..7b905dc352438 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-08-21 +date: 2024-08-23 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 5a2bd9378a096..b9ac0505c46a4 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index 96fac709b5963..e7bee5a37cd70 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mock'] --- import kbnCodeEditorMockObj from './kbn_code_editor_mock.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index bab5469571d1d..70d3aae06b51a 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index cb3b9a4f3eb3b..e9c0198dac35d 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-08-21 +date: 2024-08-23 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 f2ec579a65cd5..b56a116bfde1d 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-08-21 +date: 2024-08-23 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 9302a83190120..a0784c14d8142 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.devdocs.json b/api_docs/kbn_config_schema.devdocs.json index 409941bbe1c88..27e04a098acd6 100644 --- a/api_docs/kbn_config_schema.devdocs.json +++ b/api_docs/kbn_config_schema.devdocs.json @@ -4670,7 +4670,113 @@ "section": "def-common.ObjectType", "text": "ObjectType" }, - "

; oneOf: { (types: [", + "

; oneOf: { (types: [", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + "], options?: ", + "UnionTypeOptions", + " | undefined): ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + "; (types: [", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -9076,7 +9182,113 @@ "label": "oneOf", "description": [], "signature": [ - "{ (types: [", + "{ (types: [", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + ", ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + "], options?: ", + "UnionTypeOptions", + " | undefined): ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + "; (types: [", { "pluginId": "@kbn/config-schema", "scope": "common", diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index b54e5ae4754fa..71adcb19d2c74 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-08-21 +date: 2024-08-23 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.devdocs.json b/api_docs/kbn_content_management_content_editor.devdocs.json index 5c5c0f8208433..fc863182b74d3 100644 --- a/api_docs/kbn_content_management_content_editor.devdocs.json +++ b/api_docs/kbn_content_management_content_editor.devdocs.json @@ -170,7 +170,7 @@ "Item", "; isReadonly?: boolean | undefined; readonlyReason?: string | undefined; entityName: string; customValidators?: ", "CustomValidators", - " | undefined; showActivityView?: boolean | undefined; }" + " | undefined; appendRows?: React.ReactNode; }" ], "path": "packages/content-management/content_editor/src/open_content_editor.tsx", "deprecated": false, diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx index af19ec1ca1a51..486a91ed86ff3 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-08-21 +date: 2024-08-23 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_content_insights_public.devdocs.json b/api_docs/kbn_content_management_content_insights_public.devdocs.json new file mode 100644 index 0000000000000..0e6c72081bd1b --- /dev/null +++ b/api_docs/kbn_content_management_content_insights_public.devdocs.json @@ -0,0 +1,619 @@ +{ + "id": "@kbn/content-management-content-insights-public", + "client": { + "classes": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClient", + "type": "Class", + "tags": [], + "label": "ContentInsightsClient", + "description": [ + "\nClient for the Content Management Insights service." + ], + "signature": [ + { + "pluginId": "@kbn/content-management-content-insights-public", + "scope": "public", + "docId": "kibKbnContentManagementContentInsightsPublicPluginApi", + "section": "def-public.ContentInsightsClient", + "text": "ContentInsightsClient" + }, + " implements ", + { + "pluginId": "@kbn/content-management-content-insights-public", + "scope": "public", + "docId": "kibKbnContentManagementContentInsightsPublicPluginApi", + "section": "def-public.ContentInsightsClientPublic", + "text": "ContentInsightsClientPublic" + } + ], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClient.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClient.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "deps", + "description": [], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClient.Unnamed.$1.http", + "type": "Object", + "tags": [], + "label": "http", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-browser", + "scope": "public", + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-public.HttpSetup", + "text": "HttpSetup" + } + ], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClient.Unnamed.$2", + "type": "Object", + "tags": [], + "label": "config", + "description": [], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClient.Unnamed.$2.domainId", + "type": "string", + "tags": [], + "label": "domainId", + "description": [], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClient.track", + "type": "Function", + "tags": [], + "label": "track", + "description": [], + "signature": [ + "(id: string, eventType: \"viewed\") => void" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClient.track.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClient.track.$2", + "type": "string", + "tags": [], + "label": "eventType", + "description": [], + "signature": [ + "\"viewed\"" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClient.getStats", + "type": "Function", + "tags": [], + "label": "getStats", + "description": [], + "signature": [ + "(id: string, eventType: \"viewed\") => Promise<", + { + "pluginId": "@kbn/content-management-content-insights-server", + "scope": "server", + "docId": "kibKbnContentManagementContentInsightsServerPluginApi", + "section": "def-server.ContentInsightsStats", + "text": "ContentInsightsStats" + }, + ">" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClient.getStats.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClient.getStats.$2", + "type": "string", + "tags": [], + "label": "eventType", + "description": [], + "signature": [ + "\"viewed\"" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], + "functions": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ActivityView", + "type": "Function", + "tags": [], + "label": "ActivityView", + "description": [], + "signature": [ + "({ item }: ", + { + "pluginId": "@kbn/content-management-content-insights-public", + "scope": "public", + "docId": "kibKbnContentManagementContentInsightsPublicPluginApi", + "section": "def-public.ActivityViewProps", + "text": "ActivityViewProps" + }, + ") => JSX.Element" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/components/activity_view.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ActivityView.$1", + "type": "Object", + "tags": [], + "label": "{ item }", + "description": [], + "signature": [ + { + "pluginId": "@kbn/content-management-content-insights-public", + "scope": "public", + "docId": "kibKbnContentManagementContentInsightsPublicPluginApi", + "section": "def-public.ActivityViewProps", + "text": "ActivityViewProps" + } + ], + "path": "packages/content-management/content_insights/content_insights_public/src/components/activity_view.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsProvider", + "type": "Function", + "tags": [], + "label": "ContentInsightsProvider", + "description": [ + "\nAbstract external service Provider." + ], + "signature": [ + "({ children, ...services }: React.PropsWithChildren>>) => JSX.Element" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/services.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsProvider.$1", + "type": "CompoundType", + "tags": [], + "label": "{\n children,\n ...services\n}", + "description": [], + "signature": [ + "React.PropsWithChildren>>" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/services.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.useServices", + "type": "Function", + "tags": [], + "label": "useServices", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "@kbn/content-management-content-insights-public", + "scope": "public", + "docId": "kibKbnContentManagementContentInsightsPublicPluginApi", + "section": "def-public.ContentInsightsServices", + "text": "ContentInsightsServices" + }, + " | null" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/services.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ViewsStats", + "type": "Function", + "tags": [], + "label": "ViewsStats", + "description": [], + "signature": [ + "({ item }: { item: ", + { + "pluginId": "@kbn/content-management-table-list-view-common", + "scope": "common", + "docId": "kibKbnContentManagementTableListViewCommonPluginApi", + "section": "def-common.UserContentCommonSchema", + "text": "UserContentCommonSchema" + }, + "; }) => JSX.Element" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/components/views_stats/views_stats.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ViewsStats.$1", + "type": "Object", + "tags": [], + "label": "{ item }", + "description": [], + "path": "packages/content-management/content_insights/content_insights_public/src/components/views_stats/views_stats.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ViewsStats.$1.item", + "type": "Object", + "tags": [], + "label": "item", + "description": [], + "signature": [ + { + "pluginId": "@kbn/content-management-table-list-view-common", + "scope": "common", + "docId": "kibKbnContentManagementTableListViewCommonPluginApi", + "section": "def-common.UserContentCommonSchema", + "text": "UserContentCommonSchema" + } + ], + "path": "packages/content-management/content_insights/content_insights_public/src/components/views_stats/views_stats.tsx", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ActivityViewProps", + "type": "Interface", + "tags": [], + "label": "ActivityViewProps", + "description": [], + "path": "packages/content-management/content_insights/content_insights_public/src/components/activity_view.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ActivityViewProps.item", + "type": "Object", + "tags": [], + "label": "item", + "description": [], + "signature": [ + "{ createdBy?: string | undefined; updatedBy?: string | undefined; createdAt?: string | undefined; updatedAt?: string | undefined; managed?: boolean | undefined; }" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/components/activity_view.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClientPublic", + "type": "Interface", + "tags": [], + "label": "ContentInsightsClientPublic", + "description": [ + "\nPublic interface of the Content Management Insights service." + ], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClientPublic.track", + "type": "Function", + "tags": [], + "label": "track", + "description": [], + "signature": [ + "(id: string, eventType: \"viewed\") => void" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClientPublic.track.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClientPublic.track.$2", + "type": "string", + "tags": [], + "label": "eventType", + "description": [], + "signature": [ + "\"viewed\"" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClientPublic.getStats", + "type": "Function", + "tags": [], + "label": "getStats", + "description": [], + "signature": [ + "(id: string, eventType: \"viewed\") => Promise<", + { + "pluginId": "@kbn/content-management-content-insights-server", + "scope": "server", + "docId": "kibKbnContentManagementContentInsightsServerPluginApi", + "section": "def-server.ContentInsightsStats", + "text": "ContentInsightsStats" + }, + ">" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClientPublic.getStats.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsClientPublic.getStats.$2", + "type": "string", + "tags": [], + "label": "eventType", + "description": [], + "signature": [ + "\"viewed\"" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsServices", + "type": "Interface", + "tags": [], + "label": "ContentInsightsServices", + "description": [ + "\nAbstract external services for this component." + ], + "path": "packages/content-management/content_insights/content_insights_public/src/services.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsServices.contentInsightsClient", + "type": "Object", + "tags": [], + "label": "contentInsightsClient", + "description": [], + "signature": [ + { + "pluginId": "@kbn/content-management-content-insights-public", + "scope": "public", + "docId": "kibKbnContentManagementContentInsightsPublicPluginApi", + "section": "def-public.ContentInsightsClientPublic", + "text": "ContentInsightsClientPublic" + } + ], + "path": "packages/content-management/content_insights/content_insights_public/src/services.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsEventTypes", + "type": "Type", + "tags": [], + "label": "ContentInsightsEventTypes", + "description": [], + "signature": [ + "\"viewed\"" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/client.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_content_management_content_insights_public.mdx b/api_docs/kbn_content_management_content_insights_public.mdx new file mode 100644 index 0000000000000..bc33d284ef380 --- /dev/null +++ b/api_docs/kbn_content_management_content_insights_public.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: kibKbnContentManagementContentInsightsPublicPluginApi +slug: /kibana-dev-docs/api/kbn-content-management-content-insights-public +title: "@kbn/content-management-content-insights-public" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/content-management-content-insights-public plugin +date: 2024-08-23 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-public'] +--- +import kbnContentManagementContentInsightsPublicObj from './kbn_content_management_content_insights_public.devdocs.json'; + + + +Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 32 | 0 | 28 | 0 | + +## Client + +### Functions + + +### Classes + + +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/kbn_content_management_content_insights_server.devdocs.json b/api_docs/kbn_content_management_content_insights_server.devdocs.json new file mode 100644 index 0000000000000..1e282575547c7 --- /dev/null +++ b/api_docs/kbn_content_management_content_insights_server.devdocs.json @@ -0,0 +1,171 @@ +{ + "id": "@kbn/content-management-content-insights-server", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/content-management-content-insights-server", + "id": "def-server.registerContentInsights", + "type": "Function", + "tags": [], + "label": "registerContentInsights", + "description": [], + "signature": [ + "({ usageCollection, http, getStartServices }: ", + "ContentInsightsDependencies", + ", config: ", + "ContentInsightsConfig", + ") => void" + ], + "path": "packages/content-management/content_insights/content_insights_server/src/register.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-server", + "id": "def-server.registerContentInsights.$1", + "type": "Object", + "tags": [], + "label": "{ usageCollection, http, getStartServices }", + "description": [], + "signature": [ + "ContentInsightsDependencies" + ], + "path": "packages/content-management/content_insights/content_insights_server/src/register.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/content-management-content-insights-server", + "id": "def-server.registerContentInsights.$2", + "type": "Object", + "tags": [], + "label": "config", + "description": [], + "signature": [ + "ContentInsightsConfig" + ], + "path": "packages/content-management/content_insights/content_insights_server/src/register.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/content-management-content-insights-server", + "id": "def-server.ContentInsightsStats", + "type": "Interface", + "tags": [], + "label": "ContentInsightsStats", + "description": [], + "path": "packages/content-management/content_insights/content_insights_server/src/register.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-server", + "id": "def-server.ContentInsightsStats.from", + "type": "string", + "tags": [], + "label": "from", + "description": [ + "\nThe date from which the data is counted" + ], + "path": "packages/content-management/content_insights/content_insights_server/src/register.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-content-insights-server", + "id": "def-server.ContentInsightsStats.count", + "type": "number", + "tags": [], + "label": "count", + "description": [ + "\nTotal count of events" + ], + "path": "packages/content-management/content_insights/content_insights_server/src/register.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-content-insights-server", + "id": "def-server.ContentInsightsStats.daily", + "type": "Array", + "tags": [], + "label": "daily", + "description": [ + "\nDaily counts of events" + ], + "signature": [ + "{ date: string; count: number; }[]" + ], + "path": "packages/content-management/content_insights/content_insights_server/src/register.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/content-management-content-insights-server", + "id": "def-server.ContentInsightsStatsResponse", + "type": "Interface", + "tags": [], + "label": "ContentInsightsStatsResponse", + "description": [], + "path": "packages/content-management/content_insights/content_insights_server/src/register.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-content-insights-server", + "id": "def-server.ContentInsightsStatsResponse.result", + "type": "Object", + "tags": [], + "label": "result", + "description": [], + "signature": [ + { + "pluginId": "@kbn/content-management-content-insights-server", + "scope": "server", + "docId": "kibKbnContentManagementContentInsightsServerPluginApi", + "section": "def-server.ContentInsightsStats", + "text": "ContentInsightsStats" + } + ], + "path": "packages/content-management/content_insights/content_insights_server/src/register.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_content_management_content_insights_server.mdx b/api_docs/kbn_content_management_content_insights_server.mdx new file mode 100644 index 0000000000000..fa657b1366c81 --- /dev/null +++ b/api_docs/kbn_content_management_content_insights_server.mdx @@ -0,0 +1,33 @@ +--- +#### +#### 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: kibKbnContentManagementContentInsightsServerPluginApi +slug: /kibana-dev-docs/api/kbn-content-management-content-insights-server +title: "@kbn/content-management-content-insights-server" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/content-management-content-insights-server plugin +date: 2024-08-23 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-server'] +--- +import kbnContentManagementContentInsightsServerObj from './kbn_content_management_content_insights_server.devdocs.json'; + + + +Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 9 | 0 | 6 | 2 | + +## Server + +### Functions + + +### Interfaces + + diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx index 2e7ad8d1dfe3a..f65f7519579f5 100644 --- a/api_docs/kbn_content_management_favorites_public.mdx +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-public title: "@kbn/content-management-favorites-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-public plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] --- import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx index 471b342b2b99f..2f5f9d6d023f1 100644 --- a/api_docs/kbn_content_management_favorites_server.mdx +++ b/api_docs/kbn_content_management_favorites_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-server title: "@kbn/content-management-favorites-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-server plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] --- import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.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 1247e8c3ea13c..58934929e5eb9 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-08-21 +date: 2024-08-23 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 f333cd2156137..01d3524cc3520 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index d2480fe28b4f8..be693874ec840 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.devdocs.json b/api_docs/kbn_content_management_table_list_view_table.devdocs.json index 4159e15e02447..958e9a551308d 100644 --- a/api_docs/kbn_content_management_table_list_view_table.devdocs.json +++ b/api_docs/kbn_content_management_table_list_view_table.devdocs.json @@ -348,6 +348,29 @@ "path": "packages/content-management/table_list_view_table/src/services.tsx", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-table-list-view-table", + "id": "def-public.TableListViewKibanaDependencies.contentInsightsClient", + "type": "Object", + "tags": [], + "label": "contentInsightsClient", + "description": [ + "\nContent insights client to enable content insights features." + ], + "signature": [ + { + "pluginId": "@kbn/content-management-content-insights-public", + "scope": "public", + "docId": "kibKbnContentManagementContentInsightsPublicPluginApi", + "section": "def-public.ContentInsightsClientPublic", + "text": "ContentInsightsClientPublic" + }, + " | undefined" + ], + "path": "packages/content-management/table_list_view_table/src/services.tsx", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false 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 b66c5be3163db..b93fee650cdf2 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 50 | 0 | 33 | 3 | +| 51 | 0 | 33 | 3 | ## Client diff --git a/api_docs/kbn_content_management_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index 043ccdd7890f3..61b4eb0238ab3 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 4086a6926f399..7c128f0a22f4b 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-08-21 +date: 2024-08-23 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.devdocs.json b/api_docs/kbn_core_analytics_browser.devdocs.json index af571a9169c8a..6071d4931ceb7 100644 --- a/api_docs/kbn_core_analytics_browser.devdocs.json +++ b/api_docs/kbn_core_analytics_browser.devdocs.json @@ -708,7 +708,7 @@ }, { "plugin": "elasticAssistant", - "path": "x-pack/plugins/elastic_assistant/server/routes/attack_discovery/helpers.ts" + "path": "x-pack/plugins/elastic_assistant/server/routes/helpers.ts" }, { "plugin": "elasticAssistant", @@ -724,7 +724,7 @@ }, { "plugin": "elasticAssistant", - "path": "x-pack/plugins/elastic_assistant/server/routes/helpers.ts" + "path": "x-pack/plugins/elastic_assistant/server/routes/attack_discovery/helpers.ts" }, { "plugin": "elasticAssistant", diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index c10f6557a225c..a85a326d620f2 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 9fc92dc252811..bcb90761435b8 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 a1abf83a69389..e4c73d4685393 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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.devdocs.json b/api_docs/kbn_core_analytics_server.devdocs.json index d293c2c8fca86..ade36dd60bde5 100644 --- a/api_docs/kbn_core_analytics_server.devdocs.json +++ b/api_docs/kbn_core_analytics_server.devdocs.json @@ -716,7 +716,7 @@ }, { "plugin": "elasticAssistant", - "path": "x-pack/plugins/elastic_assistant/server/routes/attack_discovery/helpers.ts" + "path": "x-pack/plugins/elastic_assistant/server/routes/helpers.ts" }, { "plugin": "elasticAssistant", @@ -732,7 +732,7 @@ }, { "plugin": "elasticAssistant", - "path": "x-pack/plugins/elastic_assistant/server/routes/helpers.ts" + "path": "x-pack/plugins/elastic_assistant/server/routes/attack_discovery/helpers.ts" }, { "plugin": "elasticAssistant", diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index a580c1ec750e1..5d50f83db03dd 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-08-21 +date: 2024-08-23 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 69c05c884994d..6ef07a6820b7f 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 0593b93880e29..4632692406529 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 f9a3d4258babe..4169518fbe421 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 ece1abd1ed21f..1cf53616f4a23 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 fb10cd8b56fd8..77b74724f6f7c 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 a1635a00c9a18..243f5e83f075d 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-08-21 +date: 2024-08-23 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 b02073aceaf4c..85af400c4f789 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 a28b48cd4bec1..5af8b0b0d4c74 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 ede61fad0a30e..b7cf291d9c97b 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 f573502583150..2802723d5073c 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 ab216dca9129f..6f03be18e8071 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-08-21 +date: 2024-08-23 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 efd3a5d7d8034..80fbe8a6befdf 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 2849b48c1ceb8..62e67eda0e7bc 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 43bb016b7be68..d318e5f4c31f3 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 ddb68ea4f947c..08eedd861d507 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-08-21 +date: 2024-08-23 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 f24dd2111a76b..cd5cd358cb1e5 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-08-21 +date: 2024-08-23 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 aa4b83b67e2c9..608f9f5e0a3eb 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 510fe2d78b0a3..843179a0a02b6 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 0a955e840c3a1..baa2b177c7ba5 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 109ede6d7e2b2..48b4b150af322 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 7b803ee5e49bc..4f15529727a88 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 5ca67838913b7..21a4fea4c28ff 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 f9b1760eab98e..ff65faf65be34 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 0b2b76d9ebf10..dfce3927c1306 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-08-21 +date: 2024-08-23 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 0d71b8ae1f35d..b43c7f537f0bd 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-08-21 +date: 2024-08-23 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 e677746f96640..32b9e142bbdea 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 0f4cac7a30c79..c2a059a0039d9 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 5d6df9b7f3ed1..227bbf05e91f5 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 7e57c110bf6ad..e960772427182 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 a770baf99571f..2054723bde542 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 1500a4f4096f8..778e8cd2423f2 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-08-21 +date: 2024-08-23 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 b50dba0a2a12d..a73943266e5c3 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-08-21 +date: 2024-08-23 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 3d91893e30b84..baee76ff3b60a 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 c04d8afd9d017..2606ddb6fd597 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 71f85043698e0..b845408b4187a 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 78a38fe06245a..a7811dcb4b1da 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 0269e6c59da98..e9a74efb78159 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-08-21 +date: 2024-08-23 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 1b2fb0c13a75f..2b5fc57c60a7f 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 1283e77e18649..f4c9c593e8a0e 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 b37eb0af4ffda..8ef2faba93c11 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 46e2dd73904ad..750f7d06a7ef6 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-08-21 +date: 2024-08-23 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 9ee716f15ee64..3261dfca50c8b 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 688149e027b93..fbebceaf61835 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 5ea460b2c8d09..2c67129743c6b 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 4fc87d6717e44..93d098ce1f41e 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 5783b53ca7648..0cdd0f1a68e6d 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 3dc5bc0fdccd1..5b3ee30e20470 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 3bdfbace4201c..cef41990d100b 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 ccb37e5cc016f..f7b73b851e444 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-08-21 +date: 2024-08-23 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 6a3fcf8118129..72e8197b06d6c 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-08-21 +date: 2024-08-23 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 34c2bc605fb0e..5cba1c7a96532 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 ab0f8d36720d2..84057ab3ceb64 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 b9c5aef757b87..daafb2710e45f 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 a5fdc1aebfa10..fc35327b3c195 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 257fce6e9b373..0d7f2bbc45720 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 7407a82f9fb98..d7024740c16b8 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 9cf438309b55b..a4cc5ceceaed5 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 2d4b869666d2f..1cddeb8aaa8d8 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-08-21 +date: 2024-08-23 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 69cdef739ef20..2ae604ba07500 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 30ff131d9648b..09decfc911666 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-08-21 +date: 2024-08-23 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 957c3596a8281..c79bc8889324f 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-08-21 +date: 2024-08-23 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 451bfa71408b6..4eed50c15f778 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 2b6125daaa06b..a9e4725622fdd 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 2415a8d496b47..5de2e5ee6b58d 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 c2b35e0efeb32..a466979435bf2 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 9c2200c03969b..24a139f849c86 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -3834,6 +3834,10 @@ "plugin": "ruleRegistry", "path": "x-pack/plugins/rule_registry/server/routes/get_aad_fields_by_rule_type.ts" }, + { + "plugin": "@kbn/content-management-content-insights-server", + "path": "packages/content-management/content_insights/content_insights_server/src/register.ts" + }, { "plugin": "banners", "path": "x-pack/plugins/banners/server/routes/info.ts" @@ -6548,6 +6552,10 @@ "plugin": "ruleRegistry", "path": "x-pack/plugins/rule_registry/server/routes/get_alert_summary.ts" }, + { + "plugin": "@kbn/content-management-content-insights-server", + "path": "packages/content-management/content_insights/content_insights_server/src/register.ts" + }, { "plugin": "savedObjectsTagging", "path": "x-pack/plugins/saved_objects_tagging/server/routes/tags/create_tag.ts" @@ -14390,6 +14398,10 @@ "plugin": "cloudSecurityPosture", "path": "x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/get_states/get_states.ts" }, + { + "plugin": "dataVisualizer", + "path": "x-pack/plugins/data_visualizer/server/routes.ts" + }, { "plugin": "ecsDataQualityDashboard", "path": "x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_mappings.ts" @@ -16132,6 +16144,10 @@ "plugin": "fileUpload", "path": "x-pack/plugins/file_upload/server/routes.ts" }, + { + "plugin": "fileUpload", + "path": "x-pack/plugins/file_upload/server/routes.ts" + }, { "plugin": "integrationAssistant", "path": "x-pack/plugins/integration_assistant/server/routes/ecs_routes.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 6e6e49419b58b..af814be806669 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-08-21 +date: 2024-08-23 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 2df8e994b4d03..6c0a2f955e9f5 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 760a3783580b2..8ec6589231fa3 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 ebc31c1fcdbc3..08067657eb46c 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 16e905f0b43e2..8260e37475989 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 a10e3b3da2848..a6ba0278d0c04 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-08-21 +date: 2024-08-23 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 26d36e4db1358..023b5d6d7c642 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 93e1931fb41f4..78f043bb16b29 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 f608e39e67fd4..9efe453493f34 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 c7fea510de911..0c30905992b4e 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 90c8572fc94d0..23c88616c8d1a 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 56fc5e0cf39b2..64c04a666337f 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 9d0fe1a021efe..7f30aabce4961 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 56ae22035fddd..2e798ec23c9fa 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-08-21 +date: 2024-08-23 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 3ea6d16af1874..f40494a8df0a0 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 6073cfc52deb5..1800751ab0604 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 bdbd19d600505..c7979d2ebdaf0 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 5268af161ed7f..3b6e6ba5ccf7f 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-08-21 +date: 2024-08-23 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 2d01720026c20..5ea0ce12d8ca9 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 609f51f5d603d..aac7724306579 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 1acfc8f6ddf86..3a74d9508ee2f 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 8dc4954247d03..d3ff8a1d9ecf5 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 58ec87f80953f..cc61ed67092d1 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-08-21 +date: 2024-08-23 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 ed6abbd5a57f1..10a074cfd839a 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 647da618387b0..e9312e79a5819 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 f4597c33ec131..ba2b23d37dd4f 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 d7da6b6b79725..0487da6f83ec1 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-08-21 +date: 2024-08-23 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 ccbc665ee21a0..96a28d59addfa 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 0fe23856fe6b3..c2e4c94c627bb 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 f1b97363fa0ab..a45632326c67c 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 af9006f019dd0..f61c90c6d78c0 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 1ffb42b1fc392..59d91f269920a 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 89850432c48b6..a9ad1a40dd284 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 2155afdbd9248..dc25857838570 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 42bf230ffe7c7..3989a8d788940 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 0adbc3a6dfb91..d4bb37bc95777 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 ab8840527db45..535ec70e27701 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index f0c0378a06cda..d280695b7c881 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index bd531552b6280..0ebfe832c6b9c 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index ec139261be883..7661e8dcbba38 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-08-21 +date: 2024-08-23 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 4b8067655dcae..28b9dea5c8f57 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 70a2e65ea813f..12c2d779be81f 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-08-21 +date: 2024-08-23 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 c8f24cc57ce1e..277ac7cb4d240 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 c3933378bdb0f..e5481e769ade3 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 7beb81c1ae753..8f917154f9906 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 62b92892dc1d1..686ff6c810fde 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 360e0aa3b9973..9f6fef394e33f 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 41eac4ffe5aa8..ce5e347a74b42 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 2fe72032446f8..18678e453cd8b 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-08-21 +date: 2024-08-23 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 37f96e4f53e26..8f64d1f809d54 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 35b1fc1b03b25..afcf5a721ad2c 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 dc8f99e7742a2..f4a7a24da44da 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 a67cbbf3e9139..5526f6dc09f8d 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 ea9bb2c6d5dd1..635996900fcb4 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 2db5e294fdf04..602b45a783868 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 02d682e139ea0..75cdbb84b3f86 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-08-21 +date: 2024-08-23 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 554a5257ea43c..87f89cda62500 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 bd112d15973b8..d89f4315420b3 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 31da6789f042c..2cf85cf87db8b 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 cccf6627dd5cc..5e9b9dd22bfab 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 261fbd85a6355..b275f63c19fc3 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-08-21 +date: 2024-08-23 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 f37df4800b1e6..7011e8f93da49 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 673a718a4e5d3..94e13b848f961 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 2653cb376a473..d69fb9e24dc64 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index c1d2a3bddaf54..2f5a48a0d9c6a 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index 2bd9b2f8671e3..6932d277fdc5e 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index 04c0b9429a650..daab7a521b089 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index 4de65453223bb..9163792f48eee 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index 64fe4ca4fb7ed..3d0a351a57d1e 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 52a1eee70c82e..c2372e78a04d8 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index dd55c6e81f88c..0e892ae75adb0 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index ec206a924ecca..fabaa41dfcdc5 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-08-21 +date: 2024-08-23 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 3286a2304db1b..b2ee26ba3ffeb 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 04d146140a989..f5ba5f2397c44 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-08-21 +date: 2024-08-23 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 11d51c88bff27..bb1c4f927094b 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 f7e5350254e76..ef26b5aed6d25 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 7709c0fbe4d8e..d8c50098a207f 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-08-21 +date: 2024-08-23 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 838e675b668eb..8c2467eb84fdf 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 ebadf4fdca402..37a9c857d5700 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-08-21 +date: 2024-08-23 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 b03775f76dba2..6434f28fde9bc 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-08-21 +date: 2024-08-23 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 a021487d94904..c64d47b8b3799 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-08-21 +date: 2024-08-23 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 f17a43d5a7ab8..3f2f9501ad9f9 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 221f2768306e1..e4aa01468322f 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 c9ddb3f84bea4..b824f9efa1961 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 310a2bb1a89c2..316a97694cb44 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 501dea84258a5..1066cf86c83a8 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 a5d5c0826d31a..8e72b1729dc7e 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 1e7e3d928e901..ad04cbe2f805a 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-08-21 +date: 2024-08-23 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 58594cb58a823..90b1599d9d4fc 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-08-21 +date: 2024-08-23 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 06153af7c3101..31989f22b0b1d 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 717a7a6d9418b..bf89467217c94 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 9adf15e21ebaf..d512af802cade 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-08-21 +date: 2024-08-23 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 e205582498c79..19b9f671973c7 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 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 2d58cc6be145c..cd91a900cd37f 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index 86f352530c93c..ed84451aff5fc 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index d7eac52efd2a3..b968c5d0bf40a 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index 0ec00f90041ae..513be1761cf64 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index 472b9520a4341..b507285bf5f9f 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index d63ab4a9ba8e8..3a7cd70790943 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index ddc52da26ebc1..e0dcae83fec4c 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index c932ff314e1d9..728cb27c75b05 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_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 f72a52d8492ee..9192d3200ea1a 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-08-21 +date: 2024-08-23 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_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 2d9f39a3b6f0a..415bcbc8f8b0a 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 24859c3d813d7..8154ab0494b1f 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-08-21 +date: 2024-08-23 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 1da2628b633dc..31b5bb854249e 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index 1076288eaed92..d0a12610662bb 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index c8851a51ce1fe..9ac2b3ee90ed3 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-08-21 +date: 2024-08-23 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 6d7203351310d..3bc7a3220c333 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_forge.mdx b/api_docs/kbn_data_forge.mdx index b98d50bfa7af6..7d7a3aff3fe64 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 076a41f86675f..05041e32db468 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx index a70f195b5ed5c..4564eff686343 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] --- import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx index fd8b4c3735475..aef624f090f52 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] --- import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 98ff32b8699f7..59a84a971b9c3 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-08-21 +date: 2024-08-23 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 addca047dde2a..acd794158bbba 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-08-21 +date: 2024-08-23 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 908b59b66064d..eb0390f38c5ff 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index b73af948697c1..573f89b0de84e 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 2855695ad3afc..f30f5e3a87f02 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-08-21 +date: 2024-08-23 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 802414481f541..474b039cba36e 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-08-21 +date: 2024-08-23 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 3bf55177a46f0..7f6c5abe89b90 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-08-21 +date: 2024-08-23 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 05fc4bbe0e1d2..4bbd5c1eef041 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index 3e3724dbc920a..397d173ebd681 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index 48b6f16356747..8363ef57460b7 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index bed5e1ade23cd..191be50247cf7 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-08-21 +date: 2024-08-23 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 6e1da6adb5dfc..98df028221d09 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-08-21 +date: 2024-08-23 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 d3ed156425da6..0199c2cbba3bd 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-08-21 +date: 2024-08-23 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 1a46c4e5f99ca..d845ed0c37058 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-08-21 +date: 2024-08-23 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 90f4c07073fba..936321080692f 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-08-21 +date: 2024-08-23 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.devdocs.json b/api_docs/kbn_dev_cli_runner.devdocs.json index 2869fb3262724..0849bb298f7e4 100644 --- a/api_docs/kbn_dev_cli_runner.devdocs.json +++ b/api_docs/kbn_dev_cli_runner.devdocs.json @@ -1541,7 +1541,7 @@ "label": "log", "description": [], "signature": [ - "{ defaultLevel?: \"error\" | \"info\" | \"warning\" | \"success\" | \"debug\" | \"silent\" | \"verbose\" | undefined; } | undefined" + "{ defaultLevel?: \"error\" | \"info\" | \"warning\" | \"success\" | \"debug\" | \"silent\" | \"verbose\" | undefined; context?: string | undefined; } | undefined" ], "path": "packages/kbn-dev-cli-runner/src/run.ts", "deprecated": false, @@ -1600,7 +1600,7 @@ "label": "log", "description": [], "signature": [ - "{ defaultLevel?: \"error\" | \"info\" | \"warning\" | \"success\" | \"debug\" | \"silent\" | \"verbose\" | undefined; } | undefined" + "{ defaultLevel?: \"error\" | \"info\" | \"warning\" | \"success\" | \"debug\" | \"silent\" | \"verbose\" | undefined; context?: string | undefined; } | undefined" ], "path": "packages/kbn-dev-cli-runner/src/run_with_commands.ts", "deprecated": false, diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index cac8e6766a3d9..0f8f3c5f9cf6f 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-08-21 +date: 2024-08-23 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 8d05c5ae1e4e1..a375b17d0328d 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-08-21 +date: 2024-08-23 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 77f9e27f40967..966a5019ed0ce 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 50db92c0cc135..96218e82538a3 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 ac7a821126db1..57fb42abf3e64 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-08-21 +date: 2024-08-23 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 43c5d9e6ab030..c5fdf9a3b9809 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 8b9f4fd479e1d..1723354ec2622 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-08-21 +date: 2024-08-23 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 e594740a6e186..c4ce9202fdfbf 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.devdocs.json b/api_docs/kbn_ecs_data_quality_dashboard.devdocs.json index 48c4823f73460..2fe8bd96f7996 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.devdocs.json +++ b/api_docs/kbn_ecs_data_quality_dashboard.devdocs.json @@ -109,6 +109,18 @@ "interfaces": [], "enums": [], "misc": [ + { + "parentPluginId": "@kbn/ecs-data-quality-dashboard", + "id": "def-public.DATA_QUALITY_DASHBOARD_CONVERSATION_ID", + "type": "string", + "tags": [], + "label": "DATA_QUALITY_DASHBOARD_CONVERSATION_ID", + "description": [], + "path": "x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/translations.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/ecs-data-quality-dashboard", "id": "def-public.DATA_QUALITY_PROMPT_CONTEXT_PILL_TOOLTIP", diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 719762f2b1591..44bb1f804aa62 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-threat-hunting-explore](https://github.com/orgs/elast | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 13 | 0 | 5 | 0 | +| 14 | 0 | 6 | 0 | ## Client diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index 34b867c909236..c69498a185477 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 1d34bcaff5e19..f306772062ca1 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index 00c162b8c5dec..5e17b61aff2ec 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 8692a9b9ccd0d..03fc53242ba56 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 1cb83e7aac983..25f7cd0120032 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-08-21 +date: 2024-08-23 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 401a09c64b91c..a1d5946db89b3 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-08-21 +date: 2024-08-23 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 41dda8670d8a7..60a70b18cf7e7 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-08-21 +date: 2024-08-23 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 399ec39f551eb..c790625b269da 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-08-21 +date: 2024-08-23 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 158a9bd8843ba..2bd4e0406c25d 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-08-21 +date: 2024-08-23 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 c97d72e946329..48f91348df10d 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.devdocs.json b/api_docs/kbn_esql_ast.devdocs.json index c8d740dccd8cf..45b4f757885a6 100644 --- a/api_docs/kbn_esql_ast.devdocs.json +++ b/api_docs/kbn_esql_ast.devdocs.json @@ -2216,6 +2216,38 @@ "path": "packages/kbn-esql-ast/src/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.ESQLSource.cluster", + "type": "string", + "tags": [], + "label": "cluster", + "description": [ + "\nRepresents the cluster part of the source identifier. Empty string if not\npresent.\n\n```\nFROM [:]\n```" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-esql-ast/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.ESQLSource.index", + "type": "string", + "tags": [], + "label": "index", + "description": [ + "\nRepresents the index part of the source identifier. Unescaped and unquoted.\n\n```\nFROM [:]\n```" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-esql-ast/src/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index 5b65b03f6e8ef..b7c0236008256 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 150 | 1 | 120 | 15 | +| 152 | 1 | 120 | 15 | ## Common diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 0574669c553d8..d03a1e2569b14 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 6a62fe7427b40..4fc32e0dbb833 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 8548d8dfde715..cfcfcbac790ff 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-08-21 +date: 2024-08-23 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 6e5972ee6e019..201d15302e23d 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-08-21 +date: 2024-08-23 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 1cfbf186d050b..fabd4c9797dcf 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-08-21 +date: 2024-08-23 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 8597b4fdcd22a..3df5abc983e9d 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index 42ea880067687..d4767ba61d4d6 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 6ba0b05a94252..936fae00f3de0 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_formatters.mdx b/api_docs/kbn_formatters.mdx index eeb39e7b6571c..15132a91756c9 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index f01ffea23aab6..ea4d99a5c7849 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index 7f87f159325c4..3aed8639e099d 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index c0899f0554b04..733b3bf34b506 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-08-21 +date: 2024-08-23 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 8890c88c9e181..d60ff9aa7b151 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-08-21 +date: 2024-08-23 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 9a13efd49a3f9..7efaa6410796d 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grid_layout.mdx b/api_docs/kbn_grid_layout.mdx index 4bf30e6ed663f..b1f65ab2c74ca 100644 --- a/api_docs/kbn_grid_layout.mdx +++ b/api_docs/kbn_grid_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grid-layout title: "@kbn/grid-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grid-layout plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grid-layout'] --- import kbnGridLayoutObj from './kbn_grid_layout.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index 430215224e596..d02cdaa544a2e 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index df4e1ed1230bf..5d76eb0daf705 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-08-21 +date: 2024-08-23 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 360e55a41ffa8..944c854b00c0b 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-08-21 +date: 2024-08-23 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 6d314b6d87265..85a31b027cc3e 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 1f2e93c14ae04..bab30589a155f 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-08-21 +date: 2024-08-23 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 22ab8b4eb6f09..c69f9a4f02e9b 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-08-21 +date: 2024-08-23 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 e9a726c0f7b8c..793e37d5b1158 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-08-21 +date: 2024-08-23 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 f9cb6a0df09e8..06538f7593b5b 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-08-21 +date: 2024-08-23 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 27bd1d5caf478..042c8ef149ca7 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-08-21 +date: 2024-08-23 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 3151b16d71a82..a77ce451bf833 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management.mdx b/api_docs/kbn_index_management.mdx index 405d20b564953..3bb1857a55002 100644 --- a/api_docs/kbn_index_management.mdx +++ b/api_docs/kbn_index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management title: "@kbn/index-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management'] --- import kbnIndexManagementObj from './kbn_index_management.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index 69784226f2a89..6d97010b6deab 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 3b999f5643692..83c7603a8eee6 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-08-21 +date: 2024-08-23 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 247d8eec6eed5..482f78480bb86 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_investigation_shared.devdocs.json b/api_docs/kbn_investigation_shared.devdocs.json index 53f0e786dfdcc..cf946715b36b0 100644 --- a/api_docs/kbn_investigation_shared.devdocs.json +++ b/api_docs/kbn_investigation_shared.devdocs.json @@ -24,30 +24,30 @@ "misc": [ { "parentPluginId": "@kbn/investigation-shared", - "id": "def-common.CreateInvestigationInput", + "id": "def-common.CreateInvestigationItemParams", "type": "Type", "tags": [], - "label": "CreateInvestigationInput", + "label": "CreateInvestigationItemParams", "description": [], "signature": [ - "{ id: string; title: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; }" + "{ title: string; type: \"esql\"; params: { esql: string; suggestion: any; }; }" ], - "path": "packages/kbn-investigation-shared/src/schema/create.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/create_item.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/investigation-shared", - "id": "def-common.CreateInvestigationNoteInput", + "id": "def-common.CreateInvestigationItemResponse", "type": "Type", "tags": [], - "label": "CreateInvestigationNoteInput", + "label": "CreateInvestigationItemResponse", "description": [], "signature": [ - "{ content: string; }" + "{ id: string; createdAt: number; createdBy: string; } & { title: string; type: \"esql\"; params: { esql: string; suggestion: any; }; }" ], - "path": "packages/kbn-investigation-shared/src/schema/create_notes.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/create_item.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -62,7 +62,7 @@ "signature": [ "{ content: string; }" ], - "path": "packages/kbn-investigation-shared/src/schema/create_notes.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/create_note.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -77,7 +77,7 @@ "signature": [ "{ id: string; content: string; createdAt: number; createdBy: string; }" ], - "path": "packages/kbn-investigation-shared/src/schema/create_notes.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/create_note.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -92,7 +92,7 @@ "signature": [ "{ id: string; title: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; }" ], - "path": "packages/kbn-investigation-shared/src/schema/create.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/create.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -105,9 +105,24 @@ "label": "CreateInvestigationResponse", "description": [], "signature": [ - "{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; }" + "{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: \"esql\"; params: { esql: string; suggestion: any; }; })[]; }" + ], + "path": "packages/kbn-investigation-shared/src/rest_specs/create.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.DeleteInvestigationItemParams", + "type": "Type", + "tags": [], + "label": "DeleteInvestigationItemParams", + "description": [], + "signature": [ + "{ investigationId: string; itemId: string; }" ], - "path": "packages/kbn-investigation-shared/src/schema/create.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/delete_item.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -120,9 +135,9 @@ "label": "DeleteInvestigationNoteParams", "description": [], "signature": [ - "{ id: string; noteId: string; }" + "{ investigationId: string; noteId: string; }" ], - "path": "packages/kbn-investigation-shared/src/schema/delete_note.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/delete_note.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -135,9 +150,9 @@ "label": "DeleteInvestigationParams", "description": [], "signature": [ - "{ id: string; }" + "{ investigationId: string; }" ], - "path": "packages/kbn-investigation-shared/src/schema/delete.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/delete.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -152,7 +167,7 @@ "signature": [ "{ alertId?: string | undefined; page?: string | undefined; perPage?: string | undefined; }" ], - "path": "packages/kbn-investigation-shared/src/schema/find.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/find.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -165,9 +180,24 @@ "label": "FindInvestigationsResponse", "description": [], "signature": [ - "{ page: number; perPage: number; total: number; results: { id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; }[]; }" + "{ page: number; perPage: number; total: number; results: { id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: \"esql\"; params: { esql: string; suggestion: any; }; })[]; }[]; }" ], - "path": "packages/kbn-investigation-shared/src/schema/find.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/find.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.GetInvestigationItemsResponse", + "type": "Type", + "tags": [], + "label": "GetInvestigationItemsResponse", + "description": [], + "signature": [ + "({ id: string; createdAt: number; createdBy: string; } & { title: string; type: \"esql\"; params: { esql: string; suggestion: any; }; })[]" + ], + "path": "packages/kbn-investigation-shared/src/rest_specs/get_items.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -182,7 +212,7 @@ "signature": [ "{ id: string; content: string; createdAt: number; createdBy: string; }[]" ], - "path": "packages/kbn-investigation-shared/src/schema/get_notes.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/get_notes.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -195,9 +225,9 @@ "label": "GetInvestigationParams", "description": [], "signature": [ - "{ id: string; }" + "{ investigationId: string; }" ], - "path": "packages/kbn-investigation-shared/src/schema/get.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/get.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -210,9 +240,9 @@ "label": "GetInvestigationResponse", "description": [], "signature": [ - "{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; }" + "{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: \"esql\"; params: { esql: string; suggestion: any; }; })[]; }" ], - "path": "packages/kbn-investigation-shared/src/schema/get.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/get.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -227,7 +257,7 @@ "signature": [ "{ id: string; content: string; createdAt: number; createdBy: string; }" ], - "path": "packages/kbn-investigation-shared/src/schema/investigation_note.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/investigation_note.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -272,6 +302,74 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.createInvestigationItemParamsSchema", + "type": "Object", + "tags": [], + "label": "createInvestigationItemParamsSchema", + "description": [], + "signature": [ + "TypeC", + "<{ path: ", + "TypeC", + "<{ investigationId: ", + "StringC", + "; }>; body: ", + "TypeC", + "<{ title: ", + "StringC", + "; type: ", + "LiteralC", + "<\"esql\">; params: ", + "TypeC", + "<{ esql: ", + "StringC", + "; suggestion: ", + "AnyC", + "; }>; }>; }>" + ], + "path": "packages/kbn-investigation-shared/src/rest_specs/create_item.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.createInvestigationItemResponseSchema", + "type": "Object", + "tags": [], + "label": "createInvestigationItemResponseSchema", + "description": [], + "signature": [ + "IntersectionC", + "<[", + "TypeC", + "<{ id: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; }>, ", + "TypeC", + "<{ title: ", + "StringC", + "; type: ", + "LiteralC", + "<\"esql\">; params: ", + "TypeC", + "<{ esql: ", + "StringC", + "; suggestion: ", + "AnyC", + "; }>; }>]>" + ], + "path": "packages/kbn-investigation-shared/src/rest_specs/create_item.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/investigation-shared", "id": "def-common.createInvestigationNoteParamsSchema", @@ -283,7 +381,7 @@ "TypeC", "<{ path: ", "TypeC", - "<{ id: ", + "<{ investigationId: ", "StringC", "; }>; body: ", "TypeC", @@ -291,7 +389,7 @@ "StringC", "; }>; }>" ], - "path": "packages/kbn-investigation-shared/src/schema/create_notes.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/create_note.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -315,7 +413,7 @@ "StringC", "; }>" ], - "path": "packages/kbn-investigation-shared/src/schema/create_notes.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/create_note.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -357,7 +455,7 @@ "LiteralC", "<\"blank\">; }>]>; }>; }>" ], - "path": "packages/kbn-investigation-shared/src/schema/create.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/create.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -417,9 +515,55 @@ "NumberC", "; createdBy: ", "StringC", - "; }>>; }>" + "; }>>; items: ", + "ArrayC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ id: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; }>, ", + "TypeC", + "<{ title: ", + "StringC", + "; type: ", + "LiteralC", + "<\"esql\">; params: ", + "TypeC", + "<{ esql: ", + "StringC", + "; suggestion: ", + "AnyC", + "; }>; }>]>>; }>" ], - "path": "packages/kbn-investigation-shared/src/schema/create.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/create.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.deleteInvestigationItemParamsSchema", + "type": "Object", + "tags": [], + "label": "deleteInvestigationItemParamsSchema", + "description": [], + "signature": [ + "TypeC", + "<{ path: ", + "TypeC", + "<{ investigationId: ", + "StringC", + "; itemId: ", + "StringC", + "; }>; }>" + ], + "path": "packages/kbn-investigation-shared/src/rest_specs/delete_item.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -435,13 +579,13 @@ "TypeC", "<{ path: ", "TypeC", - "<{ id: ", + "<{ investigationId: ", "StringC", "; noteId: ", "StringC", "; }>; }>" ], - "path": "packages/kbn-investigation-shared/src/schema/delete_note.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/delete_note.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -457,11 +601,37 @@ "TypeC", "<{ path: ", "TypeC", - "<{ id: ", + "<{ investigationId: ", "StringC", "; }>; }>" ], - "path": "packages/kbn-investigation-shared/src/schema/delete.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/delete.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.esqlItemSchema", + "type": "Object", + "tags": [], + "label": "esqlItemSchema", + "description": [], + "signature": [ + "TypeC", + "<{ title: ", + "StringC", + "; type: ", + "LiteralC", + "<\"esql\">; params: ", + "TypeC", + "<{ esql: ", + "StringC", + "; suggestion: ", + "AnyC", + "; }>; }>" + ], + "path": "packages/kbn-investigation-shared/src/schema/investigation_item.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -485,7 +655,7 @@ "StringC", "; }>; }>" ], - "path": "packages/kbn-investigation-shared/src/schema/find.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/find.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -555,9 +725,91 @@ "NumberC", "; createdBy: ", "StringC", - "; }>>; }>>; }>" + "; }>>; items: ", + "ArrayC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ id: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; }>, ", + "TypeC", + "<{ title: ", + "StringC", + "; type: ", + "LiteralC", + "<\"esql\">; params: ", + "TypeC", + "<{ esql: ", + "StringC", + "; suggestion: ", + "AnyC", + "; }>; }>]>>; }>>; }>" + ], + "path": "packages/kbn-investigation-shared/src/rest_specs/find.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.getInvestigationItemsParamsSchema", + "type": "Object", + "tags": [], + "label": "getInvestigationItemsParamsSchema", + "description": [], + "signature": [ + "TypeC", + "<{ path: ", + "TypeC", + "<{ investigationId: ", + "StringC", + "; }>; }>" + ], + "path": "packages/kbn-investigation-shared/src/rest_specs/get_items.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.getInvestigationItemsResponseSchema", + "type": "Object", + "tags": [], + "label": "getInvestigationItemsResponseSchema", + "description": [], + "signature": [ + "ArrayC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ id: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; }>, ", + "TypeC", + "<{ title: ", + "StringC", + "; type: ", + "LiteralC", + "<\"esql\">; params: ", + "TypeC", + "<{ esql: ", + "StringC", + "; suggestion: ", + "AnyC", + "; }>; }>]>>" ], - "path": "packages/kbn-investigation-shared/src/schema/find.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/get_items.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -573,11 +825,11 @@ "TypeC", "<{ path: ", "TypeC", - "<{ id: ", + "<{ investigationId: ", "StringC", "; }>; }>" ], - "path": "packages/kbn-investigation-shared/src/schema/get_notes.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/get_notes.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -603,7 +855,7 @@ "StringC", "; }>>" ], - "path": "packages/kbn-investigation-shared/src/schema/get_notes.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/get_notes.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -619,11 +871,11 @@ "TypeC", "<{ path: ", "TypeC", - "<{ id: ", + "<{ investigationId: ", "StringC", "; }>; }>" ], - "path": "packages/kbn-investigation-shared/src/schema/get.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/get.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -683,9 +935,95 @@ "NumberC", "; createdBy: ", "StringC", - "; }>>; }>" + "; }>>; items: ", + "ArrayC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ id: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; }>, ", + "TypeC", + "<{ title: ", + "StringC", + "; type: ", + "LiteralC", + "<\"esql\">; params: ", + "TypeC", + "<{ esql: ", + "StringC", + "; suggestion: ", + "AnyC", + "; }>; }>]>>; }>" ], - "path": "packages/kbn-investigation-shared/src/schema/get.ts", + "path": "packages/kbn-investigation-shared/src/rest_specs/get.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.investigationItemSchema", + "type": "Object", + "tags": [], + "label": "investigationItemSchema", + "description": [], + "signature": [ + "IntersectionC", + "<[", + "TypeC", + "<{ id: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; }>, ", + "TypeC", + "<{ title: ", + "StringC", + "; type: ", + "LiteralC", + "<\"esql\">; params: ", + "TypeC", + "<{ esql: ", + "StringC", + "; suggestion: ", + "AnyC", + "; }>; }>]>" + ], + "path": "packages/kbn-investigation-shared/src/schema/investigation_item.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.investigationItemsSchema", + "type": "Object", + "tags": [], + "label": "investigationItemsSchema", + "description": [], + "signature": [ + "TypeC", + "<{ title: ", + "StringC", + "; type: ", + "LiteralC", + "<\"esql\">; params: ", + "TypeC", + "<{ esql: ", + "StringC", + "; suggestion: ", + "AnyC", + "; }>; }>" + ], + "path": "packages/kbn-investigation-shared/src/schema/investigation_item.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -709,10 +1047,120 @@ "StringC", "; }>" ], + "path": "packages/kbn-investigation-shared/src/rest_specs/investigation_note.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.investigationNoteSchema", + "type": "Object", + "tags": [], + "label": "investigationNoteSchema", + "description": [], + "signature": [ + "TypeC", + "<{ id: ", + "StringC", + "; content: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; }>" + ], "path": "packages/kbn-investigation-shared/src/schema/investigation_note.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.investigationSchema", + "type": "Object", + "tags": [], + "label": "investigationSchema", + "description": [], + "signature": [ + "TypeC", + "<{ id: ", + "StringC", + "; title: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; params: ", + "TypeC", + "<{ timeRange: ", + "TypeC", + "<{ from: ", + "NumberC", + "; to: ", + "NumberC", + "; }>; }>; origin: ", + "UnionC", + "<[", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"alert\">; id: ", + "StringC", + "; }>, ", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"blank\">; }>]>; status: ", + "UnionC", + "<[", + "LiteralC", + "<\"ongoing\">, ", + "LiteralC", + "<\"closed\">]>; notes: ", + "ArrayC", + "<", + "TypeC", + "<{ id: ", + "StringC", + "; content: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; }>>; items: ", + "ArrayC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ id: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; }>, ", + "TypeC", + "<{ title: ", + "StringC", + "; type: ", + "LiteralC", + "<\"esql\">; params: ", + "TypeC", + "<{ esql: ", + "StringC", + "; suggestion: ", + "AnyC", + "; }>; }>]>>; }>" + ], + "path": "packages/kbn-investigation-shared/src/schema/investigation.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ] } diff --git a/api_docs/kbn_investigation_shared.mdx b/api_docs/kbn_investigation_shared.mdx index a62c87f7e1538..00114dcedb219 100644 --- a/api_docs/kbn_investigation_shared.mdx +++ b/api_docs/kbn_investigation_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-investigation-shared title: "@kbn/investigation-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/investigation-shared plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/investigation-shared'] --- import kbnInvestigationSharedObj from './kbn_investigation_shared.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 29 | 0 | 29 | 0 | +| 41 | 0 | 41 | 0 | ## Common diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index d991b845e7349..939696fd3275f 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index 69d313b1775cd..4c18ec4b8a35d 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index f2c5dec02ccad..67886fcfe5bc0 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-08-21 +date: 2024-08-23 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 6d56ec23f7a4b..a4b0e3eb31fba 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-08-21 +date: 2024-08-23 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 1f16c60877a9a..86760b2d5710c 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index 1a84d52dba344..84200c0b540a3 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 8a781f99900fa..0432d74e5d202 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-08-21 +date: 2024-08-23 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 44bd0e3c912cc..4da72c69beebe 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2024-08-21 +date: 2024-08-23 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 cf7d14d234ebe..0884f5dccf462 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx index fc7bb6ceeeb32..4d7ecefbaf477 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] --- import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index 204d3d9402017..6bff491c250c3 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-08-21 +date: 2024-08-23 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 dd4e91bc29cb1..ec2301c32e666 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.devdocs.json b/api_docs/kbn_managed_content_badge.devdocs.json index 9eee12d881aff..c9b58c13a3b94 100644 --- a/api_docs/kbn_managed_content_badge.devdocs.json +++ b/api_docs/kbn_managed_content_badge.devdocs.json @@ -11,9 +11,9 @@ "label": "getManagedContentBadge", "description": [], "signature": [ - "(tooltipText: string) => { 'data-test-subj': string; badgeText: string; title: string; color: string; iconType: string; toolTipProps: ", + "(tooltipText: string, enableTooltipProps?: boolean | undefined) => { 'data-test-subj': string; badgeText: string; title: string; color: string; iconType: string; toolTipProps: ", "EuiToolTipProps", - "; }" + " | undefined; }" ], "path": "packages/kbn-managed-content-badge/index.ts", "deprecated": false, @@ -33,6 +33,21 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "@kbn/managed-content-badge", + "id": "def-public.getManagedContentBadge.$2", + "type": "CompoundType", + "tags": [], + "label": "enableTooltipProps", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-managed-content-badge/index.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false } ], "returnComment": [], diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index 809eaa788b1ab..8c375eae598d1 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] --- import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2 | 0 | 2 | 0 | +| 3 | 0 | 3 | 0 | ## Client diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 0152b8da013d4..e5c6008ec5b57 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-08-21 +date: 2024-08-23 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 a8fc2087d5be1..a2f231ecb1d21 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-08-21 +date: 2024-08-23 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 83a72ea8fd40b..4bce70ade99e9 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-08-21 +date: 2024-08-23 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 ed86943233656..e7ac38eb898fb 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-08-21 +date: 2024-08-23 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 16a0e3d878970..b0ce6d16b7b40 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-08-21 +date: 2024-08-23 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 d47f1b299512d..d7f9370e5b95c 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-08-21 +date: 2024-08-23 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 b60c4f2806f17..a873740659c9a 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-08-21 +date: 2024-08-23 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 a0a2e356fad31..751b5dedfd861 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-08-21 +date: 2024-08-23 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 052f422aea9f8..d42edd3de9a9c 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-08-21 +date: 2024-08-23 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 ef87721c0de44..ae050205e39ee 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-08-21 +date: 2024-08-23 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 3bcc937e3e410..1bb6a08ffe9f6 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-08-21 +date: 2024-08-23 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 205fef980ef4a..b87327074d54b 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-08-21 +date: 2024-08-23 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 0c04a21dfd732..6eb49e28483ba 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-08-21 +date: 2024-08-23 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 1bae9e840d6ec..58a03a60f3477 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-08-21 +date: 2024-08-23 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 a9d7aec37888e..f3eec66312be9 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 1a3efb7accac3..323c24eb64fe6 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 26ad6c49cb155..190c97438d167 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index ec3b94ae724b4..650dc022bce5f 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-cancellable-search'] --- import kbnMlCancellableSearchObj from './kbn_ml_cancellable_search.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 1365ee99f3d4c..f28c92bccdd5d 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-08-21 +date: 2024-08-23 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 fc01fcee37f57..a676635136e2f 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-08-21 +date: 2024-08-23 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 7b2ea0dbabc4a..b31748d7d63fa 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 614722fbb9bce..fb9a745abfce6 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-08-21 +date: 2024-08-23 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 66f732a64b3ff..a0ce2c3363eca 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-08-21 +date: 2024-08-23 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 9cd14ac9b4bc6..c68b4d0ce5f9c 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 83cd8b34bdebf..f5cdb6905d12b 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 c017904cbee87..ccede0bbd347c 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-08-21 +date: 2024-08-23 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 0fb0204397de8..51d1ff218b1b8 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-08-21 +date: 2024-08-23 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 c47b2dc9f152f..ac91ebde6424e 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-08-21 +date: 2024-08-23 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 f49a64ac4f01b..06666ff5a9130 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-08-21 +date: 2024-08-23 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 ac777c00df98e..9aff4c2c89e31 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-08-21 +date: 2024-08-23 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 873dcbfff4c09..45c572f3ad966 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-08-21 +date: 2024-08-23 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 3f486915b3106..be4b2d3bb0d41 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 78f7a6b6de134..4de3e0922d0ed 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 6a6564cad8f1a..05b935ae124bb 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 768f772fda167..53802452b622b 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 de62bcf56ac17..032501da24b38 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 38b9c1ba38b24..9012f4734b754 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index 21d8669fd9e65..5494e0f48311b 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 7a85b2eeda960..1d5aec8db1637 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index fbda54281dfa7..a0ea7162e6ebb 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 78335335b9a06..99267ec1eef8e 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 915c39aa0321e..61ad6236ffd63 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 54f1e69eb3b12..f536f915eee8f 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-08-21 +date: 2024-08-23 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 749c3aa5e6141..80f5f15c88914 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-08-21 +date: 2024-08-23 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 d56cf57aea484..3c435da06b324 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index b92d597636c5a..5f2b36e00df43 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index edff3d9526938..74487dbb1e26c 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index d1da2437c2d30..2a69cb9181603 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index 8c321acc60127..10c3d9080dddd 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index dc2c155afa82b..8f8ebf4c05a83 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-08-21 +date: 2024-08-23 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 7547dd809f66f..cd7e584e46cac 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-08-21 +date: 2024-08-23 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 62cb64c63a219..a47312e715cad 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-08-21 +date: 2024-08-23 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 9005cde014e8c..1d1d478e5bf2a 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index d702cbb73fce9..eeb34ac211e92 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 21af4bcf08414..91a1facd9a015 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index b13d09110c9d2..923e0c1a369a1 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 41c08ea092f05..0888554bad3b2 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-08-21 +date: 2024-08-23 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 0a6830c8fb582..86708185c11a3 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index be820f48d4213..c972b9db39e86 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 52ef07872de3d..3669035aecb57 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 4b8208ec801fc..d108124b24dae 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 b48c3aff3fdac..cb3133473b76f 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-08-21 +date: 2024-08-23 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 11a12d20defec..d69bbf488dce6 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index 14700c0008272..7e0c63f7903d7 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 3443ae98eae68..a31451fdff77d 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-08-21 +date: 2024-08-23 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 c26f75daa6e44..742711ea7df13 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-08-21 +date: 2024-08-23 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 17ba83b6944fc..eaa364840c153 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-08-21 +date: 2024-08-23 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 45080b2fa0255..1510ae5fb08bc 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-08-21 +date: 2024-08-23 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 ef7f9451da1c2..8978384be4b9d 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-08-21 +date: 2024-08-23 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 e15904d1710aa..6e737de92bffc 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index 79f6902b72e84..412632c3b0179 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 34009b23f053b..6690b71909a21 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-08-21 +date: 2024-08-23 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 bed49a2f9fe2d..037b9425a2266 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-08-21 +date: 2024-08-23 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 c57f9af8b04f8..6217c5ee2337d 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-08-21 +date: 2024-08-23 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 0323003e4913f..1792f4f34c251 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-08-21 +date: 2024-08-23 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 39db45a27ef03..84bb85c9576bc 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index 621d156fc1ec6..5779f65ed4495 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 9da77486cb765..df258a3060008 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index 72ca07192d31b..55ed57f26c2a1 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index 2350832ee23a3..3db6c8b18236f 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index ad2d1aa04617f..96ba168b33972 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index 53820a9e943c4..d60cf2e162e95 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index 26afb5f52ea0f..138ea68eab72f 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index a3d938a3f872f..b27092487d258 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index 54a5a7cf11a70..7bc4c52322639 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index 9cead606c47fb..5e0a407c85708 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index 8d8869160e79c..6f09bd45a812e 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx index ac22afed68050..795f9db5861af 100644 --- a/api_docs/kbn_response_ops_feature_flag_service.mdx +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-feature-flag-service title: "@kbn/response-ops-feature-flag-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-feature-flag-service plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] --- import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 1ac7b6bc1b9a4..03029eea045a8 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index 9388d51c628d2..01a9638cf1390 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index d88317c21dd61..05ad1ba3e2cec 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index ed0dcd510d6a5..1b56d5e316cf8 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] --- import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index 8bf140040af60..eae1f1a05b050 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-08-21 +date: 2024-08-23 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 0cfe8fb9d0a34..feac2dff9ed64 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 911561ed09000..8ad8de87939d4 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_screenshotting_server.devdocs.json b/api_docs/kbn_screenshotting_server.devdocs.json new file mode 100644 index 0000000000000..f320f3ca33d1e --- /dev/null +++ b/api_docs/kbn_screenshotting_server.devdocs.json @@ -0,0 +1,806 @@ +{ + "id": "@kbn/screenshotting-server", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [ + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.ChromiumArchivePaths", + "type": "Class", + "tags": [], + "label": "ChromiumArchivePaths", + "description": [], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.ChromiumArchivePaths.packages", + "type": "Array", + "tags": [], + "label": "packages", + "description": [], + "signature": [ + "(CustomPackageInfo | CommonPackageInfo)[]" + ], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.ChromiumArchivePaths.archivesPath", + "type": "string", + "tags": [], + "label": "archivesPath", + "description": [], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.ChromiumArchivePaths.find", + "type": "Function", + "tags": [], + "label": "find", + "description": [], + "signature": [ + "(platform: string, architecture: string, packages?: ", + { + "pluginId": "@kbn/screenshotting-server", + "scope": "server", + "docId": "kibKbnScreenshottingServerPluginApi", + "section": "def-server.PackageInfo", + "text": "PackageInfo" + }, + "[]) => ", + { + "pluginId": "@kbn/screenshotting-server", + "scope": "server", + "docId": "kibKbnScreenshottingServerPluginApi", + "section": "def-server.PackageInfo", + "text": "PackageInfo" + }, + " | undefined" + ], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.ChromiumArchivePaths.find.$1", + "type": "string", + "tags": [], + "label": "platform", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.ChromiumArchivePaths.find.$2", + "type": "string", + "tags": [], + "label": "architecture", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.ChromiumArchivePaths.find.$3", + "type": "Array", + "tags": [], + "label": "packages", + "description": [], + "signature": [ + { + "pluginId": "@kbn/screenshotting-server", + "scope": "server", + "docId": "kibKbnScreenshottingServerPluginApi", + "section": "def-server.PackageInfo", + "text": "PackageInfo" + }, + "[]" + ], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.ChromiumArchivePaths.resolvePath", + "type": "Function", + "tags": [], + "label": "resolvePath", + "description": [], + "signature": [ + "(p: ", + { + "pluginId": "@kbn/screenshotting-server", + "scope": "server", + "docId": "kibKbnScreenshottingServerPluginApi", + "section": "def-server.PackageInfo", + "text": "PackageInfo" + }, + ") => string" + ], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.ChromiumArchivePaths.resolvePath.$1", + "type": "Object", + "tags": [], + "label": "p", + "description": [], + "signature": [ + { + "pluginId": "@kbn/screenshotting-server", + "scope": "server", + "docId": "kibKbnScreenshottingServerPluginApi", + "section": "def-server.PackageInfo", + "text": "PackageInfo" + } + ], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.ChromiumArchivePaths.getAllArchiveFilenames", + "type": "Function", + "tags": [], + "label": "getAllArchiveFilenames", + "description": [], + "signature": [ + "() => string[]" + ], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.ChromiumArchivePaths.getDownloadUrl", + "type": "Function", + "tags": [], + "label": "getDownloadUrl", + "description": [], + "signature": [ + "(p: ", + { + "pluginId": "@kbn/screenshotting-server", + "scope": "server", + "docId": "kibKbnScreenshottingServerPluginApi", + "section": "def-server.PackageInfo", + "text": "PackageInfo" + }, + ") => string" + ], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.ChromiumArchivePaths.getDownloadUrl.$1", + "type": "Object", + "tags": [], + "label": "p", + "description": [], + "signature": [ + { + "pluginId": "@kbn/screenshotting-server", + "scope": "server", + "docId": "kibKbnScreenshottingServerPluginApi", + "section": "def-server.PackageInfo", + "text": "PackageInfo" + } + ], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.ChromiumArchivePaths.getBinaryPath", + "type": "Function", + "tags": [], + "label": "getBinaryPath", + "description": [], + "signature": [ + "(p: ", + { + "pluginId": "@kbn/screenshotting-server", + "scope": "server", + "docId": "kibKbnScreenshottingServerPluginApi", + "section": "def-server.PackageInfo", + "text": "PackageInfo" + }, + ", chromiumPath: string) => string" + ], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.ChromiumArchivePaths.getBinaryPath.$1", + "type": "Object", + "tags": [], + "label": "p", + "description": [], + "signature": [ + { + "pluginId": "@kbn/screenshotting-server", + "scope": "server", + "docId": "kibKbnScreenshottingServerPluginApi", + "section": "def-server.PackageInfo", + "text": "PackageInfo" + } + ], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.ChromiumArchivePaths.getBinaryPath.$2", + "type": "string", + "tags": [], + "label": "chromiumPath", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], + "functions": [ + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.args", + "type": "Function", + "tags": [], + "label": "args", + "description": [], + "signature": [ + "({ userDataDir, disableSandbox, windowSize, proxy: proxyConfig, }: LaunchArgs) => string[]" + ], + "path": "packages/kbn-screenshotting-server/src/args.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.args.$1", + "type": "Object", + "tags": [], + "label": "{\n userDataDir,\n disableSandbox,\n windowSize,\n proxy: proxyConfig,\n}", + "description": [], + "signature": [ + "LaunchArgs" + ], + "path": "packages/kbn-screenshotting-server/src/args.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.createConfig", + "type": "Function", + "tags": [], + "label": "createConfig", + "description": [], + "signature": [ + "(parentLogger: ", + { + "pluginId": "@kbn/logging", + "scope": "common", + "docId": "kibKbnLoggingPluginApi", + "section": "def-common.Logger", + "text": "Logger" + }, + ", config: Readonly<{} & { enabled: boolean; capture: Readonly<{ loadDelay?: number | moment.Duration | undefined; } & { zoom: number; timeouts: Readonly<{} & { renderComplete: number | moment.Duration; openUrl: number | moment.Duration; waitForElements: number | moment.Duration; }>; }>; browser: Readonly<{} & { autoDownload: boolean; chromium: Readonly<{ inspect?: boolean | undefined; disableSandbox?: boolean | undefined; } & { proxy: Readonly<{ server?: string | undefined; bypass?: string[] | undefined; } & { enabled: boolean; }>; }>; }>; networkPolicy: Readonly<{} & { enabled: boolean; rules: Readonly<{ host?: string | undefined; protocol?: string | undefined; } & { allow: boolean; }>[]; }>; poolSize: number; }>) => Promise; }>; browser: Readonly<{} & { autoDownload: boolean; chromium: Readonly<{ inspect?: boolean | undefined; disableSandbox?: boolean | undefined; } & { proxy: Readonly<{ server?: string | undefined; bypass?: string[] | undefined; } & { enabled: boolean; }>; }>; }>; networkPolicy: Readonly<{} & { enabled: boolean; rules: Readonly<{ host?: string | undefined; protocol?: string | undefined; } & { allow: boolean; }>[]; }>; poolSize: number; }>>" + ], + "path": "packages/kbn-screenshotting-server/src/config/create_config.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.createConfig.$1", + "type": "Object", + "tags": [], + "label": "parentLogger", + "description": [], + "signature": [ + { + "pluginId": "@kbn/logging", + "scope": "common", + "docId": "kibKbnLoggingPluginApi", + "section": "def-common.Logger", + "text": "Logger" + } + ], + "path": "packages/kbn-screenshotting-server/src/config/create_config.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.createConfig.$2", + "type": "Object", + "tags": [], + "label": "config", + "description": [], + "signature": [ + "Readonly<{} & { enabled: boolean; capture: Readonly<{ loadDelay?: number | moment.Duration | undefined; } & { zoom: number; timeouts: Readonly<{} & { renderComplete: number | moment.Duration; openUrl: number | moment.Duration; waitForElements: number | moment.Duration; }>; }>; browser: Readonly<{} & { autoDownload: boolean; chromium: Readonly<{ inspect?: boolean | undefined; disableSandbox?: boolean | undefined; } & { proxy: Readonly<{ server?: string | undefined; bypass?: string[] | undefined; } & { enabled: boolean; }>; }>; }>; networkPolicy: Readonly<{} & { enabled: boolean; rules: Readonly<{ host?: string | undefined; protocol?: string | undefined; } & { allow: boolean; }>[]; }>; poolSize: number; }>" + ], + "path": "packages/kbn-screenshotting-server/src/config/create_config.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.durationToNumber", + "type": "Function", + "tags": [], + "label": "durationToNumber", + "description": [ + "\nHelper function" + ], + "signature": [ + "(value: number | moment.Duration) => number" + ], + "path": "packages/kbn-screenshotting-server/src/config/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.durationToNumber.$1", + "type": "CompoundType", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "number | moment.Duration" + ], + "path": "packages/kbn-screenshotting-server/src/config/index.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.getChromiumPackage", + "type": "Function", + "tags": [], + "label": "getChromiumPackage", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "@kbn/screenshotting-server", + "scope": "server", + "docId": "kibKbnScreenshottingServerPluginApi", + "section": "def-server.PackageInfo", + "text": "PackageInfo" + } + ], + "path": "packages/kbn-screenshotting-server/src/get_chromium_package.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.PackageInfo", + "type": "Interface", + "tags": [], + "label": "PackageInfo", + "description": [], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.PackageInfo.platform", + "type": "CompoundType", + "tags": [], + "label": "platform", + "description": [], + "signature": [ + "\"linux\" | \"darwin\" | \"win32\"" + ], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.PackageInfo.architecture", + "type": "CompoundType", + "tags": [], + "label": "architecture", + "description": [], + "signature": [ + "\"x64\" | \"arm64\"" + ], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.PackageInfo.archiveFilename", + "type": "string", + "tags": [], + "label": "archiveFilename", + "description": [], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.PackageInfo.archiveChecksum", + "type": "string", + "tags": [], + "label": "archiveChecksum", + "description": [], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.PackageInfo.binaryChecksum", + "type": "string", + "tags": [], + "label": "binaryChecksum", + "description": [], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.PackageInfo.binaryRelativePath", + "type": "string", + "tags": [], + "label": "binaryRelativePath", + "description": [], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.PackageInfo.isPreInstalled", + "type": "boolean", + "tags": [], + "label": "isPreInstalled", + "description": [], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.PackageInfo.location", + "type": "CompoundType", + "tags": [], + "label": "location", + "description": [], + "signature": [ + "\"custom\" | \"common\"" + ], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.PackageInfo.revision", + "type": "number", + "tags": [], + "label": "revision", + "description": [], + "path": "packages/kbn-screenshotting-server/src/paths.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.ConfigType", + "type": "Type", + "tags": [], + "label": "ConfigType", + "description": [], + "signature": [ + "{ readonly enabled: boolean; readonly capture: Readonly<{ loadDelay?: number | moment.Duration | undefined; } & { zoom: number; timeouts: Readonly<{} & { renderComplete: number | moment.Duration; openUrl: number | moment.Duration; waitForElements: number | moment.Duration; }>; }>; readonly browser: Readonly<{} & { autoDownload: boolean; chromium: Readonly<{ inspect?: boolean | undefined; disableSandbox?: boolean | undefined; } & { proxy: Readonly<{ server?: string | undefined; bypass?: string[] | undefined; } & { enabled: boolean; }>; }>; }>; readonly networkPolicy: Readonly<{} & { enabled: boolean; rules: Readonly<{ host?: string | undefined; protocol?: string | undefined; } & { allow: boolean; }>[]; }>; readonly poolSize: number; }" + ], + "path": "packages/kbn-screenshotting-server/src/config/schema.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [ + { + "parentPluginId": "@kbn/screenshotting-server", + "id": "def-server.ConfigSchema", + "type": "Object", + "tags": [], + "label": "ConfigSchema", + "description": [], + "signature": [ + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.ObjectType", + "text": "ObjectType" + }, + "<{ enabled: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.ConditionalType", + "text": "ConditionalType" + }, + "; networkPolicy: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.ObjectType", + "text": "ObjectType" + }, + "<{ enabled: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + "; rules: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + "[]>; }>; browser: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.ObjectType", + "text": "ObjectType" + }, + "<{ autoDownload: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.ConditionalType", + "text": "ConditionalType" + }, + "; chromium: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.ObjectType", + "text": "ObjectType" + }, + "<{ inspect: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.ConditionalType", + "text": "ConditionalType" + }, + "; disableSandbox: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + "; proxy: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.ObjectType", + "text": "ObjectType" + }, + "<{ enabled: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + "; server: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.ConditionalType", + "text": "ConditionalType" + }, + "; bypass: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.ConditionalType", + "text": "ConditionalType" + }, + "; }>; }>; }>; capture: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.ObjectType", + "text": "ObjectType" + }, + "<{ timeouts: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.ObjectType", + "text": "ObjectType" + }, + "<{ openUrl: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + "; waitForElements: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + "; renderComplete: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + "; }>; zoom: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + "; loadDelay: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + "; }>; poolSize: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + "; }>" + ], + "path": "packages/kbn-screenshotting-server/src/config/schema.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx new file mode 100644 index 0000000000000..12c57a959b5c0 --- /dev/null +++ b/api_docs/kbn_screenshotting_server.mdx @@ -0,0 +1,42 @@ +--- +#### +#### 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: kibKbnScreenshottingServerPluginApi +slug: /kibana-dev-docs/api/kbn-screenshotting-server +title: "@kbn/screenshotting-server" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/screenshotting-server plugin +date: 2024-08-23 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/screenshotting-server'] +--- +import kbnScreenshottingServerObj from './kbn_screenshotting_server.devdocs.json'; + + + +Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 35 | 0 | 34 | 0 | + +## Server + +### Objects + + +### Functions + + +### Classes + + +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 0a55e1202f858..c4361738cdf67 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-08-21 +date: 2024-08-23 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 953bb3008f950..96dbe8adacaf2 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index 3d7214443c301..a4ca5f1ac69fc 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index 222eb1298f972..908d0a740ebd2 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index 675519dbee5b0..dc2361bcb7301 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index 4d475339d0a99..ebcf9f7900675 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index 59f73471533fa..9d7c8b27af6db 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core.devdocs.json b/api_docs/kbn_security_authorization_core.devdocs.json new file mode 100644 index 0000000000000..75a43d937d9f0 --- /dev/null +++ b/api_docs/kbn_security_authorization_core.devdocs.json @@ -0,0 +1,468 @@ +{ + "id": "@kbn/security-authorization-core", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [ + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.Actions", + "type": "Class", + "tags": [], + "label": "Actions", + "description": [ + "Actions are used to create the \"actions\" that are associated with Elasticsearch's\napplication privileges, and are used to perform the authorization checks implemented\nby the various `checkPrivilegesWithRequest` derivatives." + ], + "signature": [ + { + "pluginId": "@kbn/security-authorization-core", + "scope": "server", + "docId": "kibKbnSecurityAuthorizationCorePluginApi", + "section": "def-server.Actions", + "text": "Actions" + }, + " implements ", + { + "pluginId": "@kbn/security-plugin-types-server", + "scope": "server", + "docId": "kibKbnSecurityPluginTypesServerPluginApi", + "section": "def-server.Actions", + "text": "Actions" + } + ], + "path": "x-pack/packages/security/authorization_core/src/actions/actions.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.Actions.api", + "type": "Object", + "tags": [], + "label": "api", + "description": [], + "signature": [ + "ApiActions" + ], + "path": "x-pack/packages/security/authorization_core/src/actions/actions.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.Actions.app", + "type": "Object", + "tags": [], + "label": "app", + "description": [], + "signature": [ + "AppActions" + ], + "path": "x-pack/packages/security/authorization_core/src/actions/actions.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.Actions.cases", + "type": "Object", + "tags": [], + "label": "cases", + "description": [], + "signature": [ + "CasesActions" + ], + "path": "x-pack/packages/security/authorization_core/src/actions/actions.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.Actions.login", + "type": "string", + "tags": [], + "label": "login", + "description": [], + "path": "x-pack/packages/security/authorization_core/src/actions/actions.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.Actions.savedObject", + "type": "Object", + "tags": [], + "label": "savedObject", + "description": [], + "signature": [ + "SavedObjectActions" + ], + "path": "x-pack/packages/security/authorization_core/src/actions/actions.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.Actions.alerting", + "type": "Object", + "tags": [], + "label": "alerting", + "description": [], + "signature": [ + "AlertingActions" + ], + "path": "x-pack/packages/security/authorization_core/src/actions/actions.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.Actions.space", + "type": "Object", + "tags": [], + "label": "space", + "description": [], + "signature": [ + "SpaceActions" + ], + "path": "x-pack/packages/security/authorization_core/src/actions/actions.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.Actions.ui", + "type": "Object", + "tags": [], + "label": "ui", + "description": [], + "signature": [ + "UIActions" + ], + "path": "x-pack/packages/security/authorization_core/src/actions/actions.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.Actions.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/packages/security/authorization_core/src/actions/actions.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], + "functions": [ + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.privilegesFactory", + "type": "Function", + "tags": [], + "label": "privilegesFactory", + "description": [], + "signature": [ + "(actions: ", + { + "pluginId": "@kbn/security-authorization-core", + "scope": "server", + "docId": "kibKbnSecurityAuthorizationCorePluginApi", + "section": "def-server.Actions", + "text": "Actions" + }, + ", featuresService: ", + { + "pluginId": "features", + "scope": "server", + "docId": "kibFeaturesPluginApi", + "section": "def-server.FeaturesPluginSetup", + "text": "FeaturesPluginSetup" + }, + ", licenseService: Pick<", + { + "pluginId": "@kbn/security-plugin-types-common", + "scope": "common", + "docId": "kibKbnSecurityPluginTypesCommonPluginApi", + "section": "def-common.SecurityLicense", + "text": "SecurityLicense" + }, + ", \"getFeatures\" | \"hasAtLeast\">) => { get(respectLicenseLevel?: boolean): { features: Record>; global: { all: string[]; read: string[]; }; space: { all: string[]; read: string[]; }; reserved: Record; }; }" + ], + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.privilegesFactory.$1", + "type": "Object", + "tags": [], + "label": "actions", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-authorization-core", + "scope": "server", + "docId": "kibKbnSecurityAuthorizationCorePluginApi", + "section": "def-server.Actions", + "text": "Actions" + } + ], + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.privilegesFactory.$2", + "type": "Object", + "tags": [], + "label": "featuresService", + "description": [], + "signature": [ + { + "pluginId": "features", + "scope": "server", + "docId": "kibFeaturesPluginApi", + "section": "def-server.FeaturesPluginSetup", + "text": "FeaturesPluginSetup" + } + ], + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.privilegesFactory.$3", + "type": "Object", + "tags": [], + "label": "licenseService", + "description": [], + "signature": [ + "Pick<", + { + "pluginId": "@kbn/security-plugin-types-common", + "scope": "common", + "docId": "kibKbnSecurityPluginTypesCommonPluginApi", + "section": "def-common.SecurityLicense", + "text": "SecurityLicense" + }, + ", \"getFeatures\" | \"hasAtLeast\">" + ], + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.PrivilegesService", + "type": "Interface", + "tags": [], + "label": "PrivilegesService", + "description": [], + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.PrivilegesService.get", + "type": "Function", + "tags": [], + "label": "get", + "description": [], + "signature": [ + "(respectLicenseLevel?: boolean | undefined) => ", + { + "pluginId": "@kbn/security-authorization-core", + "scope": "server", + "docId": "kibKbnSecurityAuthorizationCorePluginApi", + "section": "def-server.RawKibanaPrivileges", + "text": "RawKibanaPrivileges" + } + ], + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.PrivilegesService.get.$1", + "type": "CompoundType", + "tags": [], + "label": "respectLicenseLevel", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/packages/security/authorization_core/src/privileges/privileges.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.RawKibanaFeaturePrivileges", + "type": "Interface", + "tags": [], + "label": "RawKibanaFeaturePrivileges", + "description": [], + "path": "x-pack/packages/security/authorization_core/src/privileges/raw_kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.RawKibanaFeaturePrivileges.Unnamed", + "type": "IndexSignature", + "tags": [], + "label": "[featureId: string]: { [privilegeId: string]: string[]; }", + "description": [], + "signature": [ + "[featureId: string]: { [privilegeId: string]: string[]; }" + ], + "path": "x-pack/packages/security/authorization_core/src/privileges/raw_kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.RawKibanaPrivileges", + "type": "Interface", + "tags": [], + "label": "RawKibanaPrivileges", + "description": [], + "path": "x-pack/packages/security/authorization_core/src/privileges/raw_kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.RawKibanaPrivileges.global", + "type": "Object", + "tags": [], + "label": "global", + "description": [], + "signature": [ + "{ [x: string]: string[]; }" + ], + "path": "x-pack/packages/security/authorization_core/src/privileges/raw_kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.RawKibanaPrivileges.features", + "type": "Object", + "tags": [], + "label": "features", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-authorization-core", + "scope": "server", + "docId": "kibKbnSecurityAuthorizationCorePluginApi", + "section": "def-server.RawKibanaFeaturePrivileges", + "text": "RawKibanaFeaturePrivileges" + } + ], + "path": "x-pack/packages/security/authorization_core/src/privileges/raw_kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.RawKibanaPrivileges.space", + "type": "Object", + "tags": [], + "label": "space", + "description": [], + "signature": [ + "{ [x: string]: string[]; }" + ], + "path": "x-pack/packages/security/authorization_core/src/privileges/raw_kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.RawKibanaPrivileges.reserved", + "type": "Object", + "tags": [], + "label": "reserved", + "description": [], + "signature": [ + "{ [x: string]: string[]; }" + ], + "path": "x-pack/packages/security/authorization_core/src/privileges/raw_kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/security-authorization-core", + "id": "def-server.CasesSupportedOperations", + "type": "Type", + "tags": [], + "label": "CasesSupportedOperations", + "description": [], + "signature": [ + "\"getTags\" | \"pushCase\" | \"createCase\" | \"createComment\" | \"getCase\" | \"getComment\" | \"getReporters\" | \"getUserActions\" | \"findConfigurations\" | \"updateCase\" | \"updateComment\" | \"deleteCase\" | \"deleteComment\" | \"createConfiguration\" | \"updateConfiguration\"" + ], + "path": "x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/cases.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_security_authorization_core.mdx b/api_docs/kbn_security_authorization_core.mdx new file mode 100644 index 0000000000000..badff5202e268 --- /dev/null +++ b/api_docs/kbn_security_authorization_core.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: kibKbnSecurityAuthorizationCorePluginApi +slug: /kibana-dev-docs/api/kbn-security-authorization-core +title: "@kbn/security-authorization-core" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/security-authorization-core plugin +date: 2024-08-23 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core'] +--- +import kbnSecurityAuthorizationCoreObj from './kbn_security_authorization_core.devdocs.json'; + + + +Contact [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 25 | 0 | 24 | 7 | + +## Server + +### Functions + + +### Classes + + +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index e7d10f1143dbc..030d2324fe4ba 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index f4785fed7ee8e..fa82b3e9bcfb5 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-hardening'] --- import kbnSecurityHardeningObj from './kbn_security_hardening.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index 14f119c67a2ec..39d351ade594d 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 5e7780e51fcbc..80c809cc7dd3a 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 9c68c81026691..a2acfc49e4148 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_role_management_model.devdocs.json b/api_docs/kbn_security_role_management_model.devdocs.json new file mode 100644 index 0000000000000..7182dd6e7bd9c --- /dev/null +++ b/api_docs/kbn_security_role_management_model.devdocs.json @@ -0,0 +1,1489 @@ +{ + "id": "@kbn/security-role-management-model", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivilege", + "type": "Class", + "tags": [], + "label": "KibanaPrivilege", + "description": [], + "path": "x-pack/packages/security/role_management_model/src/kibana_privilege.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivilege.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/packages/security/role_management_model/src/kibana_privilege.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivilege.Unnamed.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/packages/security/role_management_model/src/kibana_privilege.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivilege.Unnamed.$2", + "type": "Array", + "tags": [], + "label": "actions", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/packages/security/role_management_model/src/kibana_privilege.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivilege.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "x-pack/packages/security/role_management_model/src/kibana_privilege.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivilege.grantsPrivilege", + "type": "Function", + "tags": [], + "label": "grantsPrivilege", + "description": [], + "signature": [ + "(candidatePrivilege: ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.KibanaPrivilege", + "text": "KibanaPrivilege" + }, + ") => boolean" + ], + "path": "x-pack/packages/security/role_management_model/src/kibana_privilege.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivilege.grantsPrivilege.$1", + "type": "Object", + "tags": [], + "label": "candidatePrivilege", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.KibanaPrivilege", + "text": "KibanaPrivilege" + } + ], + "path": "x-pack/packages/security/role_management_model/src/kibana_privilege.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivileges", + "type": "Class", + "tags": [], + "label": "KibanaPrivileges", + "description": [], + "path": "x-pack/packages/security/role_management_model/src/kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivileges.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/packages/security/role_management_model/src/kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivileges.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "rawKibanaPrivileges", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-authorization-core", + "scope": "server", + "docId": "kibKbnSecurityAuthorizationCorePluginApi", + "section": "def-server.RawKibanaPrivileges", + "text": "RawKibanaPrivileges" + } + ], + "path": "x-pack/packages/security/role_management_model/src/kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivileges.Unnamed.$2", + "type": "Array", + "tags": [], + "label": "features", + "description": [], + "signature": [ + { + "pluginId": "features", + "scope": "common", + "docId": "kibFeaturesPluginApi", + "section": "def-common.KibanaFeature", + "text": "KibanaFeature" + }, + "[]" + ], + "path": "x-pack/packages/security/role_management_model/src/kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivileges.getBasePrivileges", + "type": "Function", + "tags": [], + "label": "getBasePrivileges", + "description": [], + "signature": [ + "(entry: ", + { + "pluginId": "@kbn/security-plugin-types-common", + "scope": "common", + "docId": "kibKbnSecurityPluginTypesCommonPluginApi", + "section": "def-common.RoleKibanaPrivilege", + "text": "RoleKibanaPrivilege" + }, + ") => ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.KibanaPrivilege", + "text": "KibanaPrivilege" + }, + "[]" + ], + "path": "x-pack/packages/security/role_management_model/src/kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivileges.getBasePrivileges.$1", + "type": "Object", + "tags": [], + "label": "entry", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-plugin-types-common", + "scope": "common", + "docId": "kibKbnSecurityPluginTypesCommonPluginApi", + "section": "def-common.RoleKibanaPrivilege", + "text": "RoleKibanaPrivilege" + } + ], + "path": "x-pack/packages/security/role_management_model/src/kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivileges.getSecuredFeature", + "type": "Function", + "tags": [], + "label": "getSecuredFeature", + "description": [], + "signature": [ + "(featureId: string) => ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SecuredFeature", + "text": "SecuredFeature" + } + ], + "path": "x-pack/packages/security/role_management_model/src/kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivileges.getSecuredFeature.$1", + "type": "string", + "tags": [], + "label": "featureId", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/packages/security/role_management_model/src/kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivileges.getSecuredFeatures", + "type": "Function", + "tags": [], + "label": "getSecuredFeatures", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SecuredFeature", + "text": "SecuredFeature" + }, + "[]" + ], + "path": "x-pack/packages/security/role_management_model/src/kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivileges.createCollectionFromRoleKibanaPrivileges", + "type": "Function", + "tags": [], + "label": "createCollectionFromRoleKibanaPrivileges", + "description": [], + "signature": [ + "(roleKibanaPrivileges: ", + { + "pluginId": "@kbn/security-plugin-types-common", + "scope": "common", + "docId": "kibKbnSecurityPluginTypesCommonPluginApi", + "section": "def-common.RoleKibanaPrivilege", + "text": "RoleKibanaPrivilege" + }, + "[]) => ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.PrivilegeCollection", + "text": "PrivilegeCollection" + } + ], + "path": "x-pack/packages/security/role_management_model/src/kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.KibanaPrivileges.createCollectionFromRoleKibanaPrivileges.$1", + "type": "Array", + "tags": [], + "label": "roleKibanaPrivileges", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-plugin-types-common", + "scope": "common", + "docId": "kibKbnSecurityPluginTypesCommonPluginApi", + "section": "def-common.RoleKibanaPrivilege", + "text": "RoleKibanaPrivilege" + }, + "[]" + ], + "path": "x-pack/packages/security/role_management_model/src/kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.PrimaryFeaturePrivilege", + "type": "Class", + "tags": [], + "label": "PrimaryFeaturePrivilege", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.PrimaryFeaturePrivilege", + "text": "PrimaryFeaturePrivilege" + }, + " extends ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.KibanaPrivilege", + "text": "KibanaPrivilege" + } + ], + "path": "x-pack/packages/security/role_management_model/src/primary_feature_privilege.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.PrimaryFeaturePrivilege.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/packages/security/role_management_model/src/primary_feature_privilege.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.PrimaryFeaturePrivilege.Unnamed.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/packages/security/role_management_model/src/primary_feature_privilege.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.PrimaryFeaturePrivilege.Unnamed.$2", + "type": "Object", + "tags": [], + "label": "config", + "description": [], + "signature": [ + { + "pluginId": "features", + "scope": "common", + "docId": "kibFeaturesPluginApi", + "section": "def-common.FeatureKibanaPrivileges", + "text": "FeatureKibanaPrivileges" + } + ], + "path": "x-pack/packages/security/role_management_model/src/primary_feature_privilege.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.PrimaryFeaturePrivilege.Unnamed.$3", + "type": "Array", + "tags": [], + "label": "actions", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/packages/security/role_management_model/src/primary_feature_privilege.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.PrimaryFeaturePrivilege.isMinimalFeaturePrivilege", + "type": "Function", + "tags": [], + "label": "isMinimalFeaturePrivilege", + "description": [], + "signature": [ + "() => boolean" + ], + "path": "x-pack/packages/security/role_management_model/src/primary_feature_privilege.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.PrimaryFeaturePrivilege.getMinimalPrivilegeId", + "type": "Function", + "tags": [], + "label": "getMinimalPrivilegeId", + "description": [], + "signature": [ + "() => string" + ], + "path": "x-pack/packages/security/role_management_model/src/primary_feature_privilege.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.PrimaryFeaturePrivilege.requireAllSpaces", + "type": "boolean", + "tags": [], + "label": "requireAllSpaces", + "description": [], + "path": "x-pack/packages/security/role_management_model/src/primary_feature_privilege.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.PrimaryFeaturePrivilege.disabled", + "type": "boolean", + "tags": [], + "label": "disabled", + "description": [], + "path": "x-pack/packages/security/role_management_model/src/primary_feature_privilege.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.PrivilegeCollection", + "type": "Class", + "tags": [], + "label": "PrivilegeCollection", + "description": [], + "path": "x-pack/packages/security/role_management_model/src/privilege_collection.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.PrivilegeCollection.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/packages/security/role_management_model/src/privilege_collection.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.PrivilegeCollection.Unnamed.$1", + "type": "Array", + "tags": [], + "label": "privileges", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.KibanaPrivilege", + "text": "KibanaPrivilege" + }, + "[]" + ], + "path": "x-pack/packages/security/role_management_model/src/privilege_collection.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.PrivilegeCollection.grantsPrivilege", + "type": "Function", + "tags": [], + "label": "grantsPrivilege", + "description": [], + "signature": [ + "(privilege: ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.KibanaPrivilege", + "text": "KibanaPrivilege" + }, + ") => boolean" + ], + "path": "x-pack/packages/security/role_management_model/src/privilege_collection.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.PrivilegeCollection.grantsPrivilege.$1", + "type": "Object", + "tags": [], + "label": "privilege", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.KibanaPrivilege", + "text": "KibanaPrivilege" + } + ], + "path": "x-pack/packages/security/role_management_model/src/privilege_collection.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredFeature", + "type": "Class", + "tags": [], + "label": "SecuredFeature", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SecuredFeature", + "text": "SecuredFeature" + }, + " extends ", + { + "pluginId": "features", + "scope": "common", + "docId": "kibFeaturesPluginApi", + "section": "def-common.KibanaFeature", + "text": "KibanaFeature" + } + ], + "path": "x-pack/packages/security/role_management_model/src/secured_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredFeature.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/packages/security/role_management_model/src/secured_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredFeature.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "config", + "description": [], + "signature": [ + { + "pluginId": "features", + "scope": "common", + "docId": "kibFeaturesPluginApi", + "section": "def-common.KibanaFeatureConfig", + "text": "KibanaFeatureConfig" + } + ], + "path": "x-pack/packages/security/role_management_model/src/secured_feature.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredFeature.Unnamed.$2", + "type": "Object", + "tags": [], + "label": "actionMapping", + "description": [], + "path": "x-pack/packages/security/role_management_model/src/secured_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredFeature.Unnamed.$2.Unnamed", + "type": "IndexSignature", + "tags": [], + "label": "[privilegeId: string]: string[]", + "description": [], + "signature": [ + "[privilegeId: string]: string[]" + ], + "path": "x-pack/packages/security/role_management_model/src/secured_feature.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredFeature.getPrivilegesTooltip", + "type": "Function", + "tags": [], + "label": "getPrivilegesTooltip", + "description": [], + "signature": [ + "() => string | undefined" + ], + "path": "x-pack/packages/security/role_management_model/src/secured_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredFeature.getAllPrivileges", + "type": "Function", + "tags": [], + "label": "getAllPrivileges", + "description": [], + "signature": [ + "() => (", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.PrimaryFeaturePrivilege", + "text": "PrimaryFeaturePrivilege" + }, + " | ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SubFeaturePrivilege", + "text": "SubFeaturePrivilege" + }, + ")[]" + ], + "path": "x-pack/packages/security/role_management_model/src/secured_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredFeature.getPrimaryFeaturePrivileges", + "type": "Function", + "tags": [], + "label": "getPrimaryFeaturePrivileges", + "description": [], + "signature": [ + "({ includeMinimalFeaturePrivileges }?: { includeMinimalFeaturePrivileges: boolean; }) => ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.PrimaryFeaturePrivilege", + "text": "PrimaryFeaturePrivilege" + }, + "[]" + ], + "path": "x-pack/packages/security/role_management_model/src/secured_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredFeature.getPrimaryFeaturePrivileges.$1", + "type": "Object", + "tags": [], + "label": "{ includeMinimalFeaturePrivileges }", + "description": [], + "path": "x-pack/packages/security/role_management_model/src/secured_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredFeature.getPrimaryFeaturePrivileges.$1.includeMinimalFeaturePrivileges", + "type": "boolean", + "tags": [], + "label": "includeMinimalFeaturePrivileges", + "description": [], + "path": "x-pack/packages/security/role_management_model/src/secured_feature.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredFeature.getMinimalFeaturePrivileges", + "type": "Function", + "tags": [], + "label": "getMinimalFeaturePrivileges", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.PrimaryFeaturePrivilege", + "text": "PrimaryFeaturePrivilege" + }, + "[]" + ], + "path": "x-pack/packages/security/role_management_model/src/secured_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredFeature.getSubFeaturePrivileges", + "type": "Function", + "tags": [], + "label": "getSubFeaturePrivileges", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SubFeaturePrivilege", + "text": "SubFeaturePrivilege" + }, + "[]" + ], + "path": "x-pack/packages/security/role_management_model/src/secured_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredFeature.getSubFeatures", + "type": "Function", + "tags": [], + "label": "getSubFeatures", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SecuredSubFeature", + "text": "SecuredSubFeature" + }, + "[]" + ], + "path": "x-pack/packages/security/role_management_model/src/secured_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredSubFeature", + "type": "Class", + "tags": [], + "label": "SecuredSubFeature", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SecuredSubFeature", + "text": "SecuredSubFeature" + }, + " extends ", + { + "pluginId": "features", + "scope": "common", + "docId": "kibFeaturesPluginApi", + "section": "def-common.SubFeature", + "text": "SubFeature" + } + ], + "path": "x-pack/packages/security/role_management_model/src/secured_sub_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredSubFeature.privileges", + "type": "Array", + "tags": [], + "label": "privileges", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SubFeaturePrivilege", + "text": "SubFeaturePrivilege" + }, + "[]" + ], + "path": "x-pack/packages/security/role_management_model/src/secured_sub_feature.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredSubFeature.privilegesTooltip", + "type": "string", + "tags": [], + "label": "privilegesTooltip", + "description": [], + "path": "x-pack/packages/security/role_management_model/src/secured_sub_feature.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredSubFeature.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/packages/security/role_management_model/src/secured_sub_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredSubFeature.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "config", + "description": [], + "signature": [ + { + "pluginId": "features", + "scope": "common", + "docId": "kibFeaturesPluginApi", + "section": "def-common.SubFeatureConfig", + "text": "SubFeatureConfig" + } + ], + "path": "x-pack/packages/security/role_management_model/src/secured_sub_feature.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredSubFeature.Unnamed.$2", + "type": "Object", + "tags": [], + "label": "actionMapping", + "description": [], + "path": "x-pack/packages/security/role_management_model/src/secured_sub_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredSubFeature.Unnamed.$2.Unnamed", + "type": "IndexSignature", + "tags": [], + "label": "[privilegeId: string]: string[]", + "description": [], + "signature": [ + "[privilegeId: string]: string[]" + ], + "path": "x-pack/packages/security/role_management_model/src/secured_sub_feature.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredSubFeature.getPrivilegeGroups", + "type": "Function", + "tags": [], + "label": "getPrivilegeGroups", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SubFeaturePrivilegeGroup", + "text": "SubFeaturePrivilegeGroup" + }, + "[]" + ], + "path": "x-pack/packages/security/role_management_model/src/secured_sub_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredSubFeature.privilegeIterator", + "type": "Function", + "tags": [], + "label": "privilegeIterator", + "description": [], + "signature": [ + "({ predicate, }?: { predicate?: ((privilege: ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SubFeaturePrivilege", + "text": "SubFeaturePrivilege" + }, + ", feature: ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SecuredSubFeature", + "text": "SecuredSubFeature" + }, + ") => boolean) | undefined; }) => IterableIterator<", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SubFeaturePrivilege", + "text": "SubFeaturePrivilege" + }, + ">" + ], + "path": "x-pack/packages/security/role_management_model/src/secured_sub_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredSubFeature.privilegeIterator.$1", + "type": "Object", + "tags": [], + "label": "{\n predicate = () => true,\n }", + "description": [], + "path": "x-pack/packages/security/role_management_model/src/secured_sub_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredSubFeature.privilegeIterator.$1.predicate", + "type": "Function", + "tags": [], + "label": "predicate", + "description": [], + "signature": [ + "((privilege: ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SubFeaturePrivilege", + "text": "SubFeaturePrivilege" + }, + ", feature: ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SecuredSubFeature", + "text": "SecuredSubFeature" + }, + ") => boolean) | undefined" + ], + "path": "x-pack/packages/security/role_management_model/src/secured_sub_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredSubFeature.privilegeIterator.$1.predicate.$1", + "type": "Object", + "tags": [], + "label": "privilege", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SubFeaturePrivilege", + "text": "SubFeaturePrivilege" + } + ], + "path": "x-pack/packages/security/role_management_model/src/secured_sub_feature.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredSubFeature.privilegeIterator.$1.predicate.$2", + "type": "Object", + "tags": [], + "label": "feature", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SecuredSubFeature", + "text": "SecuredSubFeature" + } + ], + "path": "x-pack/packages/security/role_management_model/src/secured_sub_feature.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ] + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SecuredSubFeature.getDescription", + "type": "Function", + "tags": [], + "label": "getDescription", + "description": [], + "signature": [ + "() => string" + ], + "path": "x-pack/packages/security/role_management_model/src/secured_sub_feature.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SubFeaturePrivilege", + "type": "Class", + "tags": [], + "label": "SubFeaturePrivilege", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SubFeaturePrivilege", + "text": "SubFeaturePrivilege" + }, + " extends ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.KibanaPrivilege", + "text": "KibanaPrivilege" + } + ], + "path": "x-pack/packages/security/role_management_model/src/sub_feature_privilege.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SubFeaturePrivilege.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/packages/security/role_management_model/src/sub_feature_privilege.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SubFeaturePrivilege.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "subPrivilegeConfig", + "description": [], + "signature": [ + { + "pluginId": "features", + "scope": "common", + "docId": "kibFeaturesPluginApi", + "section": "def-common.SubFeaturePrivilegeConfig", + "text": "SubFeaturePrivilegeConfig" + } + ], + "path": "x-pack/packages/security/role_management_model/src/sub_feature_privilege.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SubFeaturePrivilege.Unnamed.$2", + "type": "Array", + "tags": [], + "label": "actions", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/packages/security/role_management_model/src/sub_feature_privilege.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SubFeaturePrivilege.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "x-pack/packages/security/role_management_model/src/sub_feature_privilege.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SubFeaturePrivilege.disabled", + "type": "CompoundType", + "tags": [], + "label": "disabled", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/packages/security/role_management_model/src/sub_feature_privilege.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SubFeaturePrivilege.requireAllSpaces", + "type": "boolean", + "tags": [], + "label": "requireAllSpaces", + "description": [], + "path": "x-pack/packages/security/role_management_model/src/sub_feature_privilege.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SubFeaturePrivilegeGroup", + "type": "Class", + "tags": [], + "label": "SubFeaturePrivilegeGroup", + "description": [], + "path": "x-pack/packages/security/role_management_model/src/sub_feature_privilege_group.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SubFeaturePrivilegeGroup.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/packages/security/role_management_model/src/sub_feature_privilege_group.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SubFeaturePrivilegeGroup.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "config", + "description": [], + "signature": [ + { + "pluginId": "features", + "scope": "common", + "docId": "kibFeaturesPluginApi", + "section": "def-common.SubFeaturePrivilegeGroupConfig", + "text": "SubFeaturePrivilegeGroupConfig" + } + ], + "path": "x-pack/packages/security/role_management_model/src/sub_feature_privilege_group.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SubFeaturePrivilegeGroup.Unnamed.$2", + "type": "Object", + "tags": [], + "label": "actionMapping", + "description": [], + "path": "x-pack/packages/security/role_management_model/src/sub_feature_privilege_group.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SubFeaturePrivilegeGroup.Unnamed.$2.Unnamed", + "type": "IndexSignature", + "tags": [], + "label": "[privilegeId: string]: string[]", + "description": [], + "signature": [ + "[privilegeId: string]: string[]" + ], + "path": "x-pack/packages/security/role_management_model/src/sub_feature_privilege_group.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SubFeaturePrivilegeGroup.groupType", + "type": "CompoundType", + "tags": [], + "label": "groupType", + "description": [], + "signature": [ + "\"mutually_exclusive\" | \"independent\"" + ], + "path": "x-pack/packages/security/role_management_model/src/sub_feature_privilege_group.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.SubFeaturePrivilegeGroup.privileges", + "type": "Array", + "tags": [], + "label": "privileges", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SubFeaturePrivilege", + "text": "SubFeaturePrivilege" + }, + "[]" + ], + "path": "x-pack/packages/security/role_management_model/src/sub_feature_privilege_group.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "functions": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.isGlobalPrivilegeDefinition", + "type": "Function", + "tags": [], + "label": "isGlobalPrivilegeDefinition", + "description": [ + "\nDetermines if the passed privilege spec defines global privileges." + ], + "signature": [ + "(privilegeSpec: ", + { + "pluginId": "@kbn/security-plugin-types-common", + "scope": "common", + "docId": "kibKbnSecurityPluginTypesCommonPluginApi", + "section": "def-common.RoleKibanaPrivilege", + "text": "RoleKibanaPrivilege" + }, + ") => boolean" + ], + "path": "x-pack/packages/security/role_management_model/src/kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-role-management-model", + "id": "def-common.isGlobalPrivilegeDefinition.$1", + "type": "Object", + "tags": [], + "label": "privilegeSpec", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-plugin-types-common", + "scope": "common", + "docId": "kibKbnSecurityPluginTypesCommonPluginApi", + "section": "def-common.RoleKibanaPrivilege", + "text": "RoleKibanaPrivilege" + } + ], + "path": "x-pack/packages/security/role_management_model/src/kibana_privileges.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_security_role_management_model.mdx b/api_docs/kbn_security_role_management_model.mdx new file mode 100644 index 0000000000000..531a52a37c5cd --- /dev/null +++ b/api_docs/kbn_security_role_management_model.mdx @@ -0,0 +1,33 @@ +--- +#### +#### 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: kibKbnSecurityRoleManagementModelPluginApi +slug: /kibana-dev-docs/api/kbn-security-role-management-model +title: "@kbn/security-role-management-model" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/security-role-management-model plugin +date: 2024-08-23 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-role-management-model'] +--- +import kbnSecurityRoleManagementModelObj from './kbn_security_role_management_model.devdocs.json'; + + + +Contact [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 75 | 0 | 74 | 0 | + +## Common + +### Functions + + +### Classes + + diff --git a/api_docs/kbn_security_solution_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index 278b84dfac104..31306e2d72aab 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 7a53304353668..31137a5d7d719 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-08-21 +date: 2024-08-23 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 1ffc44303ab4f..eb519bebe55ae 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-08-21 +date: 2024-08-23 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 9173fb2788412..2258cc7d71131 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-08-21 +date: 2024-08-23 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 bc0eea8367c75..ac60145edc58d 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-08-21 +date: 2024-08-23 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 5666f2cf57549..4950f118e8ee7 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-08-21 +date: 2024-08-23 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 6f16c1747d5fd..5061443dec2a1 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-08-21 +date: 2024-08-23 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 14ffa1447d3a9..c58ff670ae158 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-08-21 +date: 2024-08-23 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 d1917c6606aca..6898b0286e09d 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-08-21 +date: 2024-08-23 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.devdocs.json b/api_docs/kbn_securitysolution_exception_list_components.devdocs.json index fa61ae7f0558f..c74cbf9537ed0 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.devdocs.json +++ b/api_docs/kbn_securitysolution_exception_list_components.devdocs.json @@ -851,7 +851,7 @@ "label": "formattedDateComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"path\" | \"code\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"form\" | \"line\" | \"rect\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\"" + "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"path\" | \"form\" | \"line\" | \"rect\" | \"code\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/meta/index.tsx", "deprecated": false, @@ -865,7 +865,7 @@ "label": "securityLinkAnchorComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"path\" | \"code\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"form\" | \"line\" | \"rect\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\"" + "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"path\" | \"form\" | \"line\" | \"rect\" | \"code\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/meta/index.tsx", "deprecated": false, @@ -1004,7 +1004,7 @@ "label": "securityLinkAnchorComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"path\" | \"code\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"form\" | \"line\" | \"rect\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\"" + "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"path\" | \"form\" | \"line\" | \"rect\" | \"code\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/exception_item_card.tsx", "deprecated": false, @@ -1018,7 +1018,7 @@ "label": "formattedDateComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"path\" | \"code\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"form\" | \"line\" | \"rect\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\"" + "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"path\" | \"form\" | \"line\" | \"rect\" | \"code\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/exception_item_card.tsx", "deprecated": false, @@ -1144,7 +1144,7 @@ "label": "showValueListModal", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"path\" | \"code\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"form\" | \"line\" | \"rect\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\"" + "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"path\" | \"form\" | \"line\" | \"rect\" | \"code\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/exception_item_card.tsx", "deprecated": false, diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index 5de45f87985c7..ef96444422ce2 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-08-21 +date: 2024-08-23 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_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 13792167dd3e3..7278c5f686b04 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 541df0a28e1a7..390a0ec22753f 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-08-21 +date: 2024-08-23 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 d9e9fd7c027e1..224cf584847f1 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-08-21 +date: 2024-08-23 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 8a535c6146e86..318bb58a09648 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-08-21 +date: 2024-08-23 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 278313065386b..74ee5ce8c2bfd 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 4e41c7d4a68c5..657f5f85e2391 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-08-21 +date: 2024-08-23 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 324d21dbb3445..c99f66064bee1 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-08-21 +date: 2024-08-23 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 a70620893f5a5..e9174cdd344dc 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-08-21 +date: 2024-08-23 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 ad048a771e38b..d7d376d363d78 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 d90b7a297a4ef..608ec97b54c9e 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-08-21 +date: 2024-08-23 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 151039f93bdd5..aa444eabe5931 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-08-21 +date: 2024-08-23 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 58072807f23fc..831e018a82546 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 562f92376a4bb..9921697008aad 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-08-21 +date: 2024-08-23 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 93d27fa11e926..5b09548b80c89 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index 2967f6f57d06a..a734378af95b4 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.devdocs.json b/api_docs/kbn_server_route_repository_utils.devdocs.json index 8795640805fec..b5c3169828c1a 100644 --- a/api_docs/kbn_server_route_repository_utils.devdocs.json +++ b/api_docs/kbn_server_route_repository_utils.devdocs.json @@ -596,7 +596,7 @@ "label": "ZodParamsObject", "description": [], "signature": [ - "Zod.ZodObject<{ path?: any; query?: any; body?: any; }, Zod.UnknownKeysParam, Zod.ZodTypeAny, { query?: any; path?: any; body?: any; }, { query?: any; path?: any; body?: any; }>" + "Zod.ZodObject<{ path?: any; query?: any; body?: any; }, Zod.UnknownKeysParam, Zod.ZodTypeAny, { query?: any; body?: any; path?: any; }, { query?: any; body?: any; path?: any; }>" ], "path": "packages/kbn-server-route-repository-utils/src/typings.ts", "deprecated": false, diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index db3a181323f13..20bf284859ca7 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index ac01f02a28f25..1de3929c01581 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-08-21 +date: 2024-08-23 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 b16e7a0074fe2..b09ba0b4043c3 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-08-21 +date: 2024-08-23 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 7204f3519c4f6..7247c3f389f9c 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-08-21 +date: 2024-08-23 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 366f7d5cc4fc7..3e388102ab34b 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-08-21 +date: 2024-08-23 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 fc92d4f4203a6..3a4db5270ae9f 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-08-21 +date: 2024-08-23 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 efcc84fa51b4e..b158030222ea1 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-08-21 +date: 2024-08-23 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 dbeb733590223..a03b47edc4bb2 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-08-21 +date: 2024-08-23 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 47477c645954e..f05ca50ae482b 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index a54f78b7e058e..82acd79904a3a 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 505d2c895275e..8cd6d51f54b2c 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-08-21 +date: 2024-08-23 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 a81055b566901..2d6623fe92ccc 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-08-21 +date: 2024-08-23 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 e8e1831859243..9cca26e4eaa0f 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 9d0daa1cbe18a..0312bac82fe60 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index 6200e877954c8..88a54bb14a57b 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index db132252dd765..eca64b8995263 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-08-21 +date: 2024-08-23 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 bef75a2b99bdd..7a0073e11be1a 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-08-21 +date: 2024-08-23 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 ad3dbb869fbfc..254c04ad7083d 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 c56b7a96f91ba..ffed47c1c4737 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 7df9e9328a200..b385d83a9a5f5 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-08-21 +date: 2024-08-23 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 7f3c15d6d1e04..1c63aa07fbf4b 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-08-21 +date: 2024-08-23 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 18590d719f896..878bb783e079a 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-08-21 +date: 2024-08-23 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 25cb55a83cc07..a331639c4ffbb 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-08-21 +date: 2024-08-23 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 4a622d02670cd..8bb41978cf5f5 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-08-21 +date: 2024-08-23 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 e4c393c815e07..f20211955ad79 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 772aaca058201..4ab53420a9176 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-08-21 +date: 2024-08-23 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 cc6f21ca67afd..de459da2915c8 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 b90f43ba70a53..90f4086d6670f 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-08-21 +date: 2024-08-23 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 ac51e9a5b82e1..414dec3c3ed76 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 7c58527f46a95..ed53504957d15 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-08-21 +date: 2024-08-23 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 aa954c5c7d06f..2b3fb4957d4d7 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 11a7a53e03d1b..739e445148849 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-08-21 +date: 2024-08-23 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 f200b957db555..e21d27e4abb42 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 9ea31ddff9a46..c8fc18951e04f 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-08-21 +date: 2024-08-23 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 7f7df58deca94..d59bd03a1c2a6 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-08-21 +date: 2024-08-23 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 3f13def309d91..c9d6e5c85886b 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 61f47a23bc521..f3b6efaf2fb4f 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 022fa612c9698..b7ea8ed510c11 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-08-21 +date: 2024-08-23 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 883458daf8d65..7f3f11fb29dde 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-08-21 +date: 2024-08-23 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 4f874ae879981..23e8dd74d96d4 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 127802b5df9a0..5862bf0cdec99 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-08-21 +date: 2024-08-23 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 d72e647a843be..cbecc936edfae 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-08-21 +date: 2024-08-23 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 2a76f496c7595..2b1964ae9fbd6 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-08-21 +date: 2024-08-23 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 3267493a103dc..59e5921d23043 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-08-21 +date: 2024-08-23 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 642eccde88081..3380fdf3c2038 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index 8d994fd14dc26..576eee12e9906 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_table_persist.devdocs.json b/api_docs/kbn_shared_ux_table_persist.devdocs.json new file mode 100644 index 0000000000000..470b02bafd6c9 --- /dev/null +++ b/api_docs/kbn_shared_ux_table_persist.devdocs.json @@ -0,0 +1,86 @@ +{ + "id": "@kbn/shared-ux-table-persist", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/shared-ux-table-persist", + "id": "def-common.useEuiTablePersist", + "type": "Function", + "tags": [], + "label": "useEuiTablePersist", + "description": [ + "\nA hook that stores and retrieves from local storage the table page size and sort criteria.\nReturns the persisting page size and sort and the onTableChange handler that should be passed\nas props to an Eui table component." + ], + "signature": [ + "({ tableId, customOnTableChange, initialSort, initialPageSize, pageSizeOptions, }: ", + "EuiTablePersistProps", + ") => { pageSize: number; sorting: boolean | { sort: ", + "PropertySort", + "; }; onTableChange: (nextValues: ", + "Criteria", + ") => void; }" + ], + "path": "packages/shared-ux/table_persist/src/use_table_persist.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/shared-ux-table-persist", + "id": "def-common.useEuiTablePersist.$1", + "type": "Object", + "tags": [], + "label": "{\n tableId,\n customOnTableChange,\n initialSort,\n initialPageSize,\n pageSizeOptions,\n}", + "description": [], + "signature": [ + "EuiTablePersistProps", + "" + ], + "path": "packages/shared-ux/table_persist/src/use_table_persist.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/shared-ux-table-persist", + "id": "def-common.DEFAULT_PAGE_SIZE_OPTIONS", + "type": "Array", + "tags": [], + "label": "DEFAULT_PAGE_SIZE_OPTIONS", + "description": [], + "signature": [ + "number[]" + ], + "path": "packages/shared-ux/table_persist/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_shared_ux_table_persist.mdx b/api_docs/kbn_shared_ux_table_persist.mdx new file mode 100644 index 0000000000000..33f2a75eeb912 --- /dev/null +++ b/api_docs/kbn_shared_ux_table_persist.mdx @@ -0,0 +1,33 @@ +--- +#### +#### 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: kibKbnSharedUxTablePersistPluginApi +slug: /kibana-dev-docs/api/kbn-shared-ux-table-persist +title: "@kbn/shared-ux-table-persist" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/shared-ux-table-persist plugin +date: 2024-08-23 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-table-persist'] +--- +import kbnSharedUxTablePersistObj from './kbn_shared_ux_table_persist.devdocs.json'; + + + +Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 3 | 0 | 2 | 2 | + +## Common + +### Functions + + +### Consts, variables and types + + diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 9af5b06421230..d5c9707572867 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-08-21 +date: 2024-08-23 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 5dacd4fc1ae77..8d1627f084c4a 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-08-21 +date: 2024-08-23 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 85a8f3c1b983d..677105b6c7bd9 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index 290c576a34cee..66e63ac694980 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 038f512b3a661..5ce583bfa71c4 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-08-21 +date: 2024-08-23 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 cc3613a140aa5..e298f808ea98c 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-08-21 +date: 2024-08-23 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 ad98f5cac7cce..2546fa95132e7 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index a11fd099d35f9..9926f39666033 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index 2da17c9203aac..ef4e16584ffe4 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index db6bca2a9aee6..447d21aa5ec39 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-08-21 +date: 2024-08-23 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 23535601ecf49..54f5af848ac5b 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index ad9689ea9819d..49cadfd214ea4 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-eui-helpers'] --- import kbnTestEuiHelpersObj from './kbn_test_eui_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 57183a2789b00..3b9cc45e919d6 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-08-21 +date: 2024-08-23 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 870871ae2fe05..8dceb39f8565f 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-08-21 +date: 2024-08-23 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 d58748c670f06..3ec2d1a5a745d 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index 2c21e29adfeb3..b11747c1501bd 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/timerange'] --- import kbnTimerangeObj from './kbn_timerange.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.devdocs.json b/api_docs/kbn_tooling_log.devdocs.json index 14df922644371..6321db886076e 100644 --- a/api_docs/kbn_tooling_log.devdocs.json +++ b/api_docs/kbn_tooling_log.devdocs.json @@ -620,7 +620,7 @@ "tags": [], "label": "write", "description": [ - "\nCalled by ToolingLog, extends messages with the source if message includes one." + "\nCalled by ToolingLog, extends messages with the source and context if message include it." ], "signature": [ "(msg: ", @@ -1086,6 +1086,22 @@ "path": "packages/kbn-tooling-log/src/message.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/tooling-log", + "id": "def-common.Message.context", + "type": "string", + "tags": [], + "label": "context", + "description": [ + "an identifier of the logging entity" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-tooling-log/src/message.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -1139,6 +1155,22 @@ "path": "packages/kbn-tooling-log/src/tooling_log.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/tooling-log", + "id": "def-common.ToolingLogOptions.context", + "type": "string", + "tags": [], + "label": "context", + "description": [ + "\nA string, conveniently the name of the script,\nthat will be prepended to log messages.\nCan be useful to identify which entity is emitting the log." + ], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-tooling-log/src/tooling_log.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 37a23f69529bb..27f6b408c8df7 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kiban | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 72 | 0 | 55 | 0 | +| 74 | 0 | 55 | 0 | ## Common diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index 947c3e02540fc..a51c1b6173e05 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index 94c8a8b719c19..fce78359050f7 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 2b7f6d5f3d89e..6caf3ac9d3184 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-08-21 +date: 2024-08-23 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 faace1b7ea078..4e891254e3d78 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-08-21 +date: 2024-08-23 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 79475c6855d73..675e22d08092b 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-08-21 +date: 2024-08-23 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 262fee9c702a3..bb0894d12d32a 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-08-21 +date: 2024-08-23 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 14e57f7f6309e..948d6a0c1dbab 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-08-21 +date: 2024-08-23 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 afc67cc9c1d89..7deda8b6ae014 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-08-21 +date: 2024-08-23 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 ee8b92cdabc39..267888acc285f 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-08-21 +date: 2024-08-23 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 af9313eb31b68..9b11af1fa6cf7 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index e842ce58db5da..2abf40ca1dace 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index 7b2ab5c4ac96f..7a7293261be72 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 08ba8984416c2..d1c86be4b386c 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-08-21 +date: 2024-08-23 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 02d8f46c40852..b81852c5e29c7 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-08-21 +date: 2024-08-23 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 60d2c8218ba25..07dbbf4a5d935 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-08-21 +date: 2024-08-23 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 5951bf664db7d..c64f2dbbf02e7 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-08-21 +date: 2024-08-23 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 1f9c43a15bea6..75001a6a02598 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-08-21 +date: 2024-08-23 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 12aa6f1b3a1c8..ba20658c91538 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index 310f6f29748e5..4b0832d360457 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index e474d63aaf079..a19da2fa87b9c 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-08-21 +date: 2024-08-23 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 3f203d121032e..48fdc9abd3372 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod.devdocs.json b/api_docs/kbn_zod.devdocs.json index 7687287d2a6dd..4103b5ce494a8 100644 --- a/api_docs/kbn_zod.devdocs.json +++ b/api_docs/kbn_zod.devdocs.json @@ -19062,7 +19062,7 @@ "label": "UnknownKeysParam", "description": [], "signature": [ - "\"passthrough\" | \"strict\" | \"strip\"" + "\"strict\" | \"passthrough\" | \"strip\"" ], "path": "node_modules/zod/lib/types.d.ts", "deprecated": false, diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index 5059cfb61854a..ff94665fc5d89 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index e7f1df7f1af4d..2f47511afeabc 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 7fc5d5ace2284..31e2451f79511 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-08-21 +date: 2024-08-23 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 51f8c2423261f..5733095c33f19 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-08-21 +date: 2024-08-23 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 c43e1db72b313..ffdad60028e3f 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-08-21 +date: 2024-08-23 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 0e890beee922e..7f151cb600d5a 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-08-21 +date: 2024-08-23 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 4e115fd177835..85a362470f83b 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-08-21 +date: 2024-08-23 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 154ac0c74d58f..a78936e3541ea 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-08-21 +date: 2024-08-23 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 c4fa9d83a5b99..414031e0a16ca 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-08-21 +date: 2024-08-23 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 a326e280cc72b..4b2b5ca92e7da 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-08-21 +date: 2024-08-23 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 01027d1dd7994..57ec05e6a20a2 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-08-21 +date: 2024-08-23 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 a9f139124e9a0..2e6361544f03c 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index a59305f9809c5..17648f309bf24 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.devdocs.json b/api_docs/logs_explorer.devdocs.json index 79932865de8a7..dc0818e98bd7f 100644 --- a/api_docs/logs_explorer.devdocs.json +++ b/api_docs/logs_explorer.devdocs.json @@ -355,6 +355,8 @@ "<(", "WithDataSourceSelection", " & ", + "WithAllSelection", + " & ", "WithControlPanels", " & ", { @@ -375,6 +377,8 @@ ") | (", "WithDataSourceSelection", " & ", + "WithAllSelection", + " & ", "WithControlPanels", " & ", { @@ -399,6 +403,8 @@ ") | (", "WithDataSourceSelection", " & ", + "WithAllSelection", + " & ", "WithControlPanels", " & ", { @@ -421,6 +427,8 @@ ") | (", "WithDataSourceSelection", " & ", + "WithAllSelection", + " & ", "WithControlPanelGroupAPI", " & ", "WithControlPanels", @@ -499,6 +507,8 @@ "<(", "WithDataSourceSelection", " & ", + "WithAllSelection", + " & ", "WithControlPanels", " & ", { @@ -519,6 +529,8 @@ ") | (", "WithDataSourceSelection", " & ", + "WithAllSelection", + " & ", "WithControlPanels", " & ", { @@ -543,6 +555,8 @@ ") | (", "WithDataSourceSelection", " & ", + "WithAllSelection", + " & ", "WithControlPanels", " & ", { @@ -565,6 +579,8 @@ ") | (", "WithDataSourceSelection", " & ", + "WithAllSelection", + " & ", "WithControlPanelGroupAPI", " & ", "WithControlPanels", @@ -698,15 +714,7 @@ "section": "def-public.LogsExplorerCustomizations", "text": "LogsExplorerCustomizations" }, - " | undefined; initialState?: ", - { - "pluginId": "logsExplorer", - "scope": "public", - "docId": "kibLogsExplorerPluginApi", - "section": "def-public.LogsExplorerPublicStateUpdate", - "text": "LogsExplorerPublicStateUpdate" - }, - " | undefined; }) => Promise<", + " | undefined; initialState?: InitialState | undefined; }) => Promise<", { "pluginId": "logsExplorer", "scope": "public", @@ -737,15 +745,7 @@ "section": "def-public.LogsExplorerCustomizations", "text": "LogsExplorerCustomizations" }, - " | undefined; initialState?: ", - { - "pluginId": "logsExplorer", - "scope": "public", - "docId": "kibLogsExplorerPluginApi", - "section": "def-public.LogsExplorerPublicStateUpdate", - "text": "LogsExplorerPublicStateUpdate" - }, - " | undefined; }" + " | undefined; initialState?: InitialState | undefined; }" ], "path": "x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts", "deprecated": false, @@ -765,6 +765,8 @@ "(", "WithDataSourceSelection", " & ", + "WithAllSelection", + " & ", "WithControlPanels", " & ", { @@ -785,6 +787,8 @@ ") | (", "WithDataSourceSelection", " & ", + "WithAllSelection", + " & ", "WithControlPanels", " & ", { @@ -809,6 +813,8 @@ ") | (", "WithDataSourceSelection", " & ", + "WithAllSelection", + " & ", "WithControlPanels", " & ", { @@ -831,6 +837,8 @@ ") | (", "WithDataSourceSelection", " & ", + "WithAllSelection", + " & ", "WithControlPanelGroupAPI", " & ", "WithControlPanels", @@ -942,7 +950,29 @@ "initialIsOpen": false } ], - "objects": [], + "objects": [ + { + "parentPluginId": "logsExplorer", + "id": "def-public.DEFAULT_ALL_SELECTION", + "type": "Object", + "tags": [], + "label": "DEFAULT_ALL_SELECTION", + "description": [], + "signature": [ + { + "pluginId": "logsExplorer", + "scope": "common", + "docId": "kibLogsExplorerPluginApi", + "section": "def-common.AllDatasetSelection", + "text": "AllDatasetSelection" + } + ], + "path": "x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/default_all_selection.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], "setup": { "parentPluginId": "logsExplorer", "id": "def-public.LogsExplorerPluginSetup", @@ -1017,15 +1047,7 @@ "section": "def-public.LogsExplorerCustomizations", "text": "LogsExplorerCustomizations" }, - " | undefined; initialState?: ", - { - "pluginId": "logsExplorer", - "scope": "public", - "docId": "kibLogsExplorerPluginApi", - "section": "def-public.LogsExplorerPublicStateUpdate", - "text": "LogsExplorerPublicStateUpdate" - }, - " | undefined; }) => Promise<", + " | undefined; initialState?: InitialState | undefined; }) => Promise<", { "pluginId": "logsExplorer", "scope": "public", @@ -1056,15 +1078,7 @@ "section": "def-public.LogsExplorerCustomizations", "text": "LogsExplorerCustomizations" }, - " | undefined; initialState?: ", - { - "pluginId": "logsExplorer", - "scope": "public", - "docId": "kibLogsExplorerPluginApi", - "section": "def-public.LogsExplorerPublicStateUpdate", - "text": "LogsExplorerPublicStateUpdate" - }, - " | undefined; }" + " | undefined; initialState?: InitialState | undefined; }" ], "path": "x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts", "deprecated": false, @@ -1172,6 +1186,22 @@ "children": [], "returnComment": [] }, + { + "parentPluginId": "logsExplorer", + "id": "def-common.AllDatasetSelection.getLocatorPlainSelection", + "type": "Function", + "tags": [], + "label": "getLocatorPlainSelection", + "description": [], + "signature": [ + "() => { selectionType: \"all\"; }" + ], + "path": "x-pack/plugins/observability_solution/logs_explorer/common/data_source_selection/all_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, { "parentPluginId": "logsExplorer", "id": "def-common.AllDatasetSelection.create", @@ -1180,7 +1210,7 @@ "label": "create", "description": [], "signature": [ - "() => ", + "({ indices }: { indices: string; }) => ", { "pluginId": "logsExplorer", "scope": "common", @@ -1192,7 +1222,32 @@ "path": "x-pack/plugins/observability_solution/logs_explorer/common/data_source_selection/all_dataset_selection.ts", "deprecated": false, "trackAdoption": false, - "children": [], + "children": [ + { + "parentPluginId": "logsExplorer", + "id": "def-common.AllDatasetSelection.create.$1", + "type": "Object", + "tags": [], + "label": "{ indices }", + "description": [], + "path": "x-pack/plugins/observability_solution/logs_explorer/common/data_source_selection/all_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logsExplorer", + "id": "def-common.AllDatasetSelection.create.$1.indices", + "type": "string", + "tags": [], + "label": "indices", + "description": [], + "path": "x-pack/plugins/observability_solution/logs_explorer/common/data_source_selection/all_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], "returnComment": [] } ], @@ -1564,7 +1619,15 @@ "Branded", "; } & { title?: string | undefined; }; }; }) => ", + ">; } & { title?: string | undefined; }; }; }, allSelection: ", + { + "pluginId": "logsExplorer", + "scope": "common", + "docId": "kibLogsExplorerPluginApi", + "section": "def-common.AllDatasetSelection", + "text": "AllDatasetSelection" + }, + ") => ", { "pluginId": "logsExplorer", "scope": "common", @@ -1617,6 +1680,27 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "logsExplorer", + "id": "def-common.hydrateDataSourceSelection.$2", + "type": "Object", + "tags": [], + "label": "allSelection", + "description": [], + "signature": [ + { + "pluginId": "logsExplorer", + "scope": "common", + "docId": "kibLogsExplorerPluginApi", + "section": "def-common.AllDatasetSelection", + "text": "AllDatasetSelection" + } + ], + "path": "x-pack/plugins/observability_solution/logs_explorer/common/data_source_selection/hydrate_data_source_selection.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [], diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 0d9fa193adec9..c1db007d2bd12 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 117 | 4 | 117 | 22 | +| 122 | 4 | 122 | 23 | ## Client @@ -31,6 +31,9 @@ Contact [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux ### Start +### Objects + + ### Functions diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index e5d884d8bee1e..26a9dabfba0d7 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-08-21 +date: 2024-08-23 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 c7463ba1c9011..e0987b7750b54 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-08-21 +date: 2024-08-23 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 204a29bf6ee59..81bf336ba778e 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-08-21 +date: 2024-08-23 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 96059eb6083ea..f1630bb32fb06 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-08-21 +date: 2024-08-23 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 5e4535366a663..f6ec0aeef0bca 100644 --- a/api_docs/metrics_data_access.devdocs.json +++ b/api_docs/metrics_data_access.devdocs.json @@ -624,9 +624,14 @@ "label": "networkTraffic", "description": [], "signature": [ - "(id: string, field: string) => { [x: string]: { [x: string]: { field: string; } | undefined; } | { percentiles: { field: string; percents: number[]; }; } | { bucket_script: { buckets_path: { [x: string]: string; }; script: { source: string; lang: \"painless\" | \"expression\"; }; } & { gap_policy?: \"insert_zeros\" | \"skip\" | undefined; }; } | { cumulative_sum: { buckets_path: string; }; } | { derivative: { buckets_path: string; gap_policy: \"insert_zeros\" | \"skip\"; unit: string; }; } | { sum_bucket: { buckets_path: string; }; } | ", - "SnapshotTermsWithAggregation", - " | { cardinality: { field?: string | undefined; }; } | { top_metrics: { metrics: { field: string; }[] | { field: string; }; } & { size?: number | undefined; sort?: { [x: string]: \"asc\" | \"desc\"; } | undefined; }; } | { filter: { exists: { field: string; }; }; aggs: { period: { max: { field: string; }; }; }; }; }" + "(id: string, field: string) => ", + { + "pluginId": "metricsDataAccess", + "scope": "common", + "docId": "kibMetricsDataAccessPluginApi", + "section": "def-common.MetricsUIAggregation", + "text": "MetricsUIAggregation" + } ], "path": "x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/shared/metrics/snapshot/network_traffic.ts", "deprecated": false, @@ -667,7 +672,49 @@ "initialIsOpen": false } ], - "interfaces": [], + "interfaces": [ + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPIMetric", + "type": "Interface", + "tags": [], + "label": "MetricsAPIMetric", + "description": [], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPIMetric.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPIMetric.aggregations", + "type": "Object", + "tags": [], + "label": "aggregations", + "description": [], + "signature": [ + "{ [x: string]: ", + "AggregationsAggregate", + "; }" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], "enums": [], "misc": [ { @@ -2161,6 +2208,134 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPIColumn", + "type": "Type", + "tags": [], + "label": "MetricsAPIColumn", + "description": [], + "signature": [ + "{ name: string; type: \"string\" | \"number\" | \"date\"; }" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPIColumnType", + "type": "Type", + "tags": [], + "label": "MetricsAPIColumnType", + "description": [], + "signature": [ + "\"string\" | \"number\" | \"date\"" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPIPageInfo", + "type": "Type", + "tags": [], + "label": "MetricsAPIPageInfo", + "description": [], + "signature": [ + "{ afterKey: { [x: string]: string | null; } | null | undefined; } & { interval?: number | undefined; }" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPIRequest", + "type": "Type", + "tags": [], + "label": "MetricsAPIRequest", + "description": [], + "signature": [ + "Omit<{ timerange: { from: number; to: number; interval: string; }; indexPattern: string; metrics: { id: string; aggregations: { [key: string]: unknown; }; }[]; includeTimeseries: boolean | undefined; } & { groupBy?: (string | null | undefined)[] | undefined; groupInstance?: (string | null | undefined)[] | undefined; modules?: string[] | undefined; afterKey?: { [x: string]: string | null; } | null | undefined; limit?: number | null | undefined; filters?: { [key: string]: unknown; }[] | undefined; dropPartialBuckets?: boolean | undefined; alignDataToEnd?: boolean | undefined; }, \"metrics\"> & { metrics: ", + { + "pluginId": "metricsDataAccess", + "scope": "common", + "docId": "kibMetricsDataAccessPluginApi", + "section": "def-common.MetricsAPIMetric", + "text": "MetricsAPIMetric" + }, + "[]; }" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPIResponse", + "type": "Type", + "tags": [], + "label": "MetricsAPIResponse", + "description": [], + "signature": [ + "{ series: ({ id: string; columns: { name: string; type: \"string\" | \"number\" | \"date\"; }[]; rows: ({ timestamp: number; } & { [x: string]: string | number | object[] | null | undefined; })[]; } & { keys?: string[] | undefined; } & { metricsets?: string[] | undefined; })[]; info: { afterKey: { [x: string]: string | null; } | null | undefined; } & { interval?: number | undefined; }; }" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPIRow", + "type": "Type", + "tags": [], + "label": "MetricsAPIRow", + "description": [], + "signature": [ + "{ timestamp: number; } & { [x: string]: string | number | object[] | null | undefined; }" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPISeries", + "type": "Type", + "tags": [], + "label": "MetricsAPISeries", + "description": [], + "signature": [ + "{ id: string; columns: { name: string; type: \"string\" | \"number\" | \"date\"; }[]; rows: ({ timestamp: number; } & { [x: string]: string | number | object[] | null | undefined; })[]; } & { keys?: string[] | undefined; }" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPITimerange", + "type": "Type", + "tags": [], + "label": "MetricsAPITimerange", + "description": [], + "signature": [ + "{ from: number; to: number; interval: string; }" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "metricsDataAccess", "id": "def-common.MetricsUIAggregation", @@ -2169,9 +2344,9 @@ "label": "MetricsUIAggregation", "description": [], "signature": [ - "{ [x: string]: { [x: string]: { field: string; } | undefined; } | { percentiles: { field: string; percents: number[]; }; } | { bucket_script: { buckets_path: { [x: string]: string; }; script: { source: string; lang: \"painless\" | \"expression\"; }; } & { gap_policy?: \"insert_zeros\" | \"skip\" | undefined; }; } | { cumulative_sum: { buckets_path: string; }; } | { derivative: { buckets_path: string; gap_policy: \"insert_zeros\" | \"skip\"; unit: string; }; } | { sum_bucket: { buckets_path: string; }; } | ", - "SnapshotTermsWithAggregation", - " | { cardinality: { field?: string | undefined; }; } | { top_metrics: { metrics: { field: string; }[] | { field: string; }; } & { size?: number | undefined; sort?: { [x: string]: \"asc\" | \"desc\"; } | undefined; }; } | { filter: { exists: { field: string; }; }; aggs: { period: { max: { field: string; }; }; }; }; }" + "{ [x: string]: ", + "AggregationsAggregate", + "; }" ], "path": "x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/types.ts", "deprecated": false, @@ -2357,12 +2532,14 @@ "label": "ESTermsWithAggregationRT", "description": [], "signature": [ - "Type", - "<", - "SnapshotTermsWithAggregation", - ", ", - "SnapshotTermsWithAggregation", - ", unknown>" + "TypeC", + "<{ terms: ", + "TypeC", + "<{ field: ", + "StringC", + "; }>; aggregations: ", + "UnknownRecordC", + "; }>" ], "path": "x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/types.ts", "deprecated": false, @@ -2574,146 +2751,452 @@ }, { "parentPluginId": "metricsDataAccess", - "id": "def-common.MetricsUIAggregationRT", + "id": "def-common.MetricsAPIColumnRT", "type": "Object", "tags": [], - "label": "MetricsUIAggregationRT", + "label": "MetricsAPIColumnRT", "description": [], "signature": [ + "TypeC", + "<{ name: ", + "StringC", + "; type: ", + "KeyofC", + "<{ date: null; number: null; string: null; }>; }>" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPIColumnTypeRT", + "type": "Object", + "tags": [], + "label": "MetricsAPIColumnTypeRT", + "description": [], + "signature": [ + "KeyofC", + "<{ date: null; number: null; string: null; }>" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPIMetricRT", + "type": "Object", + "tags": [], + "label": "MetricsAPIMetricRT", + "description": [], + "signature": [ + "TypeC", + "<{ id: ", + "StringC", + "; aggregations: ", + "UnknownRecordC", + "; }>" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPIPageInfoRT", + "type": "Object", + "tags": [], + "label": "MetricsAPIPageInfoRT", + "description": [], + "signature": [ + "IntersectionC", + "<[", + "TypeC", + "<{ afterKey: ", + "UnionC", + "<[", + "NullC", + ", ", "RecordC", "<", "StringC", ", ", "UnionC", "<[", - "RecordC", + "StringC", + ", ", + "NullC", + "]>>, ", + "UndefinedC", + "]>; }>, ", + "PartialC", + "<{ interval: ", + "NumberC", + "; }>]>" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPIRequestRT", + "type": "Object", + "tags": [], + "label": "MetricsAPIRequestRT", + "description": [], + "signature": [ + "IntersectionC", + "<[", + "TypeC", + "<{ timerange: ", + "TypeC", + "<{ from: ", + "NumberC", + "; to: ", + "NumberC", + "; interval: ", + "StringC", + "; }>; indexPattern: ", + "StringC", + "; metrics: ", + "ArrayC", + "<", + "TypeC", + "<{ id: ", + "StringC", + "; aggregations: ", + "UnknownRecordC", + "; }>>; includeTimeseries: ", + "UnionC", + "<[", + "BooleanC", + ", ", + "Type", + "]>; }>, ", + "PartialC", + "<{ groupBy: ", + "ArrayC", "<", + "UnionC", + "<[", "StringC", ", ", + "NullC", + ", ", + "UndefinedC", + "]>>; groupInstance: ", + "ArrayC", + "<", "UnionC", "<[", + "StringC", + ", ", + "NullC", + ", ", "UndefinedC", + "]>>; modules: ", + "ArrayC", + "<", + "StringC", + ">; afterKey: ", + "UnionC", + "<[", + "NullC", ", ", - "TypeC", - "<{ field: ", + "RecordC", + "<", "StringC", - "; }>]>>, ", + ", ", + "UnionC", + "<[", + "StringC", + ", ", + "NullC", + "]>>]>; limit: ", + "UnionC", + "<[", + "NumberC", + ", ", + "NullC", + "]>; filters: ", + "ArrayC", + "<", + "UnknownRecordC", + ">; dropPartialBuckets: ", + "BooleanC", + "; alignDataToEnd: ", + "BooleanC", + "; }>]>" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPIResponseRT", + "type": "Object", + "tags": [], + "label": "MetricsAPIResponseRT", + "description": [], + "signature": [ "TypeC", - "<{ percentiles: ", + "<{ series: ", + "ArrayC", + "<", + "IntersectionC", + "<[", + "IntersectionC", + "<[", "TypeC", - "<{ field: ", + "<{ id: ", "StringC", - "; percents: ", + "; columns: ", "ArrayC", "<", - "NumberC", - ">; }>; }>, ", "TypeC", - "<{ bucket_script: ", + "<{ name: ", + "StringC", + "; type: ", + "KeyofC", + "<{ date: null; number: null; string: null; }>; }>>; rows: ", + "ArrayC", + "<", "IntersectionC", "<[", "TypeC", - "<{ buckets_path: ", + "<{ timestamp: ", + "NumberC", + "; }>, ", "RecordC", "<", "StringC", ", ", + "UnionC", + "<[", "StringC", - ">; script: ", - "TypeC", - "<{ source: ", + ", ", + "NumberC", + ", ", + "NullC", + ", ", + "UndefinedC", + ", ", + "ArrayC", + "<", + "ObjectC", + ">]>>]>>; }>, ", + "PartialC", + "<{ keys: ", + "ArrayC", + "<", "StringC", - "; lang: ", - "KeyofC", - "<{ painless: null; expression: null; }>; }>; }>, ", + ">; }>]>, ", "PartialC", - "<{ gap_policy: ", - "KeyofC", - "<{ skip: null; insert_zeros: null; }>; }>]>; }>, ", - "TypeC", - "<{ cumulative_sum: ", - "TypeC", - "<{ buckets_path: ", + "<{ metricsets: ", + "ArrayC", + "<", "StringC", - "; }>; }>, ", - "TypeC", - "<{ derivative: ", + ">; }>]>>; info: ", + "IntersectionC", + "<[", "TypeC", - "<{ buckets_path: ", + "<{ afterKey: ", + "UnionC", + "<[", + "NullC", + ", ", + "RecordC", + "<", "StringC", - "; gap_policy: ", - "KeyofC", - "<{ skip: null; insert_zeros: null; }>; unit: ", + ", ", + "UnionC", + "<[", "StringC", - "; }>; }>, ", + ", ", + "NullC", + "]>>, ", + "UndefinedC", + "]>; }>, ", + "PartialC", + "<{ interval: ", + "NumberC", + "; }>]>; }>" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPIResponseSeriesRT", + "type": "Object", + "tags": [], + "label": "MetricsAPIResponseSeriesRT", + "description": [], + "signature": [ + "IntersectionC", + "<[", + "IntersectionC", + "<[", "TypeC", - "<{ sum_bucket: ", + "<{ id: ", + "StringC", + "; columns: ", + "ArrayC", + "<", "TypeC", - "<{ buckets_path: ", + "<{ name: ", "StringC", - "; }>; }>, ", - "Type", + "; type: ", + "KeyofC", + "<{ date: null; number: null; string: null; }>; }>>; rows: ", + "ArrayC", "<", - "SnapshotTermsWithAggregation", - ", ", - "SnapshotTermsWithAggregation", - ", unknown>, ", + "IntersectionC", + "<[", "TypeC", - "<{ cardinality: ", + "<{ timestamp: ", + "NumberC", + "; }>, ", + "RecordC", + "<", + "StringC", + ", ", + "UnionC", + "<[", + "StringC", + ", ", + "NumberC", + ", ", + "NullC", + ", ", + "UndefinedC", + ", ", + "ArrayC", + "<", + "ObjectC", + ">]>>]>>; }>, ", "PartialC", - "<{ field: ", + "<{ keys: ", + "ArrayC", + "<", "StringC", - "; }>; }>, ", - "TypeC", - "<{ top_metrics: ", + ">; }>]>, ", + "PartialC", + "<{ metricsets: ", + "ArrayC", + "<", + "StringC", + ">; }>]>" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPIRowRT", + "type": "Object", + "tags": [], + "label": "MetricsAPIRowRT", + "description": [], + "signature": [ "IntersectionC", "<[", "TypeC", - "<{ metrics: ", + "<{ timestamp: ", + "NumberC", + "; }>, ", + "RecordC", + "<", + "StringC", + ", ", "UnionC", "<[", + "StringC", + ", ", + "NumberC", + ", ", + "NullC", + ", ", + "UndefinedC", + ", ", "ArrayC", "<", + "ObjectC", + ">]>>]>" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.MetricsAPISeriesRT", + "type": "Object", + "tags": [], + "label": "MetricsAPISeriesRT", + "description": [], + "signature": [ + "IntersectionC", + "<[", "TypeC", - "<{ field: ", + "<{ id: ", "StringC", - "; }>>, ", + "; columns: ", + "ArrayC", + "<", "TypeC", - "<{ field: ", + "<{ name: ", "StringC", - "; }>]>; }>, ", - "PartialC", - "<{ size: ", + "; type: ", + "KeyofC", + "<{ date: null; number: null; string: null; }>; }>>; rows: ", + "ArrayC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ timestamp: ", "NumberC", - "; sort: ", + "; }>, ", "RecordC", "<", "StringC", ", ", "UnionC", "<[", - "LiteralC", - "<\"desc\">, ", - "LiteralC", - "<\"asc\">]>>; }>]>; }>, ", - "TypeC", - "<{ filter: ", - "TypeC", - "<{ exists: ", - "TypeC", - "<{ field: ", "StringC", - "; }>; }>; aggs: ", - "TypeC", - "<{ period: ", - "TypeC", - "<{ max: ", - "TypeC", - "<{ field: ", + ", ", + "NumberC", + ", ", + "NullC", + ", ", + "UndefinedC", + ", ", + "ArrayC", + "<", + "ObjectC", + ">]>>]>>; }>, ", + "PartialC", + "<{ keys: ", + "ArrayC", + "<", "StringC", - "; }>; }>; }>; }>]>>" + ">; }>]>" ], - "path": "x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/types.ts", + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index 0ebcbc1e59e4e..3d91b9fc9894a 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 109 | 8 | 109 | 6 | +| 128 | 8 | 128 | 5 | ## Client @@ -56,6 +56,9 @@ Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs- ### Functions +### Interfaces + + ### Consts, variables and types diff --git a/api_docs/ml.devdocs.json b/api_docs/ml.devdocs.json index 2667ec97d5072..5d035e99c13d4 100644 --- a/api_docs/ml.devdocs.json +++ b/api_docs/ml.devdocs.json @@ -1719,7 +1719,7 @@ "): Promise<", "InferenceModelConfigContainer", ">; getAllInferenceEndpoints(): Promise<{ endpoints: ", - "InferenceModelConfigContainer", + "GetInferenceEndpointsResponse", "[]; }>; }; notifications: { findMessages(params: ", "NotificationsQueryParams", "): Promise<", diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 94b9d3bf30a6d..5dc2b430d2128 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.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 | |-------------------|-----------|------------------------|-----------------| -| 154 | 3 | 67 | 102 | +| 154 | 3 | 67 | 103 | ## Client diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index 3d3c091e1485d..6f43591eab849 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 329acdbfa25ce..e097e62b8a5b6 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-08-21 +date: 2024-08-23 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 4b1a2778bf3af..ffb6a748dcf4c 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-08-21 +date: 2024-08-23 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 c68cbdacac37b..9fa3ea112d4ba 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-08-21 +date: 2024-08-23 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 4d607f43b7558..b079605cc11ad 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-08-21 +date: 2024-08-23 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 29b4ffd789757..e842e4488d1cb 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-08-21 +date: 2024-08-23 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 e77a98ed72253..e65e8b6f565f3 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json index 9ff3f59805dff..517ebad166e0a 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -10915,7 +10915,7 @@ "label": "value", "description": [], "signature": [ - "false" + "true" ], "path": "x-pack/plugins/observability_solution/observability/server/ui_settings.ts", "deprecated": false, diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 79dcc2dc842ef..8dfe00bc850e6 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-08-21 +date: 2024-08-23 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 80ec4fefe40a6..ca2e54657c2e0 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index d25268a424be1..2785e2169195d 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index 0bbbacdfb598c..f920dfbc800b3 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index 3b560559039c0..3e7947f22d1fe 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index ccc157ddd6f3f..22be734488a54 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-08-21 +date: 2024-08-23 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 f0405bab6de76..2071b367a363e 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-08-21 +date: 2024-08-23 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 cb87d1898ef0a..ab804ae459ced 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-08-21 +date: 2024-08-23 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 dc3e42f62e8e7..d7f555f0a84da 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-08-21 +date: 2024-08-23 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 be0804c75f33a..1ed74c3064395 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-08-21 +date: 2024-08-23 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 | |--------------|----------|------------------------| -| 836 | 710 | 45 | +| 843 | 717 | 46 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 52350 | 241 | 39281 | 1921 | +| 52603 | 241 | 39516 | 1932 | ## Plugin Directory @@ -31,7 +31,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux @elastic/kibana-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 4 | 0 | 4 | 1 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 74 | 0 | 9 | 2 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 871 | 1 | 839 | 52 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 875 | 1 | 843 | 52 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | The user interface for Elastic APM | 29 | 0 | 29 | 119 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 93 | 0 | 93 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 9 | 0 | @@ -49,7 +49,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/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 39 | 0 | 30 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Content management app | 149 | 0 | 125 | 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 | 396 | 0 | 387 | 29 | +| | [@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 | 394 | 0 | 385 | 28 | | crossClusterReplication | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-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 | 271 | 0 | 252 | 1 | @@ -99,7 +99,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 247 | 0 | 102 | 2 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Index pattern fields and ambiguous values formatters | 292 | 5 | 253 | 3 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes services for async usage and search of fields metadata. | 42 | 0 | 42 | 7 | -| | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 84 | 0 | 84 | 8 | +| | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 88 | 0 | 88 | 8 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | File upload, download, sharing, and serving over HTTP implementation in Kibana. | 240 | 0 | 24 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Simple UI for managing files in Kibana | 3 | 0 | 3 | 0 | | | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1362 | 5 | 1239 | 74 | @@ -113,15 +113,15 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 149 | 0 | 111 | 1 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Image embeddable | 1 | 0 | 1 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 4 | 0 | 4 | 0 | -| | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 227 | 0 | 222 | 1 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 16 | 0 | 14 | 11 | +| | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 238 | 0 | 233 | 1 | +| | [@elastic/appex-ai-infra](https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 16 | 0 | 14 | 11 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin visualizes data from Filebeat and Metricbeat, and integrates with other Observability solutions | 38 | 0 | 35 | 6 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 4 | 0 | 4 | 0 | | inputControlVis | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds Input Control visualization to Kibana | 0 | 0 | 0 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 127 | 2 | 100 | 4 | -| | [@elastic/security-scalability](https://github.com/orgs/elastic/teams/security-scalability) | Plugin implementing the Integration Assistant API and UI | 47 | 0 | 40 | 3 | +| | [@elastic/security-scalability](https://github.com/orgs/elastic/teams/security-scalability) | Plugin implementing the Integration Assistant API and UI | 49 | 0 | 41 | 3 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides UI and APIs for the interactive setup mode. | 28 | 0 | 18 | 0 | -| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 94 | 0 | 94 | 5 | +| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 92 | 0 | 92 | 5 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 5 | 0 | 5 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 6 | 0 | 6 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 153 | 0 | 121 | 3 | @@ -135,14 +135,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | A dashboard panel for creating links to dashboards or external links. | 5 | 0 | 5 | 0 | | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 226 | 0 | 97 | 52 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 13 | 0 | 11 | 7 | -| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin provides a LogsExplorer component using the Discover customization framework, offering several affordances specifically designed for log consumption. | 117 | 4 | 117 | 22 | +| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin provides a LogsExplorer component using the Discover customization framework, offering several affordances specifically designed for log consumption. | 122 | 4 | 122 | 23 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes the shared components and APIs to access and visualize logs. | 300 | 0 | 272 | 32 | | logstash | [@elastic/logstash](https://github.com/orgs/elastic/teams/logstash) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 44 | 0 | 44 | 7 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 209 | 0 | 205 | 28 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 60 | 0 | 60 | 0 | -| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Exposes utilities for accessing metrics data | 109 | 8 | 109 | 6 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 154 | 3 | 67 | 102 | +| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Exposes utilities for accessing metrics data | 128 | 8 | 128 | 5 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 154 | 3 | 67 | 103 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 2 | 0 | 2 | 0 | | | [@elastic/stack-monitoring](https://github.com/orgs/elastic/teams/stack-monitoring) | - | 15 | 3 | 13 | 1 | | | [@elastic/stack-monitoring](https://github.com/orgs/elastic/teams/stack-monitoring) | - | 9 | 0 | 9 | 0 | @@ -176,13 +176,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the definition and helper methods around saved searches, used by discover and visualizations. | 61 | 0 | 60 | 3 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 32 | 0 | 13 | 0 | | | [@elastic/kibana-reporting-services](https://github.com/orgs/elastic/teams/kibana-reporting-services) | Kibana Screenshotting Plugin | 32 | 0 | 8 | 4 | +| | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | AI Assistant for Search | 6 | 0 | 6 | 0 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | Plugin hosting shared features for connectors | 19 | 0 | 19 | 3 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 18 | 0 | 10 | 0 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 10 | 0 | 6 | 1 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | Plugin to provide access to and rendering of python notebooks for use in the persistent developer console. | 10 | 0 | 10 | 1 | -| | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 15 | 0 | 9 | 1 | +| | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 17 | 0 | 11 | 1 | | searchprofiler | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | -| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 447 | 0 | 231 | 1 | +| | [@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. | 447 | 0 | 231 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 192 | 0 | 123 | 33 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | ESS customizations for Security Solution. | 6 | 0 | 6 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | Serverless customizations for security. | 7 | 0 | 7 | 0 | @@ -216,7 +217,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | This plugin visualizes data from Heartbeat, and integrates with other Observability solutions. | 1 | 0 | 1 | 0 | | urlDrilldown | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds drilldown implementations to Kibana | 0 | 0 | 0 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 12 | 0 | 12 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 51 | 0 | 14 | 4 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 52 | 0 | 14 | 5 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | The default editor used in most aggregation-based visualizations. | 56 | 0 | 49 | 4 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Contains the gauge chart implementation using the elastic-charts library. The goal is to eventually deprecate the old implementation and keep only this. Until then, the library used is defined by the Legacy charts library advanced setting. | 7 | 0 | 7 | 2 | @@ -246,7 +247,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 27 | 3 | 27 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 5 | 0 | 5 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 23 | 0 | 22 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 217 | 0 | 214 | 0 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 222 | 0 | 219 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 33 | 0 | 33 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 31 | 0 | 15 | 1 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 299 | 0 | 282 | 8 | @@ -279,12 +280,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 24 | 0 | 24 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 149 | 2 | 143 | 20 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 10 | 0 | 8 | 4 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 32 | 0 | 28 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 6 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 39 | 0 | 38 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 6 | 0 | 6 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 8 | 0 | 8 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 3 | 0 | 3 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 10 | 0 | 10 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 50 | 0 | 33 | 3 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 51 | 0 | 33 | 3 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 30 | 0 | 30 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 195 | 1 | 128 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 100 | 0 | 0 | 0 | @@ -491,7 +494,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 5 | 0 | 5 | 1 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 41 | 0 | 27 | 6 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 33 | 0 | 24 | 1 | -| | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 13 | 0 | 5 | 0 | +| | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 14 | 0 | 6 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 35 | 0 | 34 | 0 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 156 | 0 | 130 | 9 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 346 | 0 | 320 | 0 | @@ -502,7 +505,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 269 | 1 | 209 | 15 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 27 | 0 | 27 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | -| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 150 | 1 | 120 | 15 | +| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 152 | 1 | 120 | 15 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 66 | 0 | 62 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 195 | 0 | 183 | 10 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 40 | 0 | 40 | 0 | @@ -532,7 +535,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 7 | 1 | 7 | 1 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 9 | 0 | 9 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 52 | 12 | 43 | 0 | -| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 29 | 0 | 29 | 0 | +| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 41 | 0 | 41 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 60 | 0 | 60 | 4 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 44 | 0 | 44 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 13 | 0 | 13 | 0 | @@ -545,7 +548,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 172 | 0 | 172 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 28 | 0 | 2 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 8 | 0 | 8 | 0 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 2 | 0 | 2 | 0 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 3 | 0 | 3 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 6 | 0 | 1 | 1 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 13 | 0 | 12 | 2 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 9 | 0 | 6 | 2 | @@ -641,6 +644,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 16 | 0 | 16 | 1 | | | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 128 | 0 | 125 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 35 | 0 | 34 | 0 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 76 | 0 | 76 | 0 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 3929 | 0 | 3929 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 18 | 1 | 17 | 1 | @@ -648,11 +652,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 20 | 0 | 18 | 1 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 50 | 0 | 25 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 66 | 0 | 63 | 0 | +| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 25 | 0 | 24 | 7 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 35 | 0 | 25 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 7 | 0 | 7 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 118 | 0 | 59 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 51 | 0 | 25 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 275 | 1 | 154 | 0 | +| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 75 | 0 | 74 | 0 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 6 | 0 | 0 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 15 | 0 | 15 | 7 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 54 | 0 | 49 | 0 | @@ -724,6 +730,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 0 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 15 | 0 | 4 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 8 | 0 | 8 | 4 | +| | [@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) | - | 16 | 0 | 6 | 0 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 182 | 0 | 182 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 20 | 0 | 12 | 0 | @@ -740,7 +747,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 28 | 0 | 12 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 8 | 0 | 8 | 0 | -| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 72 | 0 | 55 | 0 | +| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 74 | 0 | 55 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 15 | 0 | 15 | 0 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 2 | 0 | 2 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 39 | 0 | 25 | 1 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index be5137f3154c8..aa02f40aef7d0 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index ea36fe3484b61..9eaf48a3622a6 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-08-21 +date: 2024-08-23 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 deb10d5d03dc4..bac059a68f37f 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-08-21 +date: 2024-08-23 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 5c21b59a968fb..cb6172c4e273e 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-08-21 +date: 2024-08-23 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 a46760ae9a722..3d1c7cf8bdcb8 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-08-21 +date: 2024-08-23 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 c5d38cc85631d..ad4cc2ae99a86 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-08-21 +date: 2024-08-23 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 90598fd247d5d..440ece81cf7d0 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.devdocs.json b/api_docs/rule_registry.devdocs.json index 29dceb9bcf15d..36bcd64c65673 100644 --- a/api_docs/rule_registry.devdocs.json +++ b/api_docs/rule_registry.devdocs.json @@ -2221,7 +2221,7 @@ "section": "def-common.ActionGroup", "text": "ActionGroup" }, - "<\"default\">[]; schemas?: { params?: { type: \"zod\"; schema: Zod.ZodObject | Zod.ZodIntersection; } | { type: \"config-schema\"; schema: ", + "<\"default\">[]; schemas?: { params?: { type: \"zod\"; schema: any; } | { type: \"config-schema\"; schema: ", { "pluginId": "@kbn/config-schema", "scope": "common", diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 5c8d7a5633cfd..af74a4e3d7437 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-08-21 +date: 2024-08-23 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 bb08953da9c37..1a4b2fceb9993 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-08-21 +date: 2024-08-23 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 2c9ead63edc66..1abdfa387d38a 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-08-21 +date: 2024-08-23 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 1e5b8a712ad6b..cbbb5f60a7271 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-08-21 +date: 2024-08-23 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 b6d8232762dae..cca089333172c 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-08-21 +date: 2024-08-23 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 c56109c9bc600..12f594b03c2c4 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-08-21 +date: 2024-08-23 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 67f7109195f0e..812997c8ddd93 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-08-21 +date: 2024-08-23 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 8355cd6f915b8..1179462c13786 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-08-21 +date: 2024-08-23 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 f24a982ad7154..464b53f00ebd7 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-08-21 +date: 2024-08-23 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 17da8b86fef28..a887bade5e4c8 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_assistant.devdocs.json b/api_docs/search_assistant.devdocs.json new file mode 100644 index 0000000000000..f2f5eb9bec4e8 --- /dev/null +++ b/api_docs/search_assistant.devdocs.json @@ -0,0 +1,114 @@ +{ + "id": "searchAssistant", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [], + "setup": { + "parentPluginId": "searchAssistant", + "id": "def-public.SearchAssistantPluginSetup", + "type": "Interface", + "tags": [], + "label": "SearchAssistantPluginSetup", + "description": [], + "path": "x-pack/plugins/search_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "setup", + "initialIsOpen": true + }, + "start": { + "parentPluginId": "searchAssistant", + "id": "def-public.SearchAssistantPluginStart", + "type": "Interface", + "tags": [], + "label": "SearchAssistantPluginStart", + "description": [], + "path": "x-pack/plugins/search_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "start", + "initialIsOpen": true + } + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [], + "setup": { + "parentPluginId": "searchAssistant", + "id": "def-server.SearchAssistantPluginSetup", + "type": "Interface", + "tags": [], + "label": "SearchAssistantPluginSetup", + "description": [], + "path": "x-pack/plugins/search_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "setup", + "initialIsOpen": true + }, + "start": { + "parentPluginId": "searchAssistant", + "id": "def-server.SearchAssistantPluginStart", + "type": "Interface", + "tags": [], + "label": "SearchAssistantPluginStart", + "description": [], + "path": "x-pack/plugins/search_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "start", + "initialIsOpen": true + } + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "searchAssistant", + "id": "def-common.PLUGIN_ID", + "type": "string", + "tags": [], + "label": "PLUGIN_ID", + "description": [], + "signature": [ + "\"searchAssistant\"" + ], + "path": "x-pack/plugins/search_assistant/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "searchAssistant", + "id": "def-common.PLUGIN_NAME", + "type": "string", + "tags": [], + "label": "PLUGIN_NAME", + "description": [], + "signature": [ + "\"searchAssistant\"" + ], + "path": "x-pack/plugins/search_assistant/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/search_assistant.mdx b/api_docs/search_assistant.mdx new file mode 100644 index 0000000000000..c84725550c6d2 --- /dev/null +++ b/api_docs/search_assistant.mdx @@ -0,0 +1,46 @@ +--- +#### +#### 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: kibSearchAssistantPluginApi +slug: /kibana-dev-docs/api/searchAssistant +title: "searchAssistant" +image: https://source.unsplash.com/400x175/?github +description: API docs for the searchAssistant plugin +date: 2024-08-23 +tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchAssistant'] +--- +import searchAssistantObj from './search_assistant.devdocs.json'; + +AI Assistant for Search + +Contact [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 6 | 0 | 6 | 0 | + +## Client + +### Setup + + +### Start + + +## Server + +### Setup + + +### Start + + +## Common + +### Consts, variables and types + + diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 52aad0b4b2b63..50d26e136591e 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index 9052e610f9bdf..4bdd9c8b64b6a 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index b3b4382334a1d..eac1d82c53b30 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 96012e37d74c1..65d41d4067493 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.devdocs.json b/api_docs/search_playground.devdocs.json index 9acc1abcd944f..e5f8ac16bd1a3 100644 --- a/api_docs/search_playground.devdocs.json +++ b/api_docs/search_playground.devdocs.json @@ -245,6 +245,36 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "searchPlayground", + "id": "def-common.PLUGIN_PATH", + "type": "string", + "tags": [], + "label": "PLUGIN_PATH", + "description": [], + "signature": [ + "\"/app/search_playground\"" + ], + "path": "x-pack/plugins/search_playground/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "searchPlayground", + "id": "def-common.SEARCH_MODE_FEATURE_FLAG_ID", + "type": "string", + "tags": [], + "label": "SEARCH_MODE_FEATURE_FLAG_ID", + "description": [], + "signature": [ + "\"searchPlayground:searchModeEnabled\"" + ], + "path": "x-pack/plugins/search_playground/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], "objects": [] diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index 05eb1e522bec0..6ac3a66ad4359 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-ki | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 15 | 0 | 9 | 1 | +| 17 | 0 | 11 | 1 | ## Client diff --git a/api_docs/security.devdocs.json b/api_docs/security.devdocs.json index e7af8f38e9928..bc5c1ffbd6fc9 100644 --- a/api_docs/security.devdocs.json +++ b/api_docs/security.devdocs.json @@ -5243,7 +5243,7 @@ "signature": [ "\"getTags\" | \"pushCase\" | \"createCase\" | \"createComment\" | \"getCase\" | \"getComment\" | \"getReporters\" | \"getUserActions\" | \"findConfigurations\" | \"updateCase\" | \"updateComment\" | \"deleteCase\" | \"deleteComment\" | \"createConfiguration\" | \"updateConfiguration\"" ], - "path": "x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/cases.ts", + "path": "x-pack/packages/security/authorization_core/src/privileges/feature_privilege_builder/cases.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -6779,7 +6779,7 @@ "tags": [], "label": "RawKibanaPrivileges", "description": [], - "path": "x-pack/plugins/security/common/model/raw_kibana_privileges.ts", + "path": "x-pack/packages/security/authorization_core/src/privileges/raw_kibana_privileges.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -6793,7 +6793,7 @@ "signature": [ "{ [x: string]: string[]; }" ], - "path": "x-pack/plugins/security/common/model/raw_kibana_privileges.ts", + "path": "x-pack/packages/security/authorization_core/src/privileges/raw_kibana_privileges.ts", "deprecated": false, "trackAdoption": false }, @@ -6805,9 +6805,15 @@ "label": "features", "description": [], "signature": [ - "RawKibanaFeaturePrivileges" + { + "pluginId": "@kbn/security-authorization-core", + "scope": "server", + "docId": "kibKbnSecurityAuthorizationCorePluginApi", + "section": "def-server.RawKibanaFeaturePrivileges", + "text": "RawKibanaFeaturePrivileges" + } ], - "path": "x-pack/plugins/security/common/model/raw_kibana_privileges.ts", + "path": "x-pack/packages/security/authorization_core/src/privileges/raw_kibana_privileges.ts", "deprecated": false, "trackAdoption": false }, @@ -6821,7 +6827,7 @@ "signature": [ "{ [x: string]: string[]; }" ], - "path": "x-pack/plugins/security/common/model/raw_kibana_privileges.ts", + "path": "x-pack/packages/security/authorization_core/src/privileges/raw_kibana_privileges.ts", "deprecated": false, "trackAdoption": false }, @@ -6835,7 +6841,7 @@ "signature": [ "{ [x: string]: string[]; }" ], - "path": "x-pack/plugins/security/common/model/raw_kibana_privileges.ts", + "path": "x-pack/packages/security/authorization_core/src/privileges/raw_kibana_privileges.ts", "deprecated": false, "trackAdoption": false } diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 3a49496d9c59f..eb269da0adc38 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 447 | 0 | 231 | 1 | +| 447 | 0 | 231 | 0 | ## Client diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 76e3f0eb16d65..da1e6a70bf239 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-08-21 +date: 2024-08-23 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 0b8192338f200..95a511f99d1da 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-08-21 +date: 2024-08-23 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 c95d112baf826..4d2303631756e 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-08-21 +date: 2024-08-23 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 5339d62777dc9..ab11d0ad37ef8 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-08-21 +date: 2024-08-23 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 64457a389d898..7f655fca58e0b 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-08-21 +date: 2024-08-23 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 ad4e045daad26..3ce5854182cd4 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-08-21 +date: 2024-08-23 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 91f38ffddd33e..7277033802b1d 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-08-21 +date: 2024-08-23 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 b42bd14e4814f..9217a1297810a 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 6ad11c249a14c..d0007f69c9928 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 3fa8205f21daf..fb57b41f6e06d 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-08-21 +date: 2024-08-23 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 59ee65bf31011..e3703e983e728 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-08-21 +date: 2024-08-23 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 dd3e1edc82e5e..642db789beb54 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-08-21 +date: 2024-08-23 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 aa1bcc88c2220..80b4556a34fff 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-08-21 +date: 2024-08-23 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 b5154724d4de1..edebb8a295200 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-08-21 +date: 2024-08-23 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 b4231b1393830..14742dff6ee7c 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-08-21 +date: 2024-08-23 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 53d89401667e3..5912c990dcfde 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-08-21 +date: 2024-08-23 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 79e25ab8fea21..a74c217d3c4a4 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2024-08-21 +date: 2024-08-23 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 72a33933602e6..3cd851a6b90c2 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 5717b3b5679e9..82b36503730a2 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-08-21 +date: 2024-08-23 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 7fa88cd29e24c..ddc62457e8849 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-08-21 +date: 2024-08-23 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 587ee4d50a51b..9792b40c46aca 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-08-21 +date: 2024-08-23 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 303af21b7d997..5c0b17eb4499f 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -5065,7 +5065,7 @@ "label": "setRuleProperty", "description": [], "signature": [ - "(key: Prop, value: ", + "(key: Prop, value: ", "SanitizedRule", "[Prop] | null) => void" ], diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index f114e807a6166..b5fe646028a5d 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-08-21 +date: 2024-08-23 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 9915f54cf30fc..14bf81bcfef85 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-08-21 +date: 2024-08-23 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 604084df0e0ab..1fdb07fde8da0 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-08-21 +date: 2024-08-23 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 707278a98b02c..edd5423d1971a 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-08-21 +date: 2024-08-23 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 8d052cffd6859..7f9551ac55cc4 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-08-21 +date: 2024-08-23 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 adf143c4c9812..54b7c47deb42c 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-08-21 +date: 2024-08-23 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 7970e48549905..e90d4de39f9c7 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-08-21 +date: 2024-08-23 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 090f239187bfc..4ddc4f8074f00 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-08-21 +date: 2024-08-23 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 33c4f072403f0..6b64db71f7dc8 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.devdocs.json b/api_docs/usage_collection.devdocs.json index 965b393222e37..c807c2733c9d6 100644 --- a/api_docs/usage_collection.devdocs.json +++ b/api_docs/usage_collection.devdocs.json @@ -2286,6 +2286,24 @@ "trackAdoption": false, "lifecycle": "setup", "initialIsOpen": true + }, + "start": { + "parentPluginId": "usageCollection", + "id": "def-server.UsageCollectionStart", + "type": "Type", + "tags": [], + "label": "UsageCollectionStart", + "description": [ + "Plugin's start API" + ], + "signature": [ + "UsageCountersServiceStart" + ], + "path": "src/plugins/usage_collection/server/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "lifecycle": "start", + "initialIsOpen": true } }, "common": { diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index 874fb37bbe051..2403b51076c6f 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.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 | |-------------------|-----------|------------------------|-----------------| -| 51 | 0 | 14 | 4 | +| 52 | 0 | 14 | 5 | ## Client @@ -42,6 +42,9 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core ### Setup +### Start + + ### Interfaces diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index 69415a4f66a57..ddf0576809d6d 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-08-21 +date: 2024-08-23 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 b4fa19141b172..c27f7da18f709 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-08-21 +date: 2024-08-23 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 5d2b80bfa8cd7..666ce1d6d2e93 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-08-21 +date: 2024-08-23 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 2085debcc87a8..84d46e34098b2 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-08-21 +date: 2024-08-23 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 3aacbcaa010ed..410042f5b675b 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-08-21 +date: 2024-08-23 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 ff42025077245..e1ead079f5fb6 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-08-21 +date: 2024-08-23 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 b0a0339e9d85a..985bff449c64e 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-08-21 +date: 2024-08-23 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 98ef8896c5cc6..65771f0f50810 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-08-21 +date: 2024-08-23 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 fa31eb5bc0996..4822e0c936b06 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-08-21 +date: 2024-08-23 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 949fe265475ad..f493ff35e75da 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-08-21 +date: 2024-08-23 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 ebf25c0da9c20..1de84e76ab942 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-08-21 +date: 2024-08-23 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 037033558eac4..a400a3f4386f2 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-08-21 +date: 2024-08-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 7ffdd1b394ee4b16e9e3073852a8adf57f8184bf Mon Sep 17 00:00:00 2001 From: Rickyanto Ang Date: Thu, 22 Aug 2024 23:00:29 -0700 Subject: [PATCH 44/59] [Cloud Security][Quick Wins] Fix for Field Selector issue (#191130) ## Summary This PR is to address issue where whenever user tries to check on the field on the field selector outside the 1st page, user will be navigated to the 1st page upon checking the checkbox. https://github.com/user-attachments/assets/89375c54-deac-49a7-a3a1-2a4d5745ccc7 Steps to test: - Get some findings data in - Navigate to Findings Page - Group by None - Click on Fields selector, navigate to other pages - Check on any of field checkboxes Expected Result: User should not get navigated back to page 1 --- .../fields_selector/fields_selector_table.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/fields_selector_table.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/fields_selector_table.tsx index fa07ba97bded8..36faea24f786e 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/fields_selector_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/fields_selector_table.tsx @@ -7,6 +7,7 @@ import React, { useCallback, useMemo, useState } from 'react'; import useSessionStorage from 'react-use/lib/useSessionStorage'; import { + CriteriaWithPagination, EuiBasicTableColumn, EuiButtonEmpty, EuiCheckbox, @@ -98,6 +99,10 @@ export const FieldsSelectorTable = ({ SESSION_STORAGE_FIELDS_MODAL_SHOW_SELECTED, false ); + const [pagination, setPagination] = useState({ pageIndex: 0 }); + const onTableChange = ({ page: { index } }: CriteriaWithPagination) => { + setPagination({ pageIndex: index }); + }; const fields = useMemo( () => filterFieldsBySearch(dataView.fields.getAll(), columns, searchQuery, isFilterSelectedEnabled), @@ -260,10 +265,11 @@ export const FieldsSelectorTable = ({ items={fields} columns={tableColumns} search={search} - pagination + pagination={pagination} sorting={defaultSorting} error={error} childrenBetween={tableHeader} + onTableChange={onTableChange} /> ); }; From 2ab2755399074cff2ff8493f061982199c6746a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Marcondes?= <55978943+cauemarcondes@users.noreply.github.com> Date: Fri, 23 Aug 2024 07:57:59 +0100 Subject: [PATCH 45/59] [APM][ECO]New Service Inventory opens some services with tracing in 'logs-only' view (#191108) closes https://github.com/elastic/kibana/issues/190437 Before: Screenshot 2024-08-22 at 16 54 39 After: Screenshot 2024-08-22 at 16 55 25 Screenshot 2024-08-22 at 16 55 43 --- .../components/shared/links/apm/service_link/index.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/observability_solution/apm/public/components/shared/links/apm/service_link/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/shared/links/apm/service_link/index.tsx index 992dda3d88fbd..f32dc38234c74 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/shared/links/apm/service_link/index.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/shared/links/apm/service_link/index.tsx @@ -16,7 +16,7 @@ import { SignalTypes } from '../../../../../../common/entities/types'; import { NOT_AVAILABLE_LABEL } from '../../../../../../common/i18n'; import { AgentName } from '../../../../../../typings/es_schemas/ui/fields/agent'; import { useApmRouter } from '../../../../../hooks/use_apm_router'; -import { isLogsSignal } from '../../../../../utils/get_signal_type'; +import { isApmSignal } from '../../../../../utils/get_signal_type'; import { truncate, unit } from '../../../../../utils/style'; import { ApmRoutes } from '../../../../routing/apm_route_config'; import { PopoverTooltip } from '../../../popover_tooltip'; @@ -46,9 +46,9 @@ export function ServiceLink({ const serviceLink = isMobileAgentName(agentName) ? '/mobile-services/{serviceName}/overview' - : isLogsSignal(signalTypes) - ? '/logs-services/{serviceName}/overview' - : '/services/{serviceName}/overview'; + : isApmSignal(signalTypes) + ? '/services/{serviceName}/overview' + : '/logs-services/{serviceName}/overview'; if (serviceName === OTHER_SERVICE_NAME) { return ( From 21548e330ed31a4549e081ba7ab0b3a5b9cd903e Mon Sep 17 00:00:00 2001 From: Irene Blanco Date: Fri, 23 Aug 2024 09:21:21 +0200 Subject: [PATCH 46/59] [Infra][Inventory] Remove APM link from hosts/containers flyout (#190814) ## Summary We wanted to remove the APM link from the hosts and containers flyout. |Entity|Before|After| |-|-|-| |Host||| |Container||| --- .../asset_details_tabs.tsx | 17 +---- .../context/fixtures/asset_details_props.ts | 6 -- .../asset_details/asset_details.stories.tsx | 4 +- .../components/asset_details/constants.ts | 6 -- .../asset_details/hooks/use_page_header.tsx | 33 +--------- .../public/components/asset_details/types.ts | 1 - .../public/components/asset_details/utils.ts | 14 +---- .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - .../test/functional/apps/infra/home_page.ts | 62 +------------------ 11 files changed, 7 insertions(+), 142 deletions(-) diff --git a/x-pack/plugins/observability_solution/infra/public/common/asset_details_config/asset_details_tabs.tsx b/x-pack/plugins/observability_solution/infra/public/common/asset_details_config/asset_details_tabs.tsx index 3aa55f0581496..97a5bec3cd428 100644 --- a/x-pack/plugins/observability_solution/infra/public/common/asset_details_config/asset_details_tabs.tsx +++ b/x-pack/plugins/observability_solution/infra/public/common/asset_details_config/asset_details_tabs.tsx @@ -90,13 +90,6 @@ const dashboardsTab: Tab = { ), }; -const linkToApmTab: Tab = { - id: ContentTabIds.LINK_TO_APM, - name: i18n.translate('xpack.infra.assetDetails.tabs.linkToApm', { - defaultMessage: 'APM', - }), -}; - export const hostDetailsTabs: Tab[] = [ overviewTab, metadataTab, @@ -108,17 +101,11 @@ export const hostDetailsTabs: Tab[] = [ osqueryTab, dashboardsTab, ]; -export const hostDetailsFlyoutTabs: Tab[] = [...hostDetailsTabs, linkToApmTab]; +export const hostDetailsFlyoutTabs: Tab[] = [...hostDetailsTabs]; // The profiling tab would be added in next iteration export const containerDetailsTabs: Tab[] = [overviewTab, metadataTab, metricsTab, logsTab]; -export const containerDetailsFlyoutTabs: Tab[] = [ - overviewTab, - metadataTab, - metricsTab, - logsTab, - linkToApmTab, -]; +export const containerDetailsFlyoutTabs: Tab[] = [overviewTab, metadataTab, metricsTab, logsTab]; export const getAssetDetailsTabs = (type: string): Tab[] => { switch (type) { diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/__stories__/context/fixtures/asset_details_props.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/__stories__/context/fixtures/asset_details_props.ts index ab3318c7cebc7..ba3fa15241c19 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/__stories__/context/fixtures/asset_details_props.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/__stories__/context/fixtures/asset_details_props.ts @@ -40,12 +40,6 @@ const tabs: Tab[] = [ defaultMessage: 'Anomalies', }), }, - { - id: ContentTabIds.LINK_TO_APM, - name: i18n.translate('xpack.infra.assetDetails.tabs.apmLink', { - defaultMessage: 'APM', - }), - }, ]; export const assetDetailsProps: AssetDetailsProps = { diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/asset_details.stories.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/asset_details.stories.tsx index c85677dbace94..1d4c41e5069f5 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/asset_details.stories.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/asset_details.stories.tsx @@ -26,7 +26,7 @@ const stories: Meta = { component: AssetDetails, argTypes: { tabId: { - options: assetDetailsProps.tabs.filter(({ id }) => id !== 'linkToApm').map(({ id }) => id), + options: assetDetailsProps.tabs.map(({ id }) => id), defaultValue: 'overview', control: { type: 'radio', @@ -53,7 +53,7 @@ const PageTabTemplate: Story = (args) => { const FlyoutTemplate: Story = (args) => { const [isOpen, setIsOpen] = useState(false); const closeFlyout = () => setIsOpen(false); - const options = assetDetailsProps.tabs.filter(({ id }) => id !== 'linkToApm').map(({ id }) => id); + const options = assetDetailsProps.tabs.map(({ id }) => id); const [{ tabId }, updateArgs] = useArgs(); return ( diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/constants.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/constants.ts index 3b3db1b21bd09..770d70cf83cc2 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/constants.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/constants.ts @@ -5,7 +5,6 @@ * 2.0. */ -import { SupportedAssetTypes } from '../../../common/asset_details/types'; import type { DockerContainerMetrics, KubernetesContainerMetrics } from './charts/types'; import { IntegrationEventModules } from './types'; @@ -15,11 +14,6 @@ export const ASSET_DETAILS_PAGE_COMPONENT_NAME = 'infraAssetDetailsPage'; export const APM_HOST_FILTER_FIELD = 'host.hostname'; export const APM_CONTAINER_FILTER_FIELD = 'container.id'; -export const APM_FILTER_FIELD_PER_ASSET_TYPE = { - [SupportedAssetTypes.container]: APM_CONTAINER_FILTER_FIELD, - [SupportedAssetTypes.host]: APM_HOST_FILTER_FIELD, -}; - export const ASSET_DETAILS_URL_STATE_KEY = 'assetDetails'; export const INTEGRATIONS = { diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_page_header.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_page_header.tsx index a3d94c5c6e14b..bb56d0a8f8f53 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_page_header.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_page_header.tsx @@ -14,7 +14,6 @@ import { import { FormattedMessage } from '@kbn/i18n-react'; import { useUiSetting } from '@kbn/kibana-react-plugin/public'; import { enableInfrastructureAssetCustomDashboards } from '@kbn/observability-plugin/common'; -import { useLinkProps } from '@kbn/observability-shared-plugin/public'; import { capitalize, isEmpty } from 'lodash'; import React, { useCallback, useMemo } from 'react'; import { useHistory, useLocation } from 'react-router-dom'; @@ -26,7 +25,6 @@ import { LinkToNodeDetails } from '../links'; import { ContentTabIds, type LinkOptions, type RouteState, type Tab, type TabIds } from '../types'; import { useAssetDetailsRenderPropsContext } from './use_asset_details_render_props'; import { useTabSwitcherContext } from './use_tab_switcher'; -import { getApmField } from '../utils'; type TabItem = NonNullable['tabs']>[number]; @@ -143,7 +141,6 @@ const useFeatureFlagTabs = () => { const useTabs = (tabs: Tab[]) => { const { showTab, activeTabId } = useTabSwitcherContext(); - const { asset } = useAssetDetailsRenderPropsContext(); const { isTabEnabled } = useFeatureFlagTabs(); const onTabClick = useCallback( @@ -153,37 +150,9 @@ const useTabs = (tabs: Tab[]) => { [showTab] ); - const apmTracesMenuItemLinkProps = useLinkProps({ - app: 'apm', - hash: 'traces', - search: { - kuery: `${getApmField(asset.type)}:"${asset.id}"`, - }, - }); - - const getTabToApmTraces = useCallback( - (name: string) => ({ - ...apmTracesMenuItemLinkProps, - 'data-test-subj': 'infraAssetDetailsApmServicesLinkTab', - label: ( - - - - - {name} - - ), - }), - [apmTracesMenuItemLinkProps] - ); - const tabEntries: TabItem[] = useMemo( () => tabs.filter(isTabEnabled).map(({ name, ...tab }) => { - if (tab.id === ContentTabIds.LINK_TO_APM) { - return getTabToApmTraces(name); - } - return { ...tab, 'data-test-subj': `infraAssetDetails${capitalize(tab.id)}Tab`, @@ -192,7 +161,7 @@ const useTabs = (tabs: Tab[]) => { label: name, }; }), - [activeTabId, isTabEnabled, getTabToApmTraces, onTabClick, tabs] + [activeTabId, isTabEnabled, onTabClick, tabs] ); return { tabEntries }; diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/types.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/types.ts index 064b82094a505..653eb92b1830c 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/types.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/types.ts @@ -26,7 +26,6 @@ export enum ContentTabIds { ANOMALIES = 'anomalies', OSQUERY = 'osquery', LOGS = 'logs', - LINK_TO_APM = 'linkToApm', DASHBOARDS = 'dashboards', } diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/utils.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/utils.ts index 6356b42fdf0bb..1838e613e4402 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/utils.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/utils.ts @@ -5,9 +5,8 @@ * 2.0. */ -import type { InventoryItemType } from '@kbn/metrics-data-access-plugin/common'; import type { InfraMetadata } from '../../../common/http_api'; -import { INTEGRATIONS, APM_FILTER_FIELD_PER_ASSET_TYPE } from './constants'; +import { INTEGRATIONS } from './constants'; export const toTimestampRange = ({ from, to }: { from: string; to: string }) => { const fromTs = new Date(from).getTime(); @@ -35,14 +34,3 @@ export const getIntegrationsAvailable = (metadata?: InfraMetadata | null) => { .filter(([_, fields]) => metadata?.features?.some((f) => fields.includes(f.name))) .map(([name]) => name); }; - -export const getApmField = (assetType: InventoryItemType): string => { - switch (assetType) { - case 'host': - return APM_FILTER_FIELD_PER_ASSET_TYPE.host; - case 'container': - return APM_FILTER_FIELD_PER_ASSET_TYPE.container; - default: - return ''; - } -}; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 76b4aa11baf89..2d3c0aacfbd94 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -23084,8 +23084,6 @@ "xpack.infra.assetDetails.table.services.tooltip.tutorialLink": "Instrumenté par APM", "xpack.infra.assetDetails.table.tooltip.alertsLink": "alertes.", "xpack.infra.assetDetails.tabs.anomalies": "Anomalies", - "xpack.infra.assetDetails.tabs.apmLink": "APM", - "xpack.infra.assetDetails.tabs.linkToApm": "APM", "xpack.infra.assetDetails.tabs.logs": "Logs", "xpack.infra.assetDetails.tabs.metadata": "Métadonnées", "xpack.infra.assetDetails.tabs.metadata.seeLess": "Afficher moins", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 172efd4a34334..72b5ec7d10d8d 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -23074,8 +23074,6 @@ "xpack.infra.assetDetails.table.services.tooltip.tutorialLink": "APMがインストルメンテーションされました", "xpack.infra.assetDetails.table.tooltip.alertsLink": "アラート。", "xpack.infra.assetDetails.tabs.anomalies": "異常", - "xpack.infra.assetDetails.tabs.apmLink": "APM", - "xpack.infra.assetDetails.tabs.linkToApm": "APM", "xpack.infra.assetDetails.tabs.logs": "ログ", "xpack.infra.assetDetails.tabs.metadata": "メタデータ", "xpack.infra.assetDetails.tabs.metadata.seeLess": "簡易表示", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index cac113f4f420e..82ebf1e2d42ed 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -23102,8 +23102,6 @@ "xpack.infra.assetDetails.table.services.tooltip.tutorialLink": "APM-instrumented", "xpack.infra.assetDetails.table.tooltip.alertsLink": "告警。", "xpack.infra.assetDetails.tabs.anomalies": "异常", - "xpack.infra.assetDetails.tabs.apmLink": "APM", - "xpack.infra.assetDetails.tabs.linkToApm": "APM", "xpack.infra.assetDetails.tabs.logs": "日志", "xpack.infra.assetDetails.tabs.metadata": "元数据", "xpack.infra.assetDetails.tabs.metadata.seeLess": "显示更少", diff --git a/x-pack/test/functional/apps/infra/home_page.ts b/x-pack/test/functional/apps/infra/home_page.ts index 29cfa9bb37e0b..163c91593b33b 100644 --- a/x-pack/test/functional/apps/infra/home_page.ts +++ b/x-pack/test/functional/apps/infra/home_page.ts @@ -6,7 +6,6 @@ */ import expect from '@kbn/expect'; -import { parse } from 'url'; import { KUBERNETES_TOUR_STORAGE_KEY } from '@kbn/infra-plugin/public/pages/metrics/inventory_view/components/kubernetes_tour'; import { InfraSynthtraceEsClient } from '@kbn/apm-synthtrace'; import { enableInfrastructureContainerAssetView } from '@kbn/observability-plugin/common'; @@ -231,43 +230,10 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await pageObjects.assetDetails.clickLogsTab(); }); - after(async () => { - await retry.try(async () => { - await pageObjects.infraHome.closeFlyout(); - }); - }); - it('should render logs tab', async () => { await pageObjects.assetDetails.logsExists(); }); }); - - describe('APM Link Tab', () => { - before(async () => { - await pageObjects.infraHome.clickOnNode(); - await pageObjects.assetDetails.clickApmTabLink(); - await pageObjects.infraHome.waitForLoading(); - }); - - it('should navigate to APM traces', async () => { - const url = parse(await browser.getCurrentUrl()); - const query = decodeURIComponent(url.query ?? ''); - const kuery = 'kuery=host.hostname:"demo-stack-nginx-01"'; - - await retry.try(async () => { - expect(url.pathname).to.eql('/app/apm/traces'); - expect(query).to.contain(kuery); - }); - await returnTo(INVENTORY_PATH); - }); - }); - - it('Should show auto-refresh option', async () => { - const kibanaRefreshConfig = await pageObjects.timePicker.getRefreshConfig(); - expect(kibanaRefreshConfig.interval).to.equal('5'); - expect(kibanaRefreshConfig.units).to.equal('Seconds'); - expect(kibanaRefreshConfig.isPaused).to.equal(true); - }); }); describe('Asset Details flyout for a container', () => { @@ -285,6 +251,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }) ); + await pageObjects.infraHome.clickDismissKubernetesTourButton(); await pageObjects.infraHome.goToContainer(); await pageObjects.infraHome.goToTime(DATE_WITH_DOCKER_DATA); await pageObjects.infraHome.clickOnFirstNode(); @@ -369,33 +336,6 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await pageObjects.assetDetails.logsExists(); }); }); - - describe('APM Link Tab', () => { - before(async () => { - await pageObjects.infraHome.clickOnNode(); - await pageObjects.assetDetails.clickApmTabLink(); - await pageObjects.infraHome.waitForLoading(); - }); - - it('should navigate to APM traces', async () => { - const url = parse(await browser.getCurrentUrl()); - const query = decodeURIComponent(url.query ?? ''); - const kuery = 'kuery=container.id:"container-id-4"'; - - await retry.try(async () => { - expect(url.pathname).to.eql('/app/apm/traces'); - expect(query).to.contain(kuery); - }); - await returnTo(INVENTORY_PATH); - }); - }); - - it('Should show auto-refresh option', async () => { - const kibanaRefreshConfig = await pageObjects.timePicker.getRefreshConfig(); - expect(kibanaRefreshConfig.interval).to.equal('5'); - expect(kibanaRefreshConfig.units).to.equal('Seconds'); - expect(kibanaRefreshConfig.isPaused).to.equal(true); - }); }); it('shows query suggestions', async () => { From 08f0ed0168aa41179d2d5d31d4243b1b06b161ab Mon Sep 17 00:00:00 2001 From: Ryan Keairns Date: Fri, 23 Aug 2024 01:29:55 -0700 Subject: [PATCH 47/59] Size down log overview content (#191044) ## Summary Decrease the accordion title and code block content within the log overview tab. ------ The content in the log overview tab of the doc viewer flyout was large relative to surrounding UI elements (see below). The changes in this PR make it more consistent with other sections of the page. **Before** **After** _Font sizes now comparable to those used in and around the data grid, for example._ ![CleanShot 2024-08-21 at 21 55 23@2x](https://github.com/user-attachments/assets/32f06022-b9aa-4211-8cb6-01bc44abfbad) ### 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 --- .../doc_viewer_logs_overview/logs_overview_header.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/unified_doc_viewer/public/components/doc_viewer_logs_overview/logs_overview_header.tsx b/src/plugins/unified_doc_viewer/public/components/doc_viewer_logs_overview/logs_overview_header.tsx index 4bbc2993dedb0..c5b3b987c66a1 100644 --- a/src/plugins/unified_doc_viewer/public/components/doc_viewer_logs_overview/logs_overview_header.tsx +++ b/src/plugins/unified_doc_viewer/public/components/doc_viewer_logs_overview/logs_overview_header.tsx @@ -43,7 +43,7 @@ export function LogsOverviewHeader({ doc }: { doc: LogDocumentOverview }) { }); const accordionTitle = ( - +

{contentLabel}

); @@ -80,7 +80,7 @@ export function LogsOverviewHeader({ doc }: { doc: LogDocumentOverview }) { {logLevelAndTimestamp} - + {value} From 476018a2cde7e5c4270918495d1da73fd3e1e42e Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Fri, 23 Aug 2024 19:29:45 +1000 Subject: [PATCH 48/59] skip failing test suite (#191153) --- .../visualizations/group2/open_in_lens/agg_based/metric.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/metric.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/metric.ts index 711deb6b73e4c..860f7f2cee1c3 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/metric.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/metric.ts @@ -20,7 +20,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const panelActions = getService('dashboardPanelActions'); const kibanaServer = getService('kibanaServer'); - describe('Metric', function describeIndexTests() { + // Failing: See https://github.com/elastic/kibana/issues/191153 + describe.skip('Metric', function describeIndexTests() { const fixture = 'x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/metric.json'; From 13bd1930699499f5fa2632b149c105934c4e16e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Fri, 23 Aug 2024 13:59:34 +0200 Subject: [PATCH 49/59] Flaky #190724 (#191010) --- .../core/apps/core-apps-server-internal/src/core_app.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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 e9676c792292a..5ee8fe4938a44 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 @@ -29,13 +29,13 @@ import type { import type { InternalStaticAssets } from '@kbn/core-http-server-internal'; import { combineLatest, - concatMap, firstValueFrom, map, type Observable, ReplaySubject, shareReplay, Subject, + switchMap, takeUntil, timer, } from 'rxjs'; @@ -238,7 +238,7 @@ export class CoreAppsService { // Poll for updates combineLatest([savedObjectsClient$, timer(0, 10_000)]) .pipe( - concatMap(async ([soClient]) => { + switchMap(async ([soClient]) => { try { const persistedOverrides = await soClient.get>( DYNAMIC_CONFIG_OVERRIDES_SO_TYPE, @@ -300,7 +300,10 @@ export class CoreAppsService { await soClient.create(DYNAMIC_CONFIG_OVERRIDES_SO_TYPE, newGlobalOverrides, { id: DYNAMIC_CONFIG_OVERRIDES_SO_ID, overwrite: true, + refresh: false, }); + // set it again in memory in case the timer polling the SO for updates has overridden it during this update. + this.configService.setDynamicConfigOverrides(req.body); } catch (err) { if (err instanceof ValidationError) { return res.badRequest({ body: err }); From f9c43f61c987ec0b236f87012fda1fd4c22c7f2a Mon Sep 17 00:00:00 2001 From: Dima Arnautov Date: Fri, 23 Aug 2024 15:28:57 +0200 Subject: [PATCH 50/59] [ML] Replace apiDoc annotations with routes definitions for OpenAPI spec generation (#190840) ## Summary - Removes `apidoc-markdown` dependency and custom scripts for generating internal documentation for ML Kibana endpoints - Replaces apidoc annotations with `summary` and `description` props for route handlers and kbn-schemas to generate an OpenAPI spec file - `/internal/ml/jobs/delete_jobs` route was not versioned for some reason, I changed that #### How to test 1. Enable OAS endpoint in `kibana.dev.yml` ```yaml server.oas.enabled: true ``` 2. Start Kibana dev server ```bash yarn start --no-base-path ``` 3. Call the OAS endpoint for ML _internal_ routes ```bash curl -s -u : http://localhost:5601/api/oas\?pathStartsWith\=/internal/ml\&access\=internal -o ml_kibana_openapi.json ``` --- package.json | 1 - renovate.json | 9 - x-pack/plugins/ml/package.json | 13 - .../apidoc_scripts/apidoc_config/apidoc.json | 198 -------- .../apidoc_config/apidoc_config.ts | 19 - .../apidoc_scripts/apidoc_config/index.js | 9 - .../content_page/content_page.ts | 67 --- .../apidoc_scripts/content_page/index.js | 9 - .../header_generator/header_generator.ts | 24 - .../apidoc_scripts/header_generator/index.js | 9 - .../apidoc_scripts/schema_extractor/index.ts | 8 - .../schema_extractor/schema_extractor.test.ts | 234 --------- .../schema_extractor/schema_extractor.ts | 185 ------- .../apidoc_scripts/schema_parser/index.js | 9 - .../schema_parser/schema_parser.ts | 38 -- .../apidoc_scripts/schema_worker/index.js | 9 - .../schema_worker/schema_worker.ts | 85 ---- .../ml/scripts/apidoc_scripts/template.md | 147 ------ .../ml/scripts/apidoc_scripts/types.ts | 43 -- .../apidoc_scripts/version_filter/index.js | 9 - .../version_filter/version_filter.ts | 21 - x-pack/plugins/ml/server/routes/README.md | 17 +- x-pack/plugins/ml/server/routes/alerting.ts | 8 +- .../plugins/ml/server/routes/annotations.ts | 31 +- .../ml/server/routes/anomaly_detectors.ts | 238 +++------ x-pack/plugins/ml/server/routes/calendars.ts | 54 +- .../ml/server/routes/data_frame_analytics.ts | 181 ++----- .../ml/server/routes/data_visualizer.ts | 21 +- x-pack/plugins/ml/server/routes/datafeeds.ts | 110 +--- .../ml/server/routes/fields_service.ts | 43 +- x-pack/plugins/ml/server/routes/filters.ts | 81 +-- .../ml/server/routes/inference_models.ts | 19 +- .../ml/server/routes/job_audit_messages.ts | 34 +- .../plugins/ml/server/routes/job_service.ts | 318 +++--------- .../ml/server/routes/job_validation.ts | 58 +-- x-pack/plugins/ml/server/routes/management.ts | 13 +- .../ml/server/routes/model_management.ts | 18 +- x-pack/plugins/ml/server/routes/modules.ts | 365 ++------------ .../plugins/ml/server/routes/notifications.ts | 18 +- .../ml/server/routes/results_service.ts | 125 ++--- .../plugins/ml/server/routes/saved_objects.ts | 120 +---- .../routes/schemas/annotations_schema.ts | 13 + .../schemas/anomaly_detectors_schema.ts | 72 +-- .../server/routes/schemas/calendars_schema.ts | 3 +- .../schemas/data_frame_analytics_schema.ts | 11 +- .../routes/schemas/data_visualizer_schema.ts | 11 +- .../routes/schemas/fields_service_schema.ts | 75 ++- .../server/routes/schemas/filters_schema.ts | 5 +- .../server/routes/schemas/inference_schema.ts | 24 +- .../schemas/job_audit_messages_schema.ts | 3 +- .../routes/schemas/job_service_schema.ts | 13 +- .../ml/server/routes/schemas/modules.ts | 233 ++++++--- .../routes/schemas/notifications_schema.ts | 15 +- .../routes/schemas/results_service_schema.ts | 71 +-- .../routes/schemas/runtime_mappings_schema.ts | 1 - .../ml/server/routes/schemas/saved_objects.ts | 5 +- x-pack/plugins/ml/server/routes/system.ts | 60 +-- .../ml/server/routes/trained_models.ts | 165 ++---- x-pack/plugins/ml/tsconfig.json | 1 - yarn.lock | 471 +----------------- 60 files changed, 791 insertions(+), 3479 deletions(-) delete mode 100644 x-pack/plugins/ml/package.json delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/apidoc_config/apidoc.json delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/apidoc_config/apidoc_config.ts delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/apidoc_config/index.js delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/content_page/content_page.ts delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/content_page/index.js delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/header_generator/header_generator.ts delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/header_generator/index.js delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/schema_extractor/index.ts delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/schema_extractor/schema_extractor.test.ts delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/schema_extractor/schema_extractor.ts delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/schema_parser/index.js delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/schema_parser/schema_parser.ts delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/schema_worker/index.js delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/schema_worker/schema_worker.ts delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/template.md delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/types.ts delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/version_filter/index.js delete mode 100644 x-pack/plugins/ml/scripts/apidoc_scripts/version_filter/version_filter.ts diff --git a/package.json b/package.json index aeb93ebd56b5e..038ba497cfa1b 100644 --- a/package.json +++ b/package.json @@ -1625,7 +1625,6 @@ "@wojtekmaj/enzyme-adapter-react-17": "^0.6.7", "@yarnpkg/lockfile": "^1.1.0", "aggregate-error": "^3.1.0", - "apidoc-markdown": "^7.3.2", "argsplit": "^1.0.5", "autoprefixer": "^10.4.7", "axe-core": "^4.10.0", diff --git a/renovate.json b/renovate.json index 0d9b15c7cf067..efc05624f16f7 100644 --- a/renovate.json +++ b/renovate.json @@ -437,15 +437,6 @@ "minimumReleaseAge": "7 days", "enabled": true }, - { - "groupName": "machine learning modules", - "matchDepNames": ["apidoc-markdown"], - "reviewers": ["team:ml-ui"], - "matchBaseBranches": ["main"], - "labels": ["Team:ML", "release_note:skip", "backport:all-open"], - "minimumReleaseAge": "7 days", - "enabled": true - }, { "groupName": "Kibana ES|QL Team", "matchDepNames": ["recast"], diff --git a/x-pack/plugins/ml/package.json b/x-pack/plugins/ml/package.json deleted file mode 100644 index df3b357a415ee..0000000000000 --- a/x-pack/plugins/ml/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "author": "Elastic", - "name": "@kbn/ml-plugin", - "version": "1.0.0", - "private": true, - "license": "Elastic License 2.0", - "scripts": { - "generateHeader": "node scripts/apidoc_scripts/header_generator/index.js", - "generateApidocConfig": "node scripts/apidoc_scripts/apidoc_config/index.js", - "generateContentPage": "node scripts/apidoc_scripts/content_page/index.js", - "apiDocs": "yarn generateContentPage && yarn generateHeader && yarn generateApidocConfig && cd ./scripts/apidoc_scripts/ && ../../../../../node_modules/.bin/apidoc-markdown -i ../../server/routes -c ./apidoc_config.json -o ./ML_API.mdx --parse-workers apischema=./schema_worker/index.js --parse-parsers apischema=./schema_parser/index.js --parse-filters apiversion=./version_filter/index.js --header ./header.md --template ./template.md" - } -} diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/apidoc_config/apidoc.json b/x-pack/plugins/ml/scripts/apidoc_scripts/apidoc_config/apidoc.json deleted file mode 100644 index f262a3c6029a7..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/apidoc_config/apidoc.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "name": "ml_kibana_api", - "description": "This is the documentation of the REST API provided by the Machine Learning Kibana plugin. Each API is experimental and can include breaking changes in any version.", - "title": "ML Kibana API", - "order": [ - "DataFrameAnalytics", - "GetDataFrameAnalytics", - "GetDataFrameAnalyticsById", - "GetDataFrameAnalyticsStats", - "GetDataFrameAnalyticsStatsById", - "EvaluateDataFrameAnalytics", - "ExplainDataFrameAnalytics", - "StartDataFrameAnalyticsJob", - "StopsDataFrameAnalyticsJob", - "GetDataFrameAnalyticsMessages", - "UpdateDataFrameAnalytics", - "DeleteDataFrameAnalytics", - "JobsExist", - "GetDataFrameAnalyticsIdMap", - "AnalyticsNewJobCaps", - "ValidateDataFrameAnalytics", - - "DataVisualizer", - "GetHistogramsForFields", - - "AnomalyDetectors", - "CreateAnomalyDetectors", - "OpenAnomalyDetectorsJob", - "GetAnomalyDetectors", - "GetAnomalyDetectorsById", - "GetAnomalyDetectorsStats", - "GetAnomalyDetectorsStatsById", - "CloseAnomalyDetectorsJob", - "ResetAnomalyDetectorsJob", - "ValidateAnomalyDetector", - "ForecastAnomalyDetector", - "GetRecords", - "GetBuckets", - "GetOverallBuckets", - "GetCategories", - "UpdateAnomalyDetectors", - "DeleteAnomalyDetectorsJob", - - "FileDataVisualizer", - "AnalyzeFile", - - "ResultsService", - "GetAnomaliesTableData", - "GetDatafeedResultsChartData", - "GetCategoryDefinition", - "GetMaxAnomalyScore", - "GetCategoryExamples", - "GetPartitionFieldsValues", - "AnomalySearch", - "GetCategorizerStats", - "GetCategoryStoppedPartitions", - "GetAnomalyChartsData", - "GetAnomalyRecords", - - "Modules", - "DataRecognizer", - "RecognizeIndex", - "GetModule", - "SetupModule", - "CheckExistingModuleJobs", - - "Notifications", - "GetNotifications", - "GetNotificationCounts", - - "Annotations", - "GetAnnotations", - "IndexAnnotations", - "DeleteAnnotation", - - "JobService", - "ForceStartDatafeeds", - "StopDatafeeds", - "CloseJobs", - "ResetJobs", - "JobsSummary", - "JobsWithTimeRange", - "GetJobForCloning", - "CreateFullJobsList", - "GetAllGroups", - "JobsExist", - "NewJobCaps", - "NewJobLineChart", - "NewJobPopulationChart", - "GetAllJobAndGroupIds", - "GetLookBackProgress", - "ValidateCategoryValidation", - "TopCategories", - "DatafeedPreview", - "UpdateGroups", - "BlockingJobTasks", - "DeleteJobs", - "RevertModelSnapshot", - "BulkCreateJobs", - - "Calendars", - "PutCalendars", - "GetCalendars", - "GetCalendarById", - "UpdateCalendarById", - "DeleteCalendarById", - - "Filters", - "CreateFilter", - "GetFilters", - "GetFilterById", - "GetFiltersStats", - "UpdateFilter", - "DeleteFilter", - - "Indices", - "FieldCaps", - - "SystemRoutes", - "HasPrivileges", - "MlCapabilitiesResponse", - "MlNodeCount", - "MlInfo", - "MlEsSearch", - "MlIndexExists", - "MlReindexWithPipeline", - "MlSpecificIndexExists", - - "JobAuditMessages", - "GetJobAuditMessages", - "GetAllJobAuditMessages", - "ClearJobAuditMessages", - - "JobValidation", - "EstimateBucketSpan", - "CalculateModelMemoryLimit", - "ValidateCardinality", - "ValidateJob", - "ValidateDataFeedPreview", - - "DatafeedService", - "CreateDatafeed", - "PreviewDatafeed", - "GetDatafeeds", - "GetDatafeed", - "GetDatafeedsStats", - "GetDatafeedStats", - "UpdateDatafeed", - "StartDatafeed", - "StopDatafeed", - "DeleteDatafeed", - - "FieldsService", - "GetCardinalityOfFields", - "GetTimeFieldRange", - - "MLSavedObjects", - "SavedObjectsStatus", - "SyncMLSavedObjects", - "InitializeMLSavedObjects", - "SyncCheck", - "UpdateJobsSpaces", - "UpdateTrainedModelsSpaces", - "RemoveMLSpaceAwareItemsFromCurrentSpace", - "JobsSpaces", - "TrainedModelsSpaces", - "CanDeleteMLSpaceAwareItems", - - "TrainedModels", - "GetTrainedModel", - "GetTrainedModelStats", - "GetTrainedModelStatsById", - "GetTrainedModelPipelines", - "StartTrainedModelDeployment", - "UpdateTrainedModelDeployment", - "StopTrainedModelDeployment", - "PutTrainedModel", - "DeleteTrainedModel", - "SimulateIngestPipeline", - "InferTrainedModelDeployment", - "CreateInferencePipeline", - "GetIngestPipelines", - "GetTrainedModelDownloadList", - "GetElserConfig", - "InstallElasticTrainedModel", - "ModelsDownloadStatus", - - "Alerting", - "PreviewAlert", - - "Management", - "ManagementList", - - "ModelManagement", - "GetModelManagementNodesOverview", - "GetModelManagementMemoryUsage" - ] -} diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/apidoc_config/apidoc_config.ts b/x-pack/plugins/ml/scripts/apidoc_scripts/apidoc_config/apidoc_config.ts deleted file mode 100644 index e5498d88dc00e..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/apidoc_config/apidoc_config.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 * as fs from 'fs'; -import * as path from 'path'; -import { kibanaPackageJson } from '@kbn/repo-info'; - -export function generateConfig() { - const apidocConfig = JSON.parse(fs.readFileSync(path.resolve(__dirname, 'apidoc.json'), 'utf8')); - apidocConfig.version = kibanaPackageJson.version; - fs.writeFileSync( - path.resolve(__dirname, '..', 'apidoc_config.json'), - JSON.stringify(apidocConfig, null, 2) - ); -} diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/apidoc_config/index.js b/x-pack/plugins/ml/scripts/apidoc_scripts/apidoc_config/index.js deleted file mode 100644 index 6a1bf35da557e..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/apidoc_config/index.js +++ /dev/null @@ -1,9 +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. - */ - -require('../../../../../../src/setup_node_env'); -require('./apidoc_config').generateConfig(); diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/content_page/content_page.ts b/x-pack/plugins/ml/scripts/apidoc_scripts/content_page/content_page.ts deleted file mode 100644 index 8b992817c843c..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/content_page/content_page.ts +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as fs from 'fs'; -import * as path from 'path'; -// @ts-ignore can only be default-imported using the 'esModuleInterop' flag -import moment from 'moment'; -import { kibanaPackageJson } from '@kbn/repo-info'; -// eslint-disable-next-line import/no-extraneous-dependencies -import { createDoc } from 'apidoc-light'; - -interface Group { - anchor: string; - text: string; -} - -const getContent = (groups: Group[]) => { - const groupsStr = groups - .map(({ anchor, text }) => `- `) - .join('\n'); - - return `--- -id: uiMlKibanaRestApi -slug: /ml-team/docs/ui/rest-api/ml-kibana-rest-api -title: Machine Learning Kibana REST API -image: https://source.unsplash.com/400x175/?Nature -description: This page contains documentation for the ML Kibana REST API. -date: ${moment().format('YYYY-MM-DD')} -tags: ['machine learning','internal docs', 'UI'] ---- - -_Updated for ${kibanaPackageJson.version}_ - -Some of the features of the Machine Learning (ML) Kibana plugin are provided via a REST API, which is ideal for creating an integration with the ML plugin. - -Each API is experimental and can include breaking changes in any version of the ML plugin, or might have been entirely removed from the plugin. - -- - -The following APIs are available: - -${groupsStr}`; -}; - -export const generateContentPage = () => { - const doc = createDoc({ - src: path.resolve(__dirname, '..', '..', '..', 'server', 'routes'), - config: path.resolve(__dirname, '..', 'apidoc_config', 'apidoc.json'), - // if you don't want to generate the output files: - dryRun: true, - // if you don't want to see any log output: - silent: true, - }); - - const groups = [...new Set(doc.data.map((v) => v.group))].map((group) => { - return { - anchor: `-${group.toLowerCase()}`, - text: group.replace(/([a-z])([A-Z])/g, '$1 $2'), - }; - }); - - fs.writeFileSync(path.resolve(__dirname, '..', 'ml_kibana_api.mdx'), getContent(groups)); -}; diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/content_page/index.js b/x-pack/plugins/ml/scripts/apidoc_scripts/content_page/index.js deleted file mode 100644 index 5b0aced7aed1b..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/content_page/index.js +++ /dev/null @@ -1,9 +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. - */ - -require('../../../../../../src/setup_node_env'); -require('./content_page').generateContentPage(); diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/header_generator/header_generator.ts b/x-pack/plugins/ml/scripts/apidoc_scripts/header_generator/header_generator.ts deleted file mode 100644 index 1dd682b442399..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/header_generator/header_generator.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as fs from 'fs'; -import * as path from 'path'; -// @ts-ignore can only be default-imported using the 'esModuleInterop' flag -import moment from 'moment'; - -const getHeaderString = () => `--- -id: uiMlApi -slug: /ml-team/docs/ui/rest-api/ml-api -title: ML API reference -description: Reference documentation for the ML API. -date: ${moment().format('YYYY-MM-DD')} -tags: ['machine learning','internal docs', 'UI'] ----`; - -export function run() { - fs.writeFileSync(path.resolve(__dirname, '..', 'header.md'), getHeaderString()); -} diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/header_generator/index.js b/x-pack/plugins/ml/scripts/apidoc_scripts/header_generator/index.js deleted file mode 100644 index 6a7235d0e664f..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/header_generator/index.js +++ /dev/null @@ -1,9 +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. - */ - -require('../../../../../../src/setup_node_env'); -require('./header_generator').run(); diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/schema_extractor/index.ts b/x-pack/plugins/ml/scripts/apidoc_scripts/schema_extractor/index.ts deleted file mode 100644 index a352a28aa6649..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/schema_extractor/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export { extractDocumentation, type DocEntry } from './schema_extractor'; diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/schema_extractor/schema_extractor.test.ts b/x-pack/plugins/ml/scripts/apidoc_scripts/schema_extractor/schema_extractor.test.ts deleted file mode 100644 index 75c29ed052fa7..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/schema_extractor/schema_extractor.test.ts +++ /dev/null @@ -1,234 +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 { extractDocumentation } from './schema_extractor'; -import * as path from 'path'; - -// TODO: fix the schema extractor to maintain the same functionality as before on TS v5 -describe.skip('schema_extractor', () => { - it('should serialize schema definition', () => { - const result = extractDocumentation([ - path.resolve( - __dirname, - '..', - '..', - '..', - 'server', - 'routes', - 'schemas', - 'datafeeds_schema.ts' - ), - ]); - - expect(result.get('startDatafeedSchema')).toEqual([ - { - name: 'start', - documentation: '', - type: 'string | number', - }, - { - name: 'end', - documentation: '', - type: 'string | number', - }, - { - name: 'timeout', - documentation: '', - type: 'any', - }, - ]); - - expect(result.get('datafeedConfigSchema')).toEqual([ - { - name: 'datafeed_id', - documentation: '', - type: 'string', - }, - { - name: 'feed_id', - documentation: '', - type: 'string', - }, - { - name: 'aggregations', - documentation: '', - type: 'any', - }, - { - name: 'aggs', - documentation: '', - type: 'any', - }, - { - name: 'chunking_config', - documentation: '', - type: 'chunking_config', - nested: [ - { - name: 'mode', - documentation: '', - type: '"auto" | "manual" | "off"', - }, - { - name: 'time_span', - documentation: '', - type: 'string | number', - }, - ], - }, - { - name: 'frequency', - documentation: '', - type: 'string', - }, - { - name: 'indices', - documentation: '', - type: 'string[]', - }, - { - name: 'indexes', - documentation: '', - type: 'string[]', - }, - { - name: 'job_id', - documentation: '', - type: 'string', - }, - { - name: 'query', - documentation: '', - type: 'any', - }, - { - name: 'max_empty_searches', - documentation: '', - type: 'number', - }, - { - name: 'query_delay', - documentation: '', - type: 'string', - }, - { - name: 'script_fields', - documentation: '', - type: 'any', - }, - { - name: 'runtime_mappings', - documentation: '', - type: 'any', - }, - { - name: 'scroll_size', - documentation: '', - type: 'number', - }, - { - name: 'delayed_data_check_config', - documentation: '', - type: 'any', - }, - { - name: 'indices_options', - documentation: '', - type: 'indices_options', - nested: [ - { - name: 'expand_wildcards', - documentation: '', - type: '"all" | "open" | "closed" | "hidden" | "none"[]', - }, - { - name: 'ignore_unavailable', - documentation: '', - type: 'boolean', - }, - { - name: 'allow_no_indices', - documentation: '', - type: 'boolean', - }, - { - name: 'ignore_throttled', - documentation: '', - type: 'boolean', - }, - ], - }, - ]); - - expect(result.get('deleteDatafeedQuerySchema')).toEqual([ - { - name: 'force', - documentation: '', - type: 'boolean', - }, - ]); - }); - - it('serializes schema with nested objects and nullable', () => { - const result = extractDocumentation([ - path.resolve( - __dirname, - '..', - '..', - '..', - 'server', - 'routes', - 'schemas', - 'results_service_schema.ts' - ), - ]); - expect(result.get('getCategorizerStatsSchema')).toEqual([ - { - name: 'partitionByValue', - documentation: - 'Optional value to fetch the categorizer stats where results are filtered by partition_by_value = value', - type: 'any', // FIXME string - }, - ]); - - // @ts-ignore - expect(result.get('partitionFieldValuesSchema')![5].nested[0]).toEqual({ - name: 'partition_field', - documentation: '', - type: 'partition_field', - nested: [ - { - name: 'applyTimeRange', - documentation: '', - type: 'boolean', - }, - { - name: 'anomalousOnly', - documentation: '', - type: 'boolean', - }, - { - name: 'sort', - documentation: '', - type: 'sort', - nested: [ - { - name: 'by', - documentation: '', - type: 'string', - }, - { - name: 'order', - documentation: '', - type: 'string', - }, - ], - }, - ], - }); - }); -}); diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/schema_extractor/schema_extractor.ts b/x-pack/plugins/ml/scripts/apidoc_scripts/schema_extractor/schema_extractor.ts deleted file mode 100644 index 4c2e34398f57e..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/schema_extractor/schema_extractor.ts +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as ts from 'typescript'; -export interface DocEntry { - name: string; - documentation?: string; - type: string; - optional?: boolean; - nested?: DocEntry[]; -} - -/** Generate documentation for all schema definitions in a set of .ts files */ -export function extractDocumentation(fileNames: string[]): Map { - const options = { - target: ts.ScriptTarget.ES2015, - module: ts.ModuleKind.CommonJS, - }; - - // Build a program using the set of root file names in fileNames - const program = ts.createProgram(fileNames, options); - - // Get the checker, we will use it to find more about properties - const checker: ts.TypeChecker = program.getTypeChecker(); - - // Result map - const result = new Map(); - - // Visit every sourceFile in the program - for (const sourceFile of program.getSourceFiles()) { - if (!sourceFile.isDeclarationFile) { - // Walk the tree to search for schemas - ts.forEachChild(sourceFile, visit); - } - } - - return result; - - /** visit nodes finding exported schemas */ - function visit(node: ts.Node) { - if (isNodeExported(node) && ts.isVariableDeclaration(node)) { - const schemaName = node.name.getText(); - try { - const schemaType = checker.getTypeAtLocation(node); - result.set(schemaName, extractDocEntries(schemaType!)); - } catch (e) { - // FIXME TypeError: Cannot read properties of undefined (reading 'flags') - // eslint-disable-next-line no-console - console.error(e, 'Unable to extract type at location'); - } - } - - if (node.getChildCount() > 0) { - ts.forEachChild(node, visit); - } - } - - /** - * Extracts doc entries for the schema definition - * @param schemaType - */ - function extractDocEntries(schemaType: ts.Type): DocEntry[] { - const collection: DocEntry[] = []; - - const members = getTypeMembers(schemaType); - - if (!members) { - return collection; - } - - members.forEach((member) => { - collection.push(serializeProperty(member)); - }); - - return collection; - } - - /** - * Resolves members of the type - * @param type - */ - function getTypeMembers(type: ts.Type): ts.Symbol[] | undefined { - const argsOfType = checker.getTypeArguments(type as unknown as ts.TypeReference); - - let members = type.getProperties(); - - if (argsOfType && argsOfType.length > 0) { - members = argsOfType[0].getProperties(); - } - - return members; - } - - /** - * Extracts properties of the type. - * @param type - */ - function resolveTypeProperties(type: ts.Type): ts.Symbol[] { - let props = type.getProperties(); - - const typeArguments = checker.getTypeArguments(type as unknown as ts.TypeReference); - - if (type.aliasTypeArguments) { - // @ts-ignores - props = type.aliasTypeArguments[0].getProperties(); - } - - if (typeArguments.length > 0) { - props = resolveTypeProperties(typeArguments[0]); - } - - return props; - } - - function serializeProperty(symbol: ts.Symbol): DocEntry { - // @ts-ignore - const typeOfSymbol = symbol.type; - if (typeOfSymbol === undefined) { - return { - name: symbol.getName(), - documentation: getCommentString(symbol), - type: 'any', - }; - } - - let targetType: ts.TypeReference | ts.Type = - typeOfSymbol.getProperty('type')?.type ?? typeOfSymbol; - - const isArrayOf = targetType.symbol?.name === 'Array'; - if (isArrayOf) { - targetType = checker.getTypeArguments(targetType as ts.TypeReference)[0]; - } - - let typeAsString = checker.typeToString(targetType); - const nestedEntries: DocEntry[] = []; - - if ( - targetType.aliasTypeArguments || - checker.getTypeArguments(targetType as ts.TypeReference).length > 0 - ) { - // Resolve complex types, objects and arrays, that contain nested properties - const typeProperties = resolveTypeProperties(targetType); - - if (Array.isArray(typeProperties) && typeProperties.length > 0) { - // we hit an object or collection - typeAsString = - targetType.symbol?.name === 'Array' || typeOfSymbol.symbol?.name === 'Array' - ? `${symbol.getName()}[]` - : symbol.getName(); - - typeProperties.forEach((member) => { - nestedEntries.push(serializeProperty(member)); - }); - } - } - - const res = { - name: symbol.getName(), - documentation: getCommentString(symbol), - type: isArrayOf ? `${typeAsString}[]` : typeAsString, - ...(nestedEntries.length > 0 ? { nested: nestedEntries } : {}), - }; - - return res; - } - - function getCommentString(symbol: ts.Symbol): string { - return ts.displayPartsToString(symbol.getDocumentationComment(checker)).replace(/\n/g, ' '); - } - - /** - * True if this is visible outside this file, false otherwise - */ - function isNodeExported(node: ts.Node): boolean { - return ( - // eslint-disable-next-line no-bitwise - (ts.getCombinedModifierFlags(node as ts.Declaration) & ts.ModifierFlags.Export) !== 0 || - (!!node.parent && node.parent.kind === ts.SyntaxKind.SourceFile) - ); - } -} diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/schema_parser/index.js b/x-pack/plugins/ml/scripts/apidoc_scripts/schema_parser/index.js deleted file mode 100644 index 46bf224d0d78c..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/schema_parser/index.js +++ /dev/null @@ -1,9 +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. - */ - -require('../../../../../../src/setup_node_env'); -module.exports = require('./schema_parser'); diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/schema_parser/schema_parser.ts b/x-pack/plugins/ml/scripts/apidoc_scripts/schema_parser/schema_parser.ts deleted file mode 100644 index 2e43e2700197b..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/schema_parser/schema_parser.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export function parse(content?: string) { - const schema = typeof content === 'string' && content.trim(); - - if (!schema) { - return null; - } - - const result = schema.match(/\((\w+)\)\s+(\w+)/); - - if (result === null || result.length < 3) { - throw new Error( - 'Invalid schema definition. Required format is `@apiSchema () `' - ); - } - - const group = result[1]; - - return { - group, - name: result[2], - }; -} - -/** - * Exports - */ -module.exports = { - parse, - path: 'local.schemas', - method: 'push', -}; diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/schema_worker/index.js b/x-pack/plugins/ml/scripts/apidoc_scripts/schema_worker/index.js deleted file mode 100644 index 0c86ab03c7da4..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/schema_worker/index.js +++ /dev/null @@ -1,9 +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. - */ - -require('../../../../../../src/setup_node_env'); -module.exports = require('./schema_worker'); diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/schema_worker/schema_worker.ts b/x-pack/plugins/ml/scripts/apidoc_scripts/schema_worker/schema_worker.ts deleted file mode 100644 index b0c228192de75..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/schema_worker/schema_worker.ts +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as fs from 'fs'; -import * as path from 'path'; -import type { DocEntry } from '../schema_extractor'; -import { extractDocumentation } from '../schema_extractor'; -import type { ApiParameter, Block } from '../types'; - -export function postProcess(parsedFiles: any[]): void { - const schemasDirPath = path.resolve(__dirname, '..', '..', '..', 'server', 'routes', 'schemas'); - - const schemaFiles = fs - .readdirSync(schemasDirPath) - .map((filename) => path.resolve(schemasDirPath, filename)); - - const schemaDocs = extractDocumentation(schemaFiles); - - parsedFiles.forEach((parsedFile) => { - // @ts-ignore - parsedFile.forEach((block: Block) => { - const { - local: { schemas }, - } = block; - if (!schemas || schemas.length === 0) return; - - for (const schema of schemas) { - const { name: schemaName, group: paramsGroup } = schema; - const schemaFields = schemaDocs.get(schemaName); - - if (!schemaFields) return; - - updateBlockParameters(schemaFields, block, paramsGroup); - } - }); - }); -} - -/** - * Extracts schema's doc entries to apidoc parameters - * @param docEntries - * @param block - * @param paramsGroup - */ -function updateBlockParameters(docEntries: DocEntry[], block: Block, paramsGroup: string): void { - if (!block.local.parameter) { - block.local.parameter = {}; - } - if (!block.local.parameter.fields) { - block.local.parameter.fields = {}; - } - - if (!block.local.parameter.fields![paramsGroup]) { - block.local.parameter.fields![paramsGroup] = []; - } - const collection = block.local.parameter.fields![paramsGroup] as ApiParameter[]; - - for (const field of docEntries) { - collection.push({ - group: paramsGroup, - type: escapeSpecial(field.type), - size: undefined, - allowedValues: undefined, - optional: !!field.optional, - field: field.name, - defaultValue: undefined, - description: field.documentation, - }); - - if (field.nested) { - updateBlockParameters(field.nested, block, field.name); - } - } -} - -/** - * Escape special character to make sure the markdown table isn't broken - */ -function escapeSpecial(str: string): string { - return str.replace(/\|/g, '\\|'); -} diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/template.md b/x-pack/plugins/ml/scripts/apidoc_scripts/template.md deleted file mode 100644 index 11a469bfeec5d..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/template.md +++ /dev/null @@ -1,147 +0,0 @@ -<% if (header) { -%> -<%- header %> -<% } -%> - - -v<%= project.version %> - -<%= project.description %> - -<% if (prepend) { -%> -<%- prepend %> -<% } -%> -<% data.forEach(group => { -%> - -## <%= group.name %> -<% group.subs.forEach(sub => { -%> - -### <%= sub.title %> -[Back to top](#top) - -<%- sub.description ? `${sub.description}\n\n` : '' -%> -``` -<%- sub.type.toUpperCase() %> <%= sub.url %> -``` -<% if (sub.header && sub.header.fields && sub.header.fields.Header.length) { -%> - -##### Headers -| Name | Type | Description | -|---------|-----------|--------------------------------------| -<% sub.header.fields.Header.forEach(header => { -%> -| <%- header.field %> | <%- header.type ? `\`${header.type}\`` : '' %> | <%- header.optional ? '**optional**' : '' %><%- header.description %> | -<% }) // foreach parameter -%> -<% } // if parameters -%> -<% if (sub.header && sub.header.examples && sub.header.examples.length) { -%> - -##### Header examples -<% sub.header.examples.forEach(example => { -%> -<%= example.title %> - -``` -<%- example.content %> -``` -<% }) // foreach example -%> -<% } // if example -%> -<% if (sub.parameter && sub.parameter.fields) { -%> -<% Object.keys(sub.parameter.fields).forEach(g => { -%> - -##### Parameters - `<%= g -%>` -| Name | Type | Description | -|:---------|:-----------|:--------------------------------------| -<% sub.parameter.fields[g].forEach(param => { -%> -| <%- param.field -%> | <%- param.type ? `\`${param.type}\`` : '' %> | <%- param.optional ? '**optional** ' : '' -%><%- param.description -%> -<% if (param.defaultValue) { -%> -_Default value: <%= param.defaultValue %>_
<% } -%> -<% if (param.size) { -%> -_Size range: <%- param.size %>_
<% } -%> -<% if (param.allowedValues) { -%> -_Allowed values: <%- param.allowedValues %>_<% } -%> | -<% }) // foreach (group) parameter -%> -<% }) // foreach param parameter -%> -<% } // if parameters -%> -<% if (sub.examples && sub.examples.length) { -%> - -##### Examples -<% sub.examples.forEach(example => { -%> -<%= example.title %> - -``` -<%- example.content %> -``` -<% }) // foreach example -%> -<% } // if example -%> -<% if (sub.parameter && sub.parameter.examples && sub.parameter.examples.length) { -%> - -##### Parameters examples -<% sub.parameter.examples.forEach(exampleParam => { -%> -`<%= exampleParam.type %>` - <%= exampleParam.title %> - -```<%= exampleParam.type %> -<%- exampleParam.content %> -``` -<% }) // foreach exampleParam -%> -<% } // if exampleParam -%> -<% if (sub.success && sub.success.fields) { -%> - -##### Success response -<% Object.keys(sub.success.fields).forEach(g => { -%> - -###### Success response - `<%= g %>` -| Name | Type | Description | -|:---------|:-----------|:--------------------------------------| -<% sub.success.fields[g].forEach(param => { -%> -| <%- param.field %> | <%- param.type ? `\`${param.type}\`` : '' %> | <%- param.optional ? '**optional**' : '' %><%- param.description -%> -<% if (param.defaultValue) { -%> -_Default value: <%- param.defaultValue %>_
<% } -%> -<% if (param.size) { -%> -_Size range: <%- param.size -%>_
<% } -%> -<% if (param.allowedValues) { -%> -_Allowed values: <%- param.allowedValues %>_<% } -%> | -<% }) // foreach (group) parameter -%> -<% }) // foreach field -%> -<% } // if success.fields -%> -<% if (sub.success && sub.success.examples && sub.success.examples.length) { -%> - -##### Success response example -<% sub.success.examples.forEach(example => { -%> - -###### Success response example - `<%= example.title %>` - -``` -<%- example.content %> -``` -<% }) // foreach success example -%> -<% } // if success.examples -%> -<% if (sub.error && sub.error.fields) { -%> - -##### Error response -<% Object.keys(sub.error.fields).forEach(g => { -%> - -###### Error response - `<%= g %>` -| Name | Type | Description | -|:---------|:-----------|:--------------------------------------| -<% sub.error.fields[g].forEach(param => { -%> -| <%- param.field %> | <%- param.type ? `\`${param.type}\`` : '' %> | <%- param.optional ? '**optional**' : '' %><%- param.description -%> -<% if (param.defaultValue) { -%> -_Default value: <%- param.defaultValue %>_
<% } -%> -<% if (param.size) { -%> -_Size range: <%- param.size -%>_
<% } -%> -<% if (param.allowedValues) { -%> -_Allowed values: <%- param.allowedValues %>_<% } -%> | -<% }) // foreach (group) parameter -%> -<% }) // foreach field -%> -<% } // if error.fields -%> -<% if (sub.error && sub.error.examples && sub.error.examples.length) { -%> - -##### Error response example -<% sub.error.examples.forEach(example => { -%> - -###### Error response example - `<%= example.title %>` - -``` -<%- example.content %> -``` -<% }) // foreach error example -%> -<% } // if error.examples -%> -<% }) // foreach sub -%> -<% }) // foreach group -%> diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/types.ts b/x-pack/plugins/ml/scripts/apidoc_scripts/types.ts deleted file mode 100644 index dc0e2c3805c99..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/types.ts +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export interface ApiParameter { - group: string; - type: any; - size: undefined; - allowedValues: undefined; - optional: boolean; - field: string; - defaultValue: undefined; - description?: string; -} - -interface Local { - group: string; - type: string; - url: string; - title: string; - name: string; - description: string; - parameter: { - fields?: { - [key: string]: ApiParameter[] | undefined; - }; - }; - success: { fields: ObjectConstructor[] }; - version: string; - filename: string; - schemas?: Array<{ - name: string; - group: string; - }>; -} - -export interface Block { - global: any; - local: Local; -} diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/version_filter/index.js b/x-pack/plugins/ml/scripts/apidoc_scripts/version_filter/index.js deleted file mode 100644 index 6e4f3e483552b..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/version_filter/index.js +++ /dev/null @@ -1,9 +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. - */ - -require('../../../../../../src/setup_node_env'); -module.exports = require('./version_filter'); diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/version_filter/version_filter.ts b/x-pack/plugins/ml/scripts/apidoc_scripts/version_filter/version_filter.ts deleted file mode 100644 index 7569715a5bc62..0000000000000 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/version_filter/version_filter.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { kibanaPackageJson } from '@kbn/repo-info'; -import type { Block } from '../types'; - -/** - * Post Filter parsed results. - * Updates api version of the endpoints. - */ -export function postFilter(parsedFiles: any[]) { - parsedFiles.forEach((parsedFile) => { - parsedFile.forEach((block: Block) => { - block.local.version = kibanaPackageJson.version; - }); - }); -} diff --git a/x-pack/plugins/ml/server/routes/README.md b/x-pack/plugins/ml/server/routes/README.md index b4ed848e28d68..3dd10d1c39b86 100644 --- a/x-pack/plugins/ml/server/routes/README.md +++ b/x-pack/plugins/ml/server/routes/README.md @@ -2,17 +2,16 @@ This folder contains ML API routes in Kibana. -Each route handler requires [apidoc-markdown](https://github.com/apidoc/apidoc-markdown) annotations in order -to generate documentation. +For better API documentation, each route handler needs a `summary` and `description`. Kibana schema definitions, which are used to validate requests and responses, also appear in the documentation. To improve the documentation's clarity, it's important to include a detailed `description` for each property in these schema definitions as well. -There are custom parser and worker (`x-pack/plugins/ml/server/routes/apidoc_scripts`) to process api schemas for each documentation entry. It's written with typescript so make sure all the scripts in the folder are compiled before executing `apidoc` command. +To generate an OpenAPI spec file, make sure the OAS Kibana endpoint is enabled in `kibana.dev.yml` -Make sure you have run `yarn kbn bootstrap` to get all requires dev dependencies. Then execute the following command from the ml plugin folder: +```yaml +server.oas.enabled: true ``` -yarn run apiDocs -``` -It compiles all the required scripts and generates the documentation both in HTML and Markdown formats. +And after starting Kibana `yarn start --no-base-path`, call the `oas` endpoint and output to a file, e.g. -It will create a new directory `routes_doc` (next to the `routes` folder) which contains the documentation in HTML format -as well as `ML_API.md` file. +```bash +curl -s -u : http://localhost:5601/api/oas\?pathStartsWith\=/internal/ml\&access\=internal -o ml_kibana_openapi.json +``` diff --git a/x-pack/plugins/ml/server/routes/alerting.ts b/x-pack/plugins/ml/server/routes/alerting.ts index 64eba6846c58d..ec4ec2b7c748d 100644 --- a/x-pack/plugins/ml/server/routes/alerting.ts +++ b/x-pack/plugins/ml/server/routes/alerting.ts @@ -17,12 +17,6 @@ export function alertingRoutes( ) { /** * @apiGroup Alerting - * - * @api {post} /internal/ml/alerting/preview Preview alerting condition - * @apiName PreviewAlert - * @apiDescription Returns a preview of the alerting condition - * - * @apiSchema (body) mlAnomalyDetectionAlertPreviewRequest */ router.versioned .post({ @@ -31,6 +25,8 @@ export function alertingRoutes( options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Previews an alerting condition', + description: 'Returns a preview of the alerting condition', }) .addVersion( { diff --git a/x-pack/plugins/ml/server/routes/annotations.ts b/x-pack/plugins/ml/server/routes/annotations.ts index 3f776b8848889..49528052c2bcc 100644 --- a/x-pack/plugins/ml/server/routes/annotations.ts +++ b/x-pack/plugins/ml/server/routes/annotations.ts @@ -15,6 +15,7 @@ import { annotationServiceProvider } from '../models/annotation_service'; import { wrapError } from '../client/error_wrapper'; import type { RouteInitialization } from '../types'; import { + annotationsResponseSchema, deleteAnnotationSchema, getAnnotationsSchema, indexAnnotationSchema, @@ -40,15 +41,6 @@ export function annotationRoutes( ) { /** * @apiGroup Annotations - * - * @api {post} /internal/ml/annotations Gets annotations - * @apiName GetAnnotations - * @apiDescription Gets annotations. - * - * @apiSchema (body) getAnnotationsSchema - * - * @apiSuccess {Boolean} success - * @apiSuccess {Object} annotations */ router.versioned .post({ @@ -57,12 +49,17 @@ export function annotationRoutes( options: { tags: ['access:ml:canGetAnnotations'], }, + summary: 'Gets annotations', + description: 'Gets annotations.', }) .addVersion( { version: '1', validate: { request: { body: getAnnotationsSchema }, + response: { + 200: { body: annotationsResponseSchema, description: 'Get annotations response' }, + }, }, }, routeGuard.fullLicenseAPIGuard(async ({ client, request, response }) => { @@ -81,12 +78,6 @@ export function annotationRoutes( /** * @apiGroup Annotations - * - * @api {put} /internal/ml/annotations/index Index annotation - * @apiName IndexAnnotations - * @apiDescription Index the annotation. - * - * @apiSchema (body) indexAnnotationSchema */ router.versioned .put({ @@ -95,6 +86,8 @@ export function annotationRoutes( options: { tags: ['access:ml:canCreateAnnotation'], }, + summary: 'Indexes annotation', + description: 'Indexes the annotation.', }) .addVersion( { @@ -129,12 +122,6 @@ export function annotationRoutes( /** * @apiGroup Annotations - * - * @api {delete} /internal/ml/annotations/delete/:annotationId Deletes annotation - * @apiName DeleteAnnotation - * @apiDescription Deletes specified annotation - * - * @apiSchema (params) deleteAnnotationSchema */ router.versioned .delete({ @@ -143,6 +130,8 @@ export function annotationRoutes( options: { tags: ['access:ml:canDeleteAnnotation'], }, + summary: 'Deletes annotation', + description: 'Deletes the specified annotation.', }) .addVersion( { diff --git a/x-pack/plugins/ml/server/routes/anomaly_detectors.ts b/x-pack/plugins/ml/server/routes/anomaly_detectors.ts index 02725de279e89..1fafd467595e9 100644 --- a/x-pack/plugins/ml/server/routes/anomaly_detectors.ts +++ b/x-pack/plugins/ml/server/routes/anomaly_detectors.ts @@ -23,6 +23,7 @@ import { updateModelSnapshotsSchema, updateModelSnapshotBodySchema, forceQuerySchema, + getAnomalyDetectorsResponse, } from './schemas/anomaly_detectors_schema'; import { getAuthorizationHeader } from '../lib/request_authorization'; @@ -30,16 +31,6 @@ import { getAuthorizationHeader } from '../lib/request_authorization'; * Routes for the anomaly detectors */ export function jobRoutes({ router, routeGuard }: RouteInitialization) { - /** - * @apiGroup AnomalyDetectors - * - * @api {get} /internal/ml/anomaly_detectors Get anomaly detectors data - * @apiName GetAnomalyDetectors - * @apiDescription Returns the list of anomaly detection jobs. - * - * @apiSuccess {Number} count - * @apiSuccess {Object[]} jobs - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors`, @@ -47,11 +38,17 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Gets anomaly detectors', + description: 'Returns the list of anomaly detection jobs.', }) .addVersion( { version: '1', - validate: false, + validate: { + response: { + 200: { body: getAnomalyDetectorsResponse, description: 'Anomaly detectors response' }, + }, + }, }, routeGuard.fullLicenseAPIGuard(async ({ mlClient, response }) => { try { @@ -65,15 +62,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup AnomalyDetectors - * - * @api {get} /internal/ml/anomaly_detectors/:jobId Get anomaly detection data by id - * @apiName GetAnomalyDetectorsById - * @apiDescription Returns the anomaly detection job. - * - * @apiSchema (params) jobIdSchema - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/{jobId}`, @@ -81,6 +69,8 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Gets anomaly detector by ID', + description: 'Returns the anomaly detection job by ID', }) .addVersion( { @@ -104,16 +94,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup AnomalyDetectors - * - * @api {get} /internal/ml/anomaly_detectors/_stats Get anomaly detection stats - * @apiName GetAnomalyDetectorsStats - * @apiDescription Returns anomaly detection jobs statistics. - * - * @apiSuccess {Number} count - * @apiSuccess {Object[]} jobs - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/_stats`, @@ -121,6 +101,8 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Gets anomaly detectors stats', + description: 'Returns the anomaly detection jobs statistics.', }) .addVersion( { @@ -139,15 +121,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup AnomalyDetectors - * - * @api {get} /internal/ml/anomaly_detectors/:jobId/_stats Get stats for requested anomaly detection job - * @apiName GetAnomalyDetectorsStatsById - * @apiDescription Returns anomaly detection job statistics. - * - * @apiSchema (params) jobIdSchema - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/{jobId}/_stats`, @@ -155,6 +128,8 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Gets anomaly detector stats by ID', + description: 'Returns the anomaly detection job statistics by ID', }) .addVersion( { @@ -178,18 +153,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup AnomalyDetectors - * - * @api {put} /internal/ml/anomaly_detectors/:jobId Create an anomaly detection job - * @apiName CreateAnomalyDetectors - * @apiDescription Creates an anomaly detection job. - * - * @apiSchema (params) jobIdSchema - * @apiSchema (body) anomalyDetectionJobSchema - * - * @apiSuccess {Object} job the configuration of the job that has been created. - */ router.versioned .put({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/{jobId}`, @@ -197,6 +160,8 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canCreateJob'], }, + summary: 'Creates an anomaly detection job', + description: 'Creates an anomaly detection job.', }) .addVersion( { @@ -206,6 +171,12 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { params: jobIdSchema, body: schema.object(anomalyDetectionJobSchema), }, + response: { + 200: { + body: () => schema.any(), + description: 'The configuration of the job that has been created.', + }, + }, }, }, routeGuard.fullLicenseAPIGuard(async ({ mlClient, request, response }) => { @@ -229,16 +200,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup AnomalyDetectors - * - * @api {post} /internal/ml/anomaly_detectors/:jobId/_update Update an anomaly detection job - * @apiName UpdateAnomalyDetectors - * @apiDescription Updates certain properties of an anomaly detection job. - * - * @apiSchema (params) jobIdSchema - * @apiSchema (body) anomalyDetectionUpdateJobSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/{jobId}/_update`, @@ -246,6 +207,8 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canUpdateJob'], }, + summary: 'Updates an anomaly detection job', + description: 'Updates certain properties of an anomaly detection job.', }) .addVersion( { @@ -274,15 +237,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup AnomalyDetectors - * - * @api {post} /internal/ml/anomaly_detectors/:jobId/_open Open specified job - * @apiName OpenAnomalyDetectorsJob - * @apiDescription Opens an anomaly detection job. - * - * @apiSchema (params) jobIdSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/{jobId}/_open`, @@ -290,6 +244,8 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canOpenJob'], }, + summary: 'Opens an anomaly detection job', + description: 'Opens an anomaly detection job.', }) .addVersion( { @@ -313,16 +269,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup AnomalyDetectors - * - * @api {post} /internal/ml/anomaly_detectors/:jobId/_close Close specified job - * @apiName CloseAnomalyDetectorsJob - * @apiDescription Closes an anomaly detection job. - * - * @apiSchema (params) jobIdSchema - * @apiSchema (query) forceQuerySchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/{jobId}/_close`, @@ -330,6 +276,8 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canCloseJob'], }, + summary: 'Closes an anomaly detection job', + description: 'Closes an anomaly detection job.', }) .addVersion( { @@ -360,16 +308,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup AnomalyDetectors - * - * @api {delete} /internal/ml/anomaly_detectors/:jobId Delete specified job - * @apiName DeleteAnomalyDetectorsJob - * @apiDescription Deletes specified anomaly detection job. - * - * @apiSchema (params) jobIdSchema - * @apiSchema (query) forceQuerySchema - */ router.versioned .delete({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/{jobId}`, @@ -377,6 +315,8 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canDeleteJob'], }, + summary: 'Deletes an anomaly detection job', + description: 'Deletes specified anomaly detection job.', }) .addVersion( { @@ -408,13 +348,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup AnomalyDetectors - * - * @api {post} /internal/ml/anomaly_detectors/_validate/detector Validate detector - * @apiName ValidateAnomalyDetector - * @apiDescription Validates specified detector. - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/_validate/detector`, @@ -422,6 +355,8 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canCreateJob'], }, + summary: 'Validates detector', + description: 'Validates specified detector.', }) .addVersion( { @@ -444,16 +379,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup AnomalyDetectors - * - * @api {post} /internal/ml/anomaly_detectors/:jobId/_forecast Create forecast for specified job - * @apiName ForecastAnomalyDetector - * @apiDescription Creates a forecast for the specified anomaly detection job, predicting the future behavior of a time series by using its historical behavior. - * - * @apiSchema (params) jobIdSchema - * @apiSchema (body) forecastAnomalyDetector - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/{jobId}/_forecast`, @@ -461,6 +386,9 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canForecastJob'], }, + summary: 'Creates forecast for specified job', + description: + 'Creates a forecast for the specified anomaly detection job, predicting the future behavior of a time series by using its historical behavior.', }) .addVersion( { @@ -491,19 +419,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup AnomalyDetectors - * - * @api {post} /internal/ml/anomaly_detectors/:jobId/results/buckets Obtain bucket scores for the specified job ID - * @apiName GetBuckets - * @apiDescription The get buckets API presents a chronological view of the records, grouped by bucket. - * - * @apiSchema (params) getBucketParamsSchema - * @apiSchema (body) getBucketsSchema - * - * @apiSuccess {Number} count - * @apiSuccess {Object[]} buckets - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/{jobId}/results/buckets/{timestamp?}`, @@ -511,6 +426,9 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Gets bucket scores', + description: + 'The get buckets API presents a chronological view of the records, grouped by bucket.', }) .addVersion( { @@ -520,6 +438,12 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { params: getBucketParamsSchema, body: getBucketsSchema, }, + response: { + 200: { + body: () => + schema.object({ count: schema.number(), buckets: schema.arrayOf(schema.any()) }), + }, + }, }, }, routeGuard.fullLicenseAPIGuard(async ({ mlClient, request, response }) => { @@ -538,19 +462,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup AnomalyDetectors - * - * @api {post} /internal/ml/anomaly_detectors/:jobId/results/overall_buckets Obtain overall bucket scores for the specified job ID - * @apiName GetOverallBuckets - * @apiDescription Retrieves overall bucket results that summarize the bucket results of multiple anomaly detection jobs. - * - * @apiSchema (params) jobIdSchema - * @apiSchema (body) getOverallBucketsSchema - * - * @apiSuccess {Number} count - * @apiSuccess {Object[]} overall_buckets - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/{jobId}/results/overall_buckets`, @@ -558,6 +469,9 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get overall buckets', + description: + 'Retrieves overall bucket results that summarize the bucket results of multiple anomaly detection jobs.', }) .addVersion( { @@ -588,15 +502,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup AnomalyDetectors - * - * @api {get} /internal/ml/anomaly_detectors/:jobId/results/categories/:categoryId Get results category data by job ID and category ID - * @apiName GetCategories - * @apiDescription Returns the categories results for the specified job ID and category ID. - * - * @apiSchema (params) getCategoriesSchema - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/{jobId}/results/categories/{categoryId}`, @@ -604,6 +509,8 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get categories', + description: 'Retrieves the categories results for the specified job ID and category ID.', }) .addVersion( { @@ -629,15 +536,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup AnomalyDetectors - * - * @api {get} /internal/ml/anomaly_detectors/:jobId/model_snapshots Get model snapshots by job ID - * @apiName GetModelSnapshots - * @apiDescription Returns the model snapshots for the specified job ID - * - * @apiSchema (params) getModelSnapshotsSchema - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/{jobId}/model_snapshots`, @@ -645,13 +543,15 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get model snapshots by job ID', + description: 'Returns the model snapshots for the specified job ID', }) .addVersion( { version: '1', validate: { request: { - params: getModelSnapshotsSchema, + params: jobIdSchema, }, }, }, @@ -669,15 +569,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup AnomalyDetectors - * - * @api {get} /internal/ml/anomaly_detectors/:jobId/model_snapshots/:snapshotId Get model snapshots by job ID and snapshot ID - * @apiName GetModelSnapshotsById - * @apiDescription Returns the model snapshots for the specified job ID and snapshot ID - * - * @apiSchema (params) getModelSnapshotsSchema - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/{jobId}/model_snapshots/{snapshotId}`, @@ -685,6 +576,8 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get model snapshots by id', + description: 'Returns the model snapshots for the specified job ID and snapshot ID', }) .addVersion( { @@ -710,16 +603,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup AnomalyDetectors - * - * @api {post} /internal/ml/anomaly_detectors/:jobId/model_snapshots/:snapshotId/_update Update model snapshot by snapshot ID - * @apiName UpdateModelSnapshotsById - * @apiDescription Updates the model snapshot for the specified snapshot ID - * - * @apiSchema (params) updateModelSnapshotsSchema - * @apiSchema (body) updateModelSnapshotBodySchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/{jobId}/model_snapshots/{snapshotId}/_update`, @@ -727,6 +610,8 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canCreateJob'], }, + summary: 'Updates model snapshot by snapshot ID', + description: 'Updates the model snapshot for the specified snapshot ID', }) .addVersion( { @@ -754,15 +639,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup AnomalyDetectors - * - * @api {delete} /internal/ml/anomaly_detectors/:jobId/model_snapshots/:snapshotId Delete model snapshots by snapshot ID - * @apiName GetModelSnapshotsById - * @apiDescription Deletes the model snapshot for the specified snapshot ID - * - * @apiSchema (params) updateModelSnapshotsSchema - */ router.versioned .delete({ path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/{jobId}/model_snapshots/{snapshotId}`, @@ -770,6 +646,8 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canCreateJob'], }, + summary: 'Deletes model snapshots by snapshot ID', + description: 'Deletes the model snapshot for the specified snapshot ID', }) .addVersion( { diff --git a/x-pack/plugins/ml/server/routes/calendars.ts b/x-pack/plugins/ml/server/routes/calendars.ts index 31192ee29786e..9ca93a78a51a3 100644 --- a/x-pack/plugins/ml/server/routes/calendars.ts +++ b/x-pack/plugins/ml/server/routes/calendars.ts @@ -44,13 +44,6 @@ function getCalendarsByIds(mlClient: MlClient, calendarIds: string[]) { } export function calendars({ router, routeGuard }: RouteInitialization) { - /** - * @apiGroup Calendars - * - * @api {get} /internal/ml/calendars Gets calendars - * @apiName GetCalendars - * @apiDescription Gets calendars - size limit has been explicitly set to 1000 - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/calendars`, @@ -58,6 +51,8 @@ export function calendars({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetCalendars'], }, + summary: 'Gets calendars', + description: 'Gets calendars - size limit has been explicitly set to 10000', }) .addVersion( { @@ -77,15 +72,6 @@ export function calendars({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup Calendars - * - * @api {get} /internal/ml/calendars/:calendarIds Gets a calendar - * @apiName GetCalendarById - * @apiDescription Gets calendar by id - * - * @apiSchema (params) calendarIdsSchema - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/calendars/{calendarIds}`, @@ -93,6 +79,8 @@ export function calendars({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetCalendars'], }, + summary: 'Gets a calendar', + description: 'Gets a calendar by id', }) .addVersion( { @@ -123,15 +111,6 @@ export function calendars({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup Calendars - * - * @api {put} /internal/ml/calendars Creates a calendar - * @apiName PutCalendars - * @apiDescription Creates a calendar - * - * @apiSchema (body) calendarSchema - */ router.versioned .put({ path: `${ML_INTERNAL_BASE_PATH}/calendars`, @@ -139,6 +118,8 @@ export function calendars({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canCreateCalendar'], }, + summary: 'Creates a calendar', + description: 'Creates a calendar', }) .addVersion( { @@ -164,16 +145,6 @@ export function calendars({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup Calendars - * - * @api {put} /internal/ml/calendars/:calendarId Updates a calendar - * @apiName UpdateCalendarById - * @apiDescription Updates a calendar - * - * @apiSchema (params) calendarIdSchema - * @apiSchema (body) calendarSchema - */ router.versioned .put({ path: `${ML_INTERNAL_BASE_PATH}/calendars/{calendarId}`, @@ -181,6 +152,8 @@ export function calendars({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canCreateCalendar'], }, + summary: 'Updates a calendar', + description: 'Updates a calendar', }) .addVersion( { @@ -208,15 +181,6 @@ export function calendars({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup Calendars - * - * @api {delete} /internal/ml/calendars/:calendarId Deletes a calendar - * @apiName DeleteCalendarById - * @apiDescription Deletes a calendar - * - * @apiSchema (params) calendarIdSchema - */ router.versioned .delete({ path: `${ML_INTERNAL_BASE_PATH}/calendars/{calendarId}`, @@ -224,6 +188,8 @@ export function calendars({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canDeleteCalendar'], }, + summary: 'Deletes a calendar', + description: 'Deletes a calendar', }) .addVersion( { diff --git a/x-pack/plugins/ml/server/routes/data_frame_analytics.ts b/x-pack/plugins/ml/server/routes/data_frame_analytics.ts index 730fdaad26fbd..e408c2a719fbb 100644 --- a/x-pack/plugins/ml/server/routes/data_frame_analytics.ts +++ b/x-pack/plugins/ml/server/routes/data_frame_analytics.ts @@ -115,16 +115,6 @@ export function dataFrameAnalyticsRoutes( return body?.has_all_requested === true; } - /** - * @apiGroup DataFrameAnalytics - * - * @api {get} /internal/ml/data_frame/analytics Get analytics data - * @apiName GetDataFrameAnalytics - * @apiDescription Returns the list of data frame analytics jobs. - * - * @apiSuccess {Number} count - * @apiSuccess {Object[]} data_frame_analytics - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/data_frame/analytics`, @@ -132,6 +122,8 @@ export function dataFrameAnalyticsRoutes( options: { tags: ['access:ml:canGetDataFrameAnalytics'], }, + summary: 'Gets data frame analytics', + description: 'Returns the list of data frame analytics jobs.', }) .addVersion( { @@ -157,15 +149,6 @@ export function dataFrameAnalyticsRoutes( }) ); - /** - * @apiGroup DataFrameAnalytics - * - * @api {get} /internal/ml/data_frame/analytics/:analyticsId Get analytics data by id - * @apiName GetDataFrameAnalyticsById - * @apiDescription Returns the data frame analytics job. - * - * @apiSchema (params) analyticsIdSchema - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/data_frame/analytics/{analyticsId}`, @@ -173,6 +156,8 @@ export function dataFrameAnalyticsRoutes( options: { tags: ['access:ml:canGetDataFrameAnalytics'], }, + summary: 'Gets data frame analytics by id', + description: 'Returns the data frame analytics job by id.', }) .addVersion( { @@ -202,13 +187,6 @@ export function dataFrameAnalyticsRoutes( }) ); - /** - * @apiGroup DataFrameAnalytics - * - * @api {get} /internal/ml/data_frame/analytics/_stats Get analytics stats - * @apiName GetDataFrameAnalyticsStats - * @apiDescription Returns data frame analytics jobs statistics. - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/data_frame/analytics/_stats`, @@ -216,6 +194,8 @@ export function dataFrameAnalyticsRoutes( options: { tags: ['access:ml:canGetDataFrameAnalytics'], }, + summary: 'Gets data frame analytics stats', + description: 'Returns the data frame analytics job statistics.', }) .addVersion( { @@ -234,15 +214,6 @@ export function dataFrameAnalyticsRoutes( }) ); - /** - * @apiGroup DataFrameAnalytics - * - * @api {get} /internal/ml/data_frame/analytics/:analyticsId/_stats Get stats for requested analytics job - * @apiName GetDataFrameAnalyticsStatsById - * @apiDescription Returns data frame analytics job statistics. - * - * @apiSchema (params) analyticsIdSchema - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/data_frame/analytics/{analyticsId}/_stats`, @@ -250,6 +221,8 @@ export function dataFrameAnalyticsRoutes( options: { tags: ['access:ml:canGetDataFrameAnalytics'], }, + summary: 'Gets data frame analytics stats by id', + description: 'Returns the data frame analytics job statistics by id.', }) .addVersion( { @@ -275,17 +248,6 @@ export function dataFrameAnalyticsRoutes( }) ); - /** - * @apiGroup DataFrameAnalytics - * - * @api {put} /internal/ml/data_frame/analytics/:analyticsId Instantiate a data frame analytics job - * @apiName UpdateDataFrameAnalytics - * @apiDescription This API creates a data frame analytics job that performs an analysis - * on the source index and stores the outcome in a destination index. - * - * @apiSchema (params) analyticsIdSchema - * @apiSchema (body) dataAnalyticsJobConfigSchema - */ router.versioned .put({ path: `${ML_INTERNAL_BASE_PATH}/data_frame/analytics/{analyticsId}`, @@ -293,6 +255,9 @@ export function dataFrameAnalyticsRoutes( options: { tags: ['access:ml:canCreateDataFrameAnalytics'], }, + summary: 'Updates data frame analytics job', + description: + 'This API creates a data frame analytics job that performs an analysis on the source index and stores the outcome in a destination index.', }) .addVersion( { @@ -360,15 +325,6 @@ export function dataFrameAnalyticsRoutes( ) ); - /** - * @apiGroup DataFrameAnalytics - * - * @api {post} /internal/ml/data_frame/_evaluate Evaluate the data frame analytics for an annotated index - * @apiName EvaluateDataFrameAnalytics - * @apiDescription Evaluates the data frame analytics for an annotated index. - * - * @apiSchema (body) dataAnalyticsEvaluateSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/data_frame/_evaluate`, @@ -376,6 +332,8 @@ export function dataFrameAnalyticsRoutes( options: { tags: ['access:ml:canGetDataFrameAnalytics'], }, + summary: 'Evaluates the data frame analytics', + description: 'Evaluates the data frame analytics for an annotated index.', }) .addVersion( { @@ -404,16 +362,6 @@ export function dataFrameAnalyticsRoutes( }) ); - /** - * @apiGroup DataFrameAnalytics - * - * @api {post} /internal/ml/data_frame/_explain Explain a data frame analytics config - * @apiName ExplainDataFrameAnalytics - * @apiDescription This API provides explanations for a data frame analytics config - * that either exists already or one that has not been created yet. - * - * @apiSchema (body) dataAnalyticsExplainSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/data_frame/analytics/_explain`, @@ -421,6 +369,9 @@ export function dataFrameAnalyticsRoutes( options: { tags: ['access:ml:canCreateDataFrameAnalytics'], }, + summary: 'Explains a data frame analytics job config', + description: + 'This API provides explanations for a data frame analytics job config that either exists already or one that has not been created yet.', }) .addVersion( { @@ -448,15 +399,6 @@ export function dataFrameAnalyticsRoutes( }) ); - /** - * @apiGroup DataFrameAnalytics - * - * @api {delete} /internal/ml/data_frame/analytics/:analyticsId Delete specified analytics job - * @apiName DeleteDataFrameAnalytics - * @apiDescription Deletes specified data frame analytics job. - * - * @apiSchema (params) analyticsIdSchema - */ router.versioned .delete({ path: `${ML_INTERNAL_BASE_PATH}/data_frame/analytics/{analyticsId}`, @@ -464,6 +406,8 @@ export function dataFrameAnalyticsRoutes( options: { tags: ['access:ml:canDeleteDataFrameAnalytics'], }, + summary: 'Deletes data frame analytics job', + description: 'Deletes specified data frame analytics job.', }) .addVersion( { @@ -558,15 +502,6 @@ export function dataFrameAnalyticsRoutes( ) ); - /** - * @apiGroup DataFrameAnalytics - * - * @api {post} /internal/ml/data_frame/analytics/:analyticsId/_start Start specified analytics job - * @apiName StartDataFrameAnalyticsJob - * @apiDescription Starts a data frame analytics job. - * - * @apiSchema (params) analyticsIdSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/data_frame/analytics/{analyticsId}/_start`, @@ -574,6 +509,8 @@ export function dataFrameAnalyticsRoutes( options: { tags: ['access:ml:canStartStopDataFrameAnalytics'], }, + summary: 'Starts specified analytics job', + description: 'Starts a data frame analytics job.', }) .addVersion( { @@ -599,16 +536,6 @@ export function dataFrameAnalyticsRoutes( }) ); - /** - * @apiGroup DataFrameAnalytics - * - * @api {post} /internal/ml/data_frame/analytics/:analyticsId/_stop Stop specified analytics job - * @apiName StopsDataFrameAnalyticsJob - * @apiDescription Stops a data frame analytics job. - * - * @apiSchema (params) analyticsIdSchema - * @apiSchema (query) stopsDataFrameAnalyticsJobQuerySchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/data_frame/analytics/{analyticsId}/_stop`, @@ -616,6 +543,8 @@ export function dataFrameAnalyticsRoutes( options: { tags: ['access:ml:canStartStopDataFrameAnalytics'], }, + summary: 'Stops specified analytics job', + description: 'Stops a data frame analytics job.', }) .addVersion( { @@ -643,15 +572,6 @@ export function dataFrameAnalyticsRoutes( }) ); - /** - * @apiGroup DataFrameAnalytics - * - * @api {post} /internal/ml/data_frame/analytics/:analyticsId/_update Update specified analytics job - * @apiName UpdateDataFrameAnalyticsJob - * @apiDescription Updates a data frame analytics job. - * - * @apiSchema (params) analyticsIdSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/data_frame/analytics/{analyticsId}/_update`, @@ -659,6 +579,8 @@ export function dataFrameAnalyticsRoutes( options: { tags: ['access:ml:canCreateDataFrameAnalytics'], }, + summary: 'Updates specified analytics job', + description: 'Updates a data frame analytics job.', }) .addVersion( { @@ -689,15 +611,6 @@ export function dataFrameAnalyticsRoutes( }) ); - /** - * @apiGroup DataFrameAnalytics - * - * @api {get} /internal/ml/data_frame/analytics/:analyticsId/messages Get analytics job messages - * @apiName GetDataFrameAnalyticsMessages - * @apiDescription Returns the list of audit messages for data frame analytics jobs. - * - * @apiSchema (params) analyticsIdSchema - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/data_frame/analytics/{analyticsId}/messages`, @@ -705,6 +618,8 @@ export function dataFrameAnalyticsRoutes( options: { tags: ['access:ml:canGetDataFrameAnalytics'], }, + summary: 'Gets data frame analytics messages', + description: 'Returns the list of audit messages for data frame analytics jobs.', }) .addVersion( { @@ -730,16 +645,6 @@ export function dataFrameAnalyticsRoutes( }) ); - /** - * @apiGroup DataFrameAnalytics - * - * @api {post} /internal/ml/data_frame/analytics/jobs_exist Check whether jobs exist in current or any space - * @apiName JobsExist - * @apiDescription Checks if each of the jobs in the specified list of IDs exists. - * If allSpaces is true, the check will look across all spaces. - * - * @apiSchema (params) jobsExistSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/data_frame/analytics/jobs_exist`, @@ -747,6 +652,9 @@ export function dataFrameAnalyticsRoutes( options: { tags: ['access:ml:canGetDataFrameAnalytics'], }, + summary: 'Checks if jobs exist', + description: + 'Checks if each of the jobs in the specified list of IDs exists. If allSpaces is true, the check will look across all spaces.', }) .addVersion( { @@ -788,15 +696,6 @@ export function dataFrameAnalyticsRoutes( }) ); - /** - * @apiGroup DataFrameAnalytics - * - * @api {get} /internal/ml/data_frame/analytics/map/:analyticsId Get objects leading up to analytics job - * @apiName GetDataFrameAnalyticsIdMap - * @apiDescription Returns map of objects leading up to analytics job. - * - * @apiParam {String} analyticsId Analytics ID. - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/data_frame/analytics/map/{analyticsId}`, @@ -804,6 +703,8 @@ export function dataFrameAnalyticsRoutes( options: { tags: ['access:ml:canGetDataFrameAnalytics'], }, + summary: 'Gets a data frame analytics jobs map', + description: 'Returns map of objects leading up to analytics job.', }) .addVersion( { @@ -856,13 +757,6 @@ export function dataFrameAnalyticsRoutes( }) ); - /** - * @apiGroup DataFrameAnalytics - * - * @api {get} /internal/ml/data_frame/analytics/new_job_caps/:indexPattern Get fields for a pattern of indices used for analytics - * @apiName AnalyticsNewJobCaps - * @apiDescription Retrieve the index fields for analytics - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/data_frame/analytics/new_job_caps/{indexPattern}`, @@ -870,6 +764,8 @@ export function dataFrameAnalyticsRoutes( options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get fields for a pattern of indices used for analytics', + description: 'Returns the fields for a pattern of indices used for analytics.', }) .addVersion( { @@ -909,15 +805,6 @@ export function dataFrameAnalyticsRoutes( }) ); - /** - * @apiGroup DataFrameAnalytics - * - * @api {post} /internal/ml/data_frame/validate Validate the data frame analytics job config - * @apiName ValidateDataFrameAnalytics - * @apiDescription Validates the data frame analytics job config. - * - * @apiSchema (body) dataAnalyticsJobConfigSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/data_frame/analytics/validate`, @@ -925,6 +812,8 @@ export function dataFrameAnalyticsRoutes( options: { tags: ['access:ml:canCreateDataFrameAnalytics'], }, + summary: 'Validates the data frame analytics job config', + description: 'Validates the data frame analytics job config.', }) .addVersion( { diff --git a/x-pack/plugins/ml/server/routes/data_visualizer.ts b/x-pack/plugins/ml/server/routes/data_visualizer.ts index 75d27e19ed3bc..32a782a2acd69 100644 --- a/x-pack/plugins/ml/server/routes/data_visualizer.ts +++ b/x-pack/plugins/ml/server/routes/data_visualizer.ts @@ -12,6 +12,7 @@ import { ML_INTERNAL_BASE_PATH } from '../../common/constants/app'; import { wrapError } from '../client/error_wrapper'; import { DataVisualizer } from '../models/data_visualizer'; import { + dataVisualizerFieldHistogramsResponse, dataVisualizerFieldHistogramsSchema, indexPatternSchema, } from './schemas/data_visualizer_schema'; @@ -33,18 +34,6 @@ function getHistogramsForFields( * Routes for the index data visualizer. */ export function dataVisualizerRoutes({ router, routeGuard }: RouteInitialization) { - /** - * @apiGroup DataVisualizer - * - * @api {post} /internal/ml/data_visualizer/get_field_histograms/:indexPattern Get histograms for fields - * @apiName GetHistogramsForFields - * @apiDescription Returns the histograms on a list fields in the specified index pattern. - * - * @apiSchema (params) indexPatternSchema - * @apiSchema (body) dataVisualizerFieldHistogramsSchema - * - * @apiSuccess {Object} fieldName histograms by field, keyed on the name of the field. - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/data_visualizer/get_field_histograms/{indexPattern}`, @@ -52,6 +41,8 @@ export function dataVisualizerRoutes({ router, routeGuard }: RouteInitialization options: { tags: ['access:ml:canGetFieldInfo'], }, + summary: 'Gets histograms for fields', + description: 'Returns the histograms on a list fields in the specified index pattern.', }) .addVersion( { @@ -61,6 +52,12 @@ export function dataVisualizerRoutes({ router, routeGuard }: RouteInitialization params: indexPatternSchema, body: dataVisualizerFieldHistogramsSchema, }, + response: { + 200: { + body: dataVisualizerFieldHistogramsResponse, + description: 'Histograms by field, keyed on the name of the field.', + }, + }, }, }, routeGuard.basicLicenseAPIGuard(async ({ client, request, response }) => { diff --git a/x-pack/plugins/ml/server/routes/datafeeds.ts b/x-pack/plugins/ml/server/routes/datafeeds.ts index 193231a473b6b..a8fbc8c2ceac5 100644 --- a/x-pack/plugins/ml/server/routes/datafeeds.ts +++ b/x-pack/plugins/ml/server/routes/datafeeds.ts @@ -21,13 +21,6 @@ import { getAuthorizationHeader } from '../lib/request_authorization'; * Routes for datafeed service */ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { - /** - * @apiGroup DatafeedService - * - * @api {get} /internal/ml/datafeeds Get all datafeeds - * @apiName GetDatafeeds - * @apiDescription Retrieves configuration information for datafeeds - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/datafeeds`, @@ -35,6 +28,8 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetDatafeeds'], }, + summary: 'Gets all datafeeds', + description: 'Retrieves configuration information for datafeeds.', }) .addVersion( { @@ -53,15 +48,6 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup DatafeedService - * - * @api {get} /internal/ml/datafeeds/:datafeedId Get datafeed for given datafeed id - * @apiName GetDatafeed - * @apiDescription Retrieves configuration information for datafeed - * - * @apiSchema (params) datafeedIdSchema - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/datafeeds/{datafeedId}`, @@ -69,6 +55,8 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetDatafeeds'], }, + summary: 'Get datafeed for given datafeed id', + description: 'Retrieves configuration information for a datafeed.', }) .addVersion( { @@ -93,13 +81,6 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup DatafeedService - * - * @api {get} /internal/ml/datafeeds/_stats Get stats for all datafeeds - * @apiName GetDatafeedsStats - * @apiDescription Retrieves usage information for datafeeds - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/datafeeds/_stats`, @@ -107,6 +88,8 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetDatafeeds'], }, + summary: 'Gets stats for all datafeeds', + description: 'Retrieves usage information for datafeeds.', }) .addVersion( { @@ -125,15 +108,6 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup DatafeedService - * - * @api {get} /internal/ml/datafeeds/:datafeedId/_stats Get datafeed stats for given datafeed id - * @apiName GetDatafeedStats - * @apiDescription Retrieves usage information for datafeed - * - * @apiSchema (params) datafeedIdSchema - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/datafeeds/{datafeedId}/_stats`, @@ -141,6 +115,8 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetDatafeeds'], }, + summary: 'Get datafeed stats for given datafeed id', + description: 'Retrieves usage information for a datafeed.', }) .addVersion( { @@ -167,16 +143,6 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup DatafeedService - * - * @api {put} /internal/ml/datafeeds/:datafeedId Creates datafeed - * @apiName CreateDatafeed - * @apiDescription Instantiates a datafeed - * - * @apiSchema (params) datafeedIdSchema - * @apiSchema (body) datafeedConfigSchema - */ router.versioned .put({ path: `${ML_INTERNAL_BASE_PATH}/datafeeds/{datafeedId}`, @@ -184,6 +150,8 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canCreateDatafeed'], }, + summary: 'Creates a datafeed', + description: 'Instantiates a datafeed.', }) .addVersion( { @@ -216,16 +184,6 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup DatafeedService - * - * @api {post} /internal/ml/datafeeds/:datafeedId/_update Updates datafeed for given datafeed id - * @apiName UpdateDatafeed - * @apiDescription Updates certain properties of a datafeed - * - * @apiSchema (params) datafeedIdSchema - * @apiSchema (body) datafeedConfigSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/datafeeds/{datafeedId}/_update`, @@ -233,6 +191,8 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canUpdateDatafeed'], }, + summary: 'Updates a datafeed', + description: 'Updates certain properties of a datafeed.', }) .addVersion( { @@ -265,16 +225,6 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup DatafeedService - * - * @api {delete} /internal/ml/datafeeds/:datafeedId Deletes datafeed - * @apiName DeleteDatafeed - * @apiDescription Deletes an existing datafeed - * - * @apiSchema (params) datafeedIdSchema - * @apiSchema (query) deleteDatafeedQuerySchema - */ router.versioned .delete({ path: `${ML_INTERNAL_BASE_PATH}/datafeeds/{datafeedId}`, @@ -282,6 +232,8 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canDeleteDatafeed'], }, + summary: 'Deletes a datafeed', + description: 'Deletes an existing datafeed.', }) .addVersion( { @@ -314,16 +266,6 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup DatafeedService - * - * @api {post} /internal/ml/datafeeds/:datafeedId/_start Starts datafeed for given datafeed id(s) - * @apiName StartDatafeed - * @apiDescription Starts one or more datafeeds - * - * @apiSchema (params) datafeedIdSchema - * @apiSchema (body) startDatafeedSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/datafeeds/{datafeedId}/_start`, @@ -331,6 +273,8 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canStartStopDatafeed'], }, + summary: 'Starts a datafeed', + description: 'Starts one or more datafeeds', }) .addVersion( { @@ -364,15 +308,6 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup DatafeedService - * - * @api {post} /internal/ml/datafeeds/:datafeedId/_stop Stops datafeed for given datafeed id(s) - * @apiName StopDatafeed - * @apiDescription Stops one or more datafeeds - * - * @apiSchema (params) datafeedIdSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/datafeeds/{datafeedId}/_stop`, @@ -380,6 +315,8 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canStartStopDatafeed'], }, + summary: 'Stops a datafeed', + description: 'Stops one or more datafeeds', }) .addVersion( { @@ -407,15 +344,6 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup DatafeedService - * - * @api {get} /internal/ml/datafeeds/:datafeedId/_preview Preview datafeed for given datafeed id - * @apiName PreviewDatafeed - * @apiDescription Previews a datafeed - * - * @apiSchema (params) datafeedIdSchema - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/datafeeds/{datafeedId}/_preview`, @@ -423,6 +351,8 @@ export function dataFeedRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canPreviewDatafeed'], }, + summary: 'Previews a datafeed', + description: 'Previews a datafeed', }) .addVersion( { diff --git a/x-pack/plugins/ml/server/routes/fields_service.ts b/x-pack/plugins/ml/server/routes/fields_service.ts index ddb107dc979be..ae4bfa6110a3e 100644 --- a/x-pack/plugins/ml/server/routes/fields_service.ts +++ b/x-pack/plugins/ml/server/routes/fields_service.ts @@ -10,7 +10,9 @@ import { ML_INTERNAL_BASE_PATH } from '../../common/constants/app'; import { wrapError } from '../client/error_wrapper'; import type { RouteInitialization } from '../types'; import { + getCardinalityOfFieldsResponse, getCardinalityOfFieldsSchema, + getTimeFieldRangeResponse, getTimeFieldRangeSchema, } from './schemas/fields_service_schema'; import { fieldsServiceProvider } from '../models/fields_service'; @@ -31,17 +33,6 @@ function getTimeFieldRange(client: IScopedClusterClient, payload: any) { * Routes for fields service */ export function fieldsService({ router, routeGuard }: RouteInitialization) { - /** - * @apiGroup FieldsService - * - * @api {post} /internal/ml/fields_service/field_cardinality Get cardinality of fields - * @apiName GetCardinalityOfFields - * @apiDescription Returns the cardinality of one or more fields. Returns an Object whose keys are the names of the fields, with values equal to the cardinality of the field - * - * @apiSchema (body) getCardinalityOfFieldsSchema - * - * @apiSuccess {number} fieldName cardinality of the field. - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/fields_service/field_cardinality`, @@ -49,6 +40,9 @@ export function fieldsService({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetFieldInfo'], }, + summary: 'Gets cardinality of fields', + description: + 'Returns the cardinality of one or more fields. Returns an Object whose keys are the names of the fields, with values equal to the cardinality of the field', }) .addVersion( { @@ -57,6 +51,12 @@ export function fieldsService({ router, routeGuard }: RouteInitialization) { request: { body: getCardinalityOfFieldsSchema, }, + response: { + 200: { + body: getCardinalityOfFieldsResponse, + description: 'Cardinality of fields', + }, + }, }, }, routeGuard.fullLicenseAPIGuard(async ({ client, request, response }) => { @@ -72,18 +72,6 @@ export function fieldsService({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup FieldsService - * - * @api {post} /internal/ml/fields_service/time_field_range Get time field range - * @apiName GetTimeFieldRange - * @apiDescription Returns the time range for the given index and query using the specified time range. - * - * @apiSchema (body) getTimeFieldRangeSchema - * - * @apiSuccess {Object} start start of time range with epoch and string properties. - * @apiSuccess {Object} end end of time range with epoch and string properties. - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/fields_service/time_field_range`, @@ -91,6 +79,9 @@ export function fieldsService({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetFieldInfo'], }, + summary: 'Get time field range', + description: + 'Returns the time range for the given index and query using the specified time range.', }) .addVersion( { @@ -99,6 +90,12 @@ export function fieldsService({ router, routeGuard }: RouteInitialization) { request: { body: getTimeFieldRangeSchema, }, + response: { + 200: { + body: getTimeFieldRangeResponse, + description: 'Cardinality of fields', + }, + }, }, }, routeGuard.basicLicenseAPIGuard(async ({ client, request, response }) => { diff --git a/x-pack/plugins/ml/server/routes/filters.ts b/x-pack/plugins/ml/server/routes/filters.ts index cb60b57339290..c654bbf0e2bae 100644 --- a/x-pack/plugins/ml/server/routes/filters.ts +++ b/x-pack/plugins/ml/server/routes/filters.ts @@ -46,16 +46,6 @@ function deleteFilter(mlClient: MlClient, filterId: string) { } export function filtersRoutes({ router, routeGuard }: RouteInitialization) { - /** - * @apiGroup Filters - * - * @api {get} /internal/ml/filters Get filters - * @apiName GetFilters - * @apiDescription Retrieves the list of filters which are used for custom rules in anomaly detection. Sets the size limit explicitly to return a maximum of 1000. - * - * @apiSuccess {Boolean} success - * @apiSuccess {Object[]} filters list of filters - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/filters`, @@ -63,6 +53,9 @@ export function filtersRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetFilters'], }, + summary: 'Gets filters', + description: + 'Retrieves the list of filters which are used for custom rules in anomaly detection. Sets the size limit explicitly to return a maximum of 1000.', }) .addVersion( { @@ -82,18 +75,6 @@ export function filtersRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup Filters - * - * @api {get} /internal/ml/filters/:filterId Gets filter by ID - * @apiName GetFilterById - * @apiDescription Retrieves the filter with the specified ID. - * - * @apiSchema (params) filterIdSchema - * - * @apiSuccess {Boolean} success - * @apiSuccess {Object} filter the filter with the specified ID - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/filters/{filterId}`, @@ -101,6 +82,8 @@ export function filtersRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetFilters'], }, + summary: 'Gets filter by ID', + description: 'Retrieves the filter with the specified ID.', }) .addVersion( { @@ -121,18 +104,6 @@ export function filtersRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup Filters - * - * @api {put} /internal/ml/filters Creates a filter - * @apiName CreateFilter - * @apiDescription Instantiates a filter, for use by custom rules in anomaly detection. - * - * @apiSchema (body) createFilterSchema - * - * @apiSuccess {Boolean} success - * @apiSuccess {Object} filter created filter - */ router.versioned .put({ path: `${ML_INTERNAL_BASE_PATH}/filters`, @@ -140,6 +111,8 @@ export function filtersRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canCreateFilter'], }, + summary: 'Creates a filter', + description: 'Instantiates a filter, for use by custom rules in anomaly detection.', }) .addVersion( { @@ -162,19 +135,6 @@ export function filtersRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup Filters - * - * @api {put} /internal/ml/filters/:filterId Updates a filter - * @apiName UpdateFilter - * @apiDescription Updates the description of a filter, adds items or removes items. - * - * @apiSchema (params) filterIdSchema - * @apiSchema (body) updateFilterSchema - * - * @apiSuccess {Boolean} success - * @apiSuccess {Object} filter updated filter - */ router.versioned .put({ path: `${ML_INTERNAL_BASE_PATH}/filters/{filterId}`, @@ -182,6 +142,8 @@ export function filtersRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canCreateFilter'], }, + summary: 'Updates a filter', + description: 'Updates the description of a filter, adds items or removes items.', }) .addVersion( { @@ -208,15 +170,6 @@ export function filtersRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup Filters - * - * @api {delete} /internal/ml/filters/:filterId Delete filter - * @apiName DeleteFilter - * @apiDescription Deletes the filter with the specified ID. - * - * @apiSchema (params) filterIdSchema - */ router.versioned .delete({ path: `${ML_INTERNAL_BASE_PATH}/filters/{filterId}`, @@ -224,6 +177,8 @@ export function filtersRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canDeleteFilter'], }, + summary: 'Deletes a filter', + description: 'Deletes the filter with the specified ID.', }) .addVersion( { @@ -248,17 +203,6 @@ export function filtersRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup Filters - * - * @api {get} /internal/ml/filters/_stats Gets filters stats - * @apiName GetFiltersStats - * @apiDescription Retrieves the list of filters which are used for custom rules in anomaly detection, - * with stats on the list of jobs and detectors which are using each filter. - * - * @apiSuccess {Boolean} success - * @apiSuccess {Object[]} filters list of filters with stats on usage - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/filters/_stats`, @@ -266,6 +210,9 @@ export function filtersRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetFilters'], }, + summary: 'Gets filters stats', + description: + 'Retrieves the list of filters which are used for custom rules in anomaly detection, with stats on the list of jobs and detectors which are using each filter.', }) .addVersion( { diff --git a/x-pack/plugins/ml/server/routes/inference_models.ts b/x-pack/plugins/ml/server/routes/inference_models.ts index cb12d87e2b6fc..21ce595b691c7 100644 --- a/x-pack/plugins/ml/server/routes/inference_models.ts +++ b/x-pack/plugins/ml/server/routes/inference_models.ts @@ -19,13 +19,6 @@ export function inferenceModelRoutes( { router, routeGuard }: RouteInitialization, cloud: CloudSetup ) { - /** - * @apiGroup TrainedModels - * - * @api {put} /internal/ml/_inference/:taskType/:inferenceId Create Inference Endpoint - * @apiName CreateInferenceEndpoint - * @apiDescription Create Inference Endpoint - */ router.versioned .put({ path: `${ML_INTERNAL_BASE_PATH}/_inference/{taskType}/{inferenceId}`, @@ -33,6 +26,8 @@ export function inferenceModelRoutes( options: { tags: ['access:ml:canCreateInferenceEndpoint'], }, + summary: 'Create an inference endpoint', + description: 'Create an inference endpoint', }) .addVersion( { @@ -64,13 +59,7 @@ export function inferenceModelRoutes( } ) ); - /** - * @apiGroup TrainedModels - * - * @api {put} /internal/ml/_inference/:taskType/:inferenceId Create Inference Endpoint - * @apiName CreateInferenceEndpoint - * @apiDescription Create Inference Endpoint - */ + router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/_inference/all`, @@ -78,6 +67,8 @@ export function inferenceModelRoutes( options: { tags: ['access:ml:canGetTrainedModels'], }, + summary: 'Get all inference endpoints', + description: 'Get all inference endpoints', }) .addVersion( { diff --git a/x-pack/plugins/ml/server/routes/job_audit_messages.ts b/x-pack/plugins/ml/server/routes/job_audit_messages.ts index 7763361c2c6f9..4cc23555f71b5 100644 --- a/x-pack/plugins/ml/server/routes/job_audit_messages.ts +++ b/x-pack/plugins/ml/server/routes/job_audit_messages.ts @@ -19,16 +19,6 @@ import { * Routes for job audit message routes */ export function jobAuditMessagesRoutes({ router, routeGuard }: RouteInitialization) { - /** - * @apiGroup JobAuditMessages - * - * @api {get} /internal/ml/job_audit_messages/messages/:jobId Get audit messages - * @apiName GetJobAuditMessages - * @apiDescription Returns audit messages for specified job ID - * - * @apiSchema (params) jobAuditMessagesJobIdSchema - * @apiSchema (query) jobAuditMessagesQuerySchema - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/job_audit_messages/messages/{jobId}`, @@ -36,6 +26,8 @@ export function jobAuditMessagesRoutes({ router, routeGuard }: RouteInitializati options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Gets audit messages', + description: 'Retrieves the audit messages for the specified job ID.', }) .addVersion( { @@ -70,15 +62,6 @@ export function jobAuditMessagesRoutes({ router, routeGuard }: RouteInitializati ) ); - /** - * @apiGroup JobAuditMessages - * - * @api {get} /internal/ml/job_audit_messages/messages Get all audit messages - * @apiName GetAllJobAuditMessages - * @apiDescription Returns all audit messages - * - * @apiSchema (query) jobAuditMessagesQuerySchema - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/job_audit_messages/messages`, @@ -86,6 +69,8 @@ export function jobAuditMessagesRoutes({ router, routeGuard }: RouteInitializati options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Gets all audit messages', + description: 'Retrieves all audit messages.', }) .addVersion( { @@ -113,15 +98,6 @@ export function jobAuditMessagesRoutes({ router, routeGuard }: RouteInitializati ) ); - /** - * @apiGroup JobAuditMessages - * - * @api {put} /internal/ml/job_audit_messages/clear_messages Clear messages - * @apiName ClearJobAuditMessages - * @apiDescription Clear the job audit messages. - * - * @apiSchema (body) clearJobAuditMessagesSchema - */ router.versioned .put({ path: `${ML_INTERNAL_BASE_PATH}/job_audit_messages/clear_messages`, @@ -129,6 +105,8 @@ export function jobAuditMessagesRoutes({ router, routeGuard }: RouteInitializati options: { tags: ['access:ml:canCreateJob'], }, + summary: 'Clear messages', + description: 'Clear the job audit messages.', }) .addVersion( { diff --git a/x-pack/plugins/ml/server/routes/job_service.ts b/x-pack/plugins/ml/server/routes/job_service.ts index 3ddbf8a46cb65..37d4bf134004c 100644 --- a/x-pack/plugins/ml/server/routes/job_service.ts +++ b/x-pack/plugins/ml/server/routes/job_service.ts @@ -39,15 +39,6 @@ import type { Datafeed, Job } from '../../common/types/anomaly_detection_jobs'; * Routes for job service */ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/force_start_datafeeds Start datafeeds - * @apiName ForceStartDatafeeds - * @apiDescription Starts one or more datafeeds - * - * @apiSchema (body) forceStartDatafeedSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/force_start_datafeeds`, @@ -55,6 +46,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canStartStopDatafeed'], }, + summary: 'Starts datafeeds', + description: 'Starts one or more datafeeds.', }) .addVersion( { @@ -80,15 +73,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/stop_datafeeds Stop datafeeds - * @apiName StopDatafeeds - * @apiDescription Stops one or more datafeeds - * - * @apiSchema (body) datafeedIdsSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/stop_datafeeds`, @@ -96,6 +80,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canStartStopDatafeed'], }, + summary: 'Stops datafeeds', + description: 'Stops one or more datafeeds.', }) .addVersion( { @@ -121,53 +107,44 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/delete_jobs Delete jobs - * @apiName DeleteJobs - * @apiDescription Deletes an existing anomaly detection job - * - * @apiSchema (body) jobIdsSchema - */ - router.post( - { + router.versioned + .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/delete_jobs`, - validate: { - body: deleteJobsSchema, - }, + access: 'internal', options: { tags: ['access:ml:canDeleteJob'], }, - }, - routeGuard.fullLicenseAPIGuard(async ({ client, mlClient, request, response, context }) => { - try { - const alerting = await context.alerting; - const rulesClient = alerting?.getRulesClient(); - const { deleteJobs } = jobServiceProvider(client, mlClient, rulesClient); + summary: 'Deletes jobs', + description: 'Deletes an existing anomaly detection job.', + }) + .addVersion( + { + version: '1', + validate: { + request: { + body: deleteJobsSchema, + }, + }, + }, + routeGuard.fullLicenseAPIGuard(async ({ client, mlClient, request, response, context }) => { + try { + const alerting = await context.alerting; + const rulesClient = alerting?.getRulesClient(); + const { deleteJobs } = jobServiceProvider(client, mlClient, rulesClient); - const { jobIds, deleteUserAnnotations, deleteAlertingRules } = request.body; + const { jobIds, deleteUserAnnotations, deleteAlertingRules } = request.body; - const resp = await deleteJobs(jobIds, deleteUserAnnotations, deleteAlertingRules); + const resp = await deleteJobs(jobIds, deleteUserAnnotations, deleteAlertingRules); - return response.ok({ - body: resp, - }); - } catch (e) { - return response.customError(wrapError(e)); - } - }) - ); + return response.ok({ + body: resp, + }); + } catch (e) { + return response.customError(wrapError(e)); + } + }) + ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/close_jobs Close jobs - * @apiName CloseJobs - * @apiDescription Closes one or more anomaly detection jobs - * - * @apiSchema (body) jobIdsSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/close_jobs`, @@ -175,6 +152,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canCloseJob'], }, + summary: 'Closes jobs', + description: 'Closes one or more anomaly detection jobs.', }) .addVersion( { @@ -200,15 +179,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/reset_jobs Reset multiple jobs - * @apiName ResetJobs - * @apiDescription Resets one or more anomaly detection jobs - * - * @apiSchema (body) jobIdsSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/reset_jobs`, @@ -216,6 +186,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canResetJob'], }, + summary: 'Resets jobs', + description: 'Resets one or more anomaly detection jobs.', }) .addVersion( { @@ -241,15 +213,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/force_stop_and_close_job Force stop and close job - * @apiName ForceStopAndCloseJob - * @apiDescription Force stops the datafeed and then force closes the anomaly detection job specified by job ID - * - * @apiSchema (body) jobIdSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/force_stop_and_close_job`, @@ -257,6 +220,9 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canCloseJob', 'access:ml:canStartStopDatafeed'], }, + summary: 'Force stops and closes job', + description: + 'Force stops the datafeed and then force closes the anomaly detection job specified by job ID', }) .addVersion( { @@ -282,20 +248,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/jobs_summary Jobs summary - * @apiName JobsSummary - * @apiDescription Returns a list of anomaly detection jobs, with summary level information for every job. - * For any supplied job IDs, full job information will be returned, which include the analysis configuration, - * job stats, datafeed stats, and calendars. - * - * @apiSchema (body) optionalJobIdsSchema - * - * @apiSuccess {Array} jobsList list of jobs. For any supplied job IDs, the job object will contain a fullJob property - * which includes the full configuration and stats for the job. - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/jobs_summary`, @@ -303,6 +255,9 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Jobs summary', + description: + 'Returns a list of anomaly detection jobs, with summary level information for every job. For any supplied job IDs, full job information will be returned, which include the analysis configuration, job stats, datafeed stats, and calendars', }) .addVersion( { @@ -327,15 +282,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/jobs_with_geo Jobs summary - * @apiName JobsSummary - * @apiDescription Returns a list of anomaly detection jobs with analysis config with fields supported by maps. - * - * @apiSuccess {Array} jobIds list of job ids. - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/jobs/jobs_with_geo`, @@ -343,6 +289,9 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Jobs with geo', + description: + 'Returns a list of anomaly detection jobs with analysis config with fields supported by maps.', }) .addVersion( { @@ -369,15 +318,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/jobs_with_time_range Jobs with time range - * @apiName JobsWithTimeRange - * @apiDescription Creates a list of jobs with data about the job's time range - * - * @apiSchema (body) jobsWithTimerangeSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/jobs_with_time_range`, @@ -385,6 +325,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Jobs with time range', + description: "Creates a list of jobs with data about the job's time range.", }) .addVersion( { @@ -405,15 +347,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/job_for_cloning Get job for cloning - * @apiName GetJobForCloning - * @apiDescription Get the job configuration with auto generated fields excluded for cloning - * - * @apiSchema (body) jobIdSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/job_for_cloning`, @@ -421,6 +354,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get job for cloning', + description: 'Get the job configuration with auto generated fields excluded for cloning', }) .addVersion( { @@ -446,15 +381,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/jobs Create jobs list - * @apiName CreateFullJobsList - * @apiDescription Creates a list of jobs - * - * @apiSchema (body) optionalJobIdsSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/jobs`, @@ -462,6 +388,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Create jobs list', + description: 'Creates a list of jobs.', }) .addVersion( { @@ -492,13 +420,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {get} /internal/ml/jobs/groups Get job groups - * @apiName GetAllGroups - * @apiDescription Returns array of group objects with job ids listed for each group - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/jobs/groups`, @@ -506,6 +427,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get all groups', + description: 'Returns array of group objects with job ids listed for each group.', }) .addVersion( { @@ -526,15 +449,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/update_groups Update job groups - * @apiName UpdateGroups - * @apiDescription Updates 'groups' property of an anomaly detection job - * - * @apiSchema (body) updateGroupsSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/update_groups`, @@ -542,6 +456,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canUpdateJob'], }, + summary: 'Update job groups', + description: 'Updates the groups property of an anomaly detection job.', }) .addVersion( { @@ -567,13 +483,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {get} /internal/ml/jobs/blocking_jobs_tasks Get blocking job tasks - * @apiName BlockingJobTasks - * @apiDescription Gets the ids of deleting, resetting or reverting anomaly detection jobs - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/jobs/blocking_jobs_tasks`, @@ -581,6 +490,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get blocking job tasks', + description: 'Gets the ids of deleting, resetting or reverting anomaly detection jobs.', }) .addVersion( { @@ -601,16 +512,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/jobs_exist Check whether jobs exists in current or any space - * @apiName JobsExist - * @apiDescription Checks if each of the jobs in the specified list of IDs exist. - * If allSpaces is true, the check will look across all spaces. - * - * @apiSchema (body) jobsExistSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/jobs_exist`, @@ -618,6 +519,9 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Check if jobs exist', + description: + 'Checks if each of the jobs in the specified list of IDs exist. If allSpaces is true, the check will look across all spaces.', }) .addVersion( { @@ -643,13 +547,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {get} /internal/ml/jobs/new_job_caps/:indexPattern Get new job capabilities - * @apiName NewJobCaps - * @apiDescription Retrieve the capabilities of fields for indices - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/jobs/new_job_caps/{indexPattern}`, @@ -657,6 +554,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get new job capabilities', + description: 'Retrieve the capabilities of fields for indices', }) .addVersion( { @@ -688,15 +587,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { ) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/new_job_line_chart Get job line chart data - * @apiName NewJobLineChart - * @apiDescription Returns line chart data for anomaly detection job - * - * @apiSchema (body) chartSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/new_job_line_chart`, @@ -704,6 +594,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canCreateJob'], }, + summary: 'Get job line chart data', + description: 'Returns line chart data for anomaly detection job', }) .addVersion( { @@ -754,15 +646,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/new_job_population_chart Get population job chart data - * @apiName NewJobPopulationChart - * @apiDescription Returns population job chart data - * - * @apiSchema (body) chartSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/new_job_population_chart`, @@ -770,6 +653,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canCreateJob'], }, + summary: 'Get job population chart data', + description: 'Returns population chart data for anomaly detection job', }) .addVersion( { @@ -818,13 +703,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {get} /internal/ml/jobs/all_jobs_and_group_ids Get all job and group IDs - * @apiName GetAllJobAndGroupIds - * @apiDescription Returns a list of all job IDs and all group IDs - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/jobs/all_jobs_and_group_ids`, @@ -832,6 +710,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get all job and group IDs', + description: 'Returns a list of all job IDs and all group IDs', }) .addVersion( { @@ -852,15 +732,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/look_back_progress Get lookback progress - * @apiName GetLookBackProgress - * @apiDescription Returns current progress of anomaly detection job - * - * @apiSchema (body) lookBackProgressSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/look_back_progress`, @@ -868,6 +739,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canCreateJob'], }, + summary: 'Get lookback progress', + description: 'Returns current progress of anomaly detection job', }) .addVersion( { @@ -893,15 +766,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/categorization_field_validation Get categorization field examples - * @apiName ValidateCategoryValidation - * @apiDescription Validates a field for categorization - * - * @apiSchema (body) categorizationFieldValidationSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/categorization_field_validation`, @@ -909,6 +773,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canCreateJob'], }, + summary: 'Get categorization field examples', + description: 'Returns examples of categorization field', }) .addVersion( { @@ -957,15 +823,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/top_categories Get top categories - * @apiName TopCategories - * @apiDescription Returns list of top categories - * - * @apiSchema (body) topCategoriesSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/top_categories`, @@ -973,6 +830,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get top categories', + description: 'Returns list of top categories', }) .addVersion( { @@ -1014,6 +873,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canPreviewDatafeed'], }, + summary: 'Get datafeed preview', + description: 'Returns a preview of the datafeed search', }) .addVersion( { @@ -1053,15 +914,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/revert_model_snapshot Revert model snapshot - * @apiName RevertModelSnapshot - * @apiDescription Reverts a job to a specified snapshot. Also allows the job to replayed to a specified date and to auto create calendars to skip analysis of specified date ranges - * - * @apiSchema (body) revertModelSnapshotSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/revert_model_snapshot`, @@ -1069,6 +921,9 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canCreateJob', 'access:ml:canStartStopDatafeed'], }, + summary: 'Revert model snapshot', + description: + 'Reverts a job to a specified snapshot. Also allows the job to replayed to a specified date and to auto create calendars to skip analysis of specified date ranges', }) .addVersion( { @@ -1102,15 +957,6 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); - /** - * @apiGroup JobService - * - * @api {post} /internal/ml/jobs/bulk_create Bulk create jobs and datafeeds - * @apiName BulkCreateJobs - * @apiDescription Bulk create jobs and datafeeds. - * - * @apiSchema (body) bulkCreateSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/jobs/bulk_create`, @@ -1118,6 +964,8 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { options: { tags: ['access:ml:canPreviewDatafeed'], }, + summary: 'Bulk create jobs and datafeeds', + description: 'Bulk create jobs and datafeeds.', }) .addVersion( { diff --git a/x-pack/plugins/ml/server/routes/job_validation.ts b/x-pack/plugins/ml/server/routes/job_validation.ts index b33d952f695db..0418ccc57e2b3 100644 --- a/x-pack/plugins/ml/server/routes/job_validation.ts +++ b/x-pack/plugins/ml/server/routes/job_validation.ts @@ -63,15 +63,6 @@ export function jobValidationRoutes({ router, mlLicense, routeGuard }: RouteInit ); } - /** - * @apiGroup JobValidation - * - * @api {post} /internal/ml/validate/estimate_bucket_span Estimate bucket span - * @apiName EstimateBucketSpan - * @apiDescription Estimates minimum viable bucket span based on the characteristics of a pre-viewed subset of the data - * - * @apiSchema (body) estimateBucketSpanSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/validate/estimate_bucket_span`, @@ -79,6 +70,9 @@ export function jobValidationRoutes({ router, mlLicense, routeGuard }: RouteInit options: { tags: ['access:ml:canCreateJob'], }, + summary: 'Estimates bucket span', + description: + 'Estimates the minimum viable bucket span based on the characteristics of a pre-viewed subset of the data.', }) .addVersion( { @@ -114,17 +108,6 @@ export function jobValidationRoutes({ router, mlLicense, routeGuard }: RouteInit }) ); - /** - * @apiGroup JobValidation - * - * @api {post} /internal/ml/validate/calculate_model_memory_limit Calculates model memory limit - * @apiName CalculateModelMemoryLimit - * @apiDescription Calls _estimate_model_memory endpoint to retrieve model memory estimation. - * - * @apiSchema (body) modelMemoryLimitSchema - * - * @apiSuccess {String} modelMemoryLimit - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/validate/calculate_model_memory_limit`, @@ -132,6 +115,8 @@ export function jobValidationRoutes({ router, mlLicense, routeGuard }: RouteInit options: { tags: ['access:ml:canCreateJob'], }, + summary: 'Calculates model memory limit', + description: 'Calls _estimate_model_memory endpoint to retrieve model memory estimation.', }) .addVersion( { @@ -155,15 +140,6 @@ export function jobValidationRoutes({ router, mlLicense, routeGuard }: RouteInit }) ); - /** - * @apiGroup JobValidation - * - * @api {post} /internal/ml/validate/cardinality Validate cardinality - * @apiName ValidateCardinality - * @apiDescription Validates cardinality for the given job configuration - * - * @apiSchema (body) validateCardinalitySchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/validate/cardinality`, @@ -171,6 +147,8 @@ export function jobValidationRoutes({ router, mlLicense, routeGuard }: RouteInit options: { tags: ['access:ml:canCreateJob'], }, + summary: 'Validates cardinality', + description: 'Validates cardinality for the given job configuration.', }) .addVersion( { @@ -195,15 +173,6 @@ export function jobValidationRoutes({ router, mlLicense, routeGuard }: RouteInit }) ); - /** - * @apiGroup JobValidation - * - * @api {post} /internal/ml/validate/job Validates job - * @apiName ValidateJob - * @apiDescription Validates the given job configuration - * - * @apiSchema (body) validateJobSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/validate/job`, @@ -211,6 +180,8 @@ export function jobValidationRoutes({ router, mlLicense, routeGuard }: RouteInit options: { tags: ['access:ml:canCreateJob'], }, + summary: 'Validates job', + description: 'Validates the given job configuration.', }) .addVersion( { @@ -240,15 +211,6 @@ export function jobValidationRoutes({ router, mlLicense, routeGuard }: RouteInit }) ); - /** - * @apiGroup DataFeedPreviewValidation - * - * @api {post} /internal/ml/validate/datafeed_preview Validates datafeed preview - * @apiName ValidateDataFeedPreview - * @apiDescription Validates that the datafeed preview runs successfully and produces results - * - * @apiSchema (body) validateDatafeedPreviewSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/validate/datafeed_preview`, @@ -256,6 +218,8 @@ export function jobValidationRoutes({ router, mlLicense, routeGuard }: RouteInit options: { tags: ['access:ml:canCreateJob'], }, + summary: 'Validates datafeed preview', + description: 'Validates that the datafeed preview runs successfully and produces results.', }) .addVersion( { diff --git a/x-pack/plugins/ml/server/routes/management.ts b/x-pack/plugins/ml/server/routes/management.ts index 7a74bac8d5128..422e5e0944aad 100644 --- a/x-pack/plugins/ml/server/routes/management.ts +++ b/x-pack/plugins/ml/server/routes/management.ts @@ -25,16 +25,6 @@ import { filterForEnabledFeatureModels } from './trained_models'; * Routes for management service */ export function managementRoutes({ router, routeGuard, getEnabledFeatures }: RouteInitialization) { - /** - * @apiGroup Management - * - * @api {get} /internal/ml/management/list/:listType Management list - * @apiName ManagementList - * @apiDescription Returns a list of anomaly detection jobs, data frame analytics jobs or trained models - * - * @apiSchema (params) listTypeSchema - * - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/management/list/{listType}`, @@ -46,6 +36,9 @@ export function managementRoutes({ router, routeGuard, getEnabledFeatures }: Rou 'access:ml:canCreateTrainedModels', ], }, + summary: 'Gets management list', + description: + 'Retrieves the list of anomaly detection jobs, data frame analytics jobs or trained models.', }) .addVersion( { diff --git a/x-pack/plugins/ml/server/routes/model_management.ts b/x-pack/plugins/ml/server/routes/model_management.ts index 31f29fcf6c8a0..d568b0f3ed91a 100644 --- a/x-pack/plugins/ml/server/routes/model_management.ts +++ b/x-pack/plugins/ml/server/routes/model_management.ts @@ -25,13 +25,6 @@ export function modelManagementRoutes({ routeGuard, getEnabledFeatures, }: RouteInitialization) { - /** - * @apiGroup ModelManagement - * - * @api {get} /internal/ml/model_management/nodes_overview Get node overview about the models allocation - * @apiName GetModelManagementNodesOverview - * @apiDescription Retrieves the list of ML nodes with memory breakdown and allocated models info - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/model_management/nodes_overview`, @@ -44,6 +37,8 @@ export function modelManagementRoutes({ 'access:ml:canGetTrainedModels', ], }, + summary: 'Get node overview about the models allocation', + description: 'Retrieves the list of ML nodes with memory breakdown and allocated models info', }) .addVersion( { @@ -63,13 +58,6 @@ export function modelManagementRoutes({ }) ); - /** - * @apiGroup ModelManagement - * - * @api {get} /internal/ml/model_management/memory_usage Memory usage for jobs and trained models - * @apiName GetModelManagementMemoryUsage - * @apiDescription Returns the memory usage for jobs and trained models - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/model_management/memory_usage`, @@ -82,6 +70,8 @@ export function modelManagementRoutes({ 'access:ml:canGetTrainedModels', ], }, + summary: 'Get memory usage for jobs and trained models', + description: 'Retrieves the memory usage for jobs and trained models', }) .addVersion( { diff --git a/x-pack/plugins/ml/server/routes/modules.ts b/x-pack/plugins/ml/server/routes/modules.ts index b8551e2e961f9..b9f25170ee8b5 100644 --- a/x-pack/plugins/ml/server/routes/modules.ts +++ b/x-pack/plugins/ml/server/routes/modules.ts @@ -16,6 +16,10 @@ import { optionalModuleIdParamSchema, recognizeModulesSchema, setupModuleBodySchema, + recognizeModulesSchemaResponse, + getModulesSchemaResponse, + dataRecognizerConfigResponse, + jobExistsResponse, } from './schemas/modules'; import type { RouteInitialization } from '../types'; @@ -26,35 +30,6 @@ export function dataRecognizer( { router, routeGuard }: RouteInitialization, compatibleModuleType: CompatibleModule | null ) { - /** - * @apiGroup Modules - * - * @api {get} /internal/ml/modules/recognize/:indexPatternTitle Recognize index pattern - * @apiName RecognizeIndex - * @apiDescription By supplying an index pattern, discover if any of the modules are a match for data in that index. - * @apiSchema (params) recognizeModulesSchema - * @apiSchema (query) moduleFilterSchema - * @apiSuccess {object[]} modules Array of objects describing the modules which match the index pattern, sorted by module ID. - * @apiSuccessExample {json} Success-Response: - * [{ - * "id": "nginx_ecs", - * "title": "Nginx access logs", - * "query": { - * "bool": { - * "filter": [ - * { "term": { "event.dataset": "nginx.access" } }, - * { "exists": { "field": "source.address" } }, - * { "exists": { "field": "url.original" } }, - * { "exists": { "field": "http.response.status_code" } } - * ] - * } - * }, - * "description": "Find unusual activity in HTTP access logs from filebeat (ECS)", - * "logo": { - * "icon": "logoNginx" - * } - * }] - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/modules/recognize/{indexPatternTitle}`, @@ -62,6 +37,9 @@ export function dataRecognizer( options: { tags: ['access:ml:canCreateJob'], }, + summary: 'Recognize index pattern', + description: + 'By supplying an index pattern, discover if any of the modules are a match for data in that index.', }) .addVersion( { @@ -71,6 +49,11 @@ export function dataRecognizer( params: recognizeModulesSchema, query: moduleFilterSchema, }, + response: { + 200: { + body: recognizeModulesSchemaResponse, + }, + }, }, }, routeGuard.fullLicenseAPIGuard( @@ -108,115 +91,6 @@ export function dataRecognizer( ) ); - /** - * @apiGroup Modules - * - * @api {get} /internal/ml/modules/get_module/:moduleId Get module - * @apiName GetModule - * @apiDescription Retrieve a whole ML module, containing jobs, datafeeds and saved objects. If - * no module ID is supplied, returns all modules. - * @apiSchema (params) moduleIdParamSchema - * @apiSchema (query) moduleFilterSchema - * @apiSuccess {object} module When a module ID is specified, returns a module object containing - * all of the jobs, datafeeds and saved objects which will be created when the module is setup. - * @apiSuccess {object[]} modules If no module ID is supplied, an array of all modules will be returned. - * @apiSuccessExample {json} Success-Response: - * { - * "id":"sample_data_ecommerce", - * "title":"Kibana sample data eCommerce", - * "description":"Find anomalies in eCommerce total sales data", - * "type":"Sample Dataset", - * "logoFile":"logo.json", - * "defaultIndexPattern":"kibana_sample_data_ecommerce", - * "query":{ - * "bool":{ - * "filter":[ - * { - * "term":{ - * "_index":"kibana_sample_data_ecommerce" - * } - * } - * ] - * } - * }, - * "jobs":[ - * { - * "id":"high_sum_total_sales", - * "config":{ - * "groups":[ - * "kibana_sample_data", - * "kibana_sample_ecommerce" - * ], - * "description":"Find customers spending an unusually high amount in an hour", - * "analysis_config":{ - * "bucket_span":"1h", - * "detectors":[ - * { - * "detector_description":"High total sales", - * "function":"high_sum", - * "field_name":"taxful_total_price", - * "over_field_name":"customer_full_name.keyword" - * } - * ], - * "influencers":[ - * "customer_full_name.keyword", - * "category.keyword" - * ] - * }, - * "analysis_limits":{ - * "model_memory_limit":"10mb" - * }, - * "data_description":{ - * "time_field":"order_date" - * }, - * "model_plot_config":{ - * "enabled":true - * }, - * "custom_settings":{ - * "created_by":"ml-module-sample", - * "custom_urls":[ - * { - * "url_name":"Raw data", - * "url_value":"kibana#/discover?_g=(time:(from:'$earliest$',mode:absolute,to:'$latest$'))&_a - * (index:ff959d40-b880-11e8-a6d9-e546fe2bba5f,query:(language:kuery,query:'customer_full_name - * keyword:\"$customer_full_name.keyword$\"'),sort:!('@timestamp',desc))" - * }, - * { - * "url_name":"Data dashboard", - * "url_value":"kibana#/dashboard/722b74f0-b882-11e8-a6d9-e546fe2bba5f?_g=(filters:!(),time:(from:'$earliest$', - * mode:absolute,to:'$latest$'))&_a=(filters:!(('$state':(store:appState),meta:(alias:!n,disabled:!f - * index:'INDEX_PATTERN_ID', key:customer_full_name.keyword,negate:!f,params:(query:'$customer_full_name.keyword$') - * type:phrase,value:'$customer_full_name.keyword$'),query:(match:(customer_full_name.keyword: - * (query:'$customer_full_name.keyword$',type:phrase))))),query:(language:kuery, query:''))" - * } - * ] - * } - * } - * } - * ], - * "datafeeds":[ - * { - * "id":"datafeed-high_sum_total_sales", - * "config":{ - * "job_id":"high_sum_total_sales", - * "indexes":[ - * "INDEX_PATTERN_NAME" - * ], - * "query":{ - * "bool":{ - * "filter":[ - * { - * "term":{ "_index":"kibana_sample_data_ecommerce" } - * } - * ] - * } - * } - * } - * } - * ], - * "kibana":{} - * } - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/modules/get_module/{moduleId?}`, @@ -224,6 +98,9 @@ export function dataRecognizer( options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get module', + description: + 'Retrieve a whole ML module, containing jobs, datafeeds and saved objects. If no module ID is supplied, returns all modules.', }) .addVersion( { @@ -233,6 +110,13 @@ export function dataRecognizer( params: optionalModuleIdParamSchema, query: moduleFilterSchema, }, + response: { + 200: { + body: getModulesSchemaResponse, + description: + 'When a module ID is specified, returns a module object containing all of the jobs, datafeeds and saved objects which will be created when the module is setup. If no module ID is supplied, an array of all modules will be returned.', + }, + }, }, }, routeGuard.fullLicenseAPIGuard( @@ -279,146 +163,6 @@ export function dataRecognizer( ) ); - /** - * @apiGroup Modules - * - * @api {post} /internal/ml/modules/setup/:moduleId Set up module - * @apiName SetupModule - * @apiDescription Runs the module setup process. - * This creates jobs, datafeeds and kibana saved objects. It allows for customization of the module, - * overriding the default configuration. It also allows the user to start the datafeed. - * @apiSchema (params) moduleIdParamSchema - * @apiSchema (body) setupModuleBodySchema - * @apiParamExample {json} jobOverrides-no-job-ID: - * "jobOverrides": { - * "analysis_limits": { - * "model_memory_limit": "13mb" - * } - * } - * @apiParamExample {json} jobOverrides-with-job-ID: - * "jobOverrides": [ - * { - * "analysis_limits": { - * "job_id": "foo" - * "model_memory_limit": "13mb" - * } - * } - * ] - * @apiParamExample {json} datafeedOverrides: - * "datafeedOverrides": [ - * { - * "scroll_size": 1001 - * }, - * { - * "job_id": "visitor_rate_ecs", - * "frequency": "30m" - * } - * ] - * @apiParamExample {json} query-overrrides-datafeedOverrides-query: - * { - * "query": {"bool":{"must":[{"match_all":{}}]}} - * "datafeedOverrides": { - * "query": {} - * } - * } - * @apiSuccess {object} results An object containing the results of creating the items in a module, - * i.e. the jobs, datafeeds and saved objects. Each item is listed by id with a success flag - * signifying whether the creation was successful. If the item creation failed, an error object - * with also be supplied containing the error. - * @apiSuccessExample {json} Success-Response: - * { - * "jobs": [{ - * "id": "test-visitor_rate_ecs", - * "success": true - * }, { - * "id": "test-status_code_rate_ecs", - * "success": true - * }, { - * "id": "test-source_ip_url_count_ecs", - * "success": true - * }, { - * "id": "test-source_ip_request_rate_ecs", - * "success": true - * }, { - * "id": "test-low_request_rate_ecs", - * "success": true - * }], - * "datafeeds": [{ - * "id": "datafeed-test-visitor_rate_ecs", - * "success": true, - * "started": false - * }, { - * "id": "datafeed-test-status_code_rate_ecs", - * "success": true, - * "started": false - * }, { - * "id": "datafeed-test-source_ip_url_count_ecs", - * "success": true, - * "started": false - * }, { - * "id": "datafeed-test-low_request_rate_ecs", - * "success": true, - * "started": false - * }, { - * "id": "datafeed-test-source_ip_request_rate_ecs", - * "success": true, - * "started": false - * }], - * "kibana": { - * "dashboard": [{ - * "id": "ml_http_access_explorer_ecs", - * "success": true - * }], - * "search": [{ - * "id": "ml_http_access_filebeat_ecs", - * "success": true - * }], - * "visualization": [{ - * "id": "ml_http_access_map_ecs", - * "success": true - * }, { - * "id": "ml_http_access_source_ip_timechart_ecs", - * "success": true - * }, { - * "id": "ml_http_access_status_code_timechart_ecs", - * "success": true - * }, { - * "id": "ml_http_access_top_source_ips_table_ecs", - * "success": true - * }, { - * "id": "ml_http_access_top_urls_table_ecs", - * "success": true - * }, { - * "id": "ml_http_access_events_timechart_ecs", - * "success": true - * }, { - * "id": "ml_http_access_unique_count_url_timechart_ecs", - * "success": true - * }] - * } - * } - * @apiSuccessExample {json} Error-Response: - * { - * "jobs": [{ - * "id": "test-status_code_rate_ecs", - * "success": false, - * "error": { - * "msg": "[resource_already_exists_exception] The job cannot be created with the Id 'test-status_code_rate_ecs'. The Id is - * already used.", - * "path": "/_ml/anomaly_detectors/test-status_code_rate_ecs", - * "query": {}, - * "body": "{...}", - * "statusCode": 400, - * "response": "{\"error\":{\"root_cause\":[{\"type\":\"resource_already_exists_exception\",\"reason\":\"The job cannot be created - * with the Id 'test-status_code_rate_ecs'. The Id is already used.\"}],\"type\":\"resource_already_exists_exception\", - * \"reason\":\"The job cannot be created with the Id 'test-status_code_rate_ecs'. The Id is already used.\"},\"status\":400}" - * } - * }, - * }, - * ... - * }] - * } - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/modules/setup/{moduleId}`, @@ -426,6 +170,9 @@ export function dataRecognizer( options: { tags: ['access:ml:canCreateJob'], }, + summary: 'Setup module', + description: + 'Runs the module setup process. This creates jobs, datafeeds and kibana saved objects. It allows for customization of the module, overriding the default configuration. It also allows the user to start the datafeed.', }) .addVersion( { @@ -435,6 +182,13 @@ export function dataRecognizer( params: moduleIdParamSchema, body: setupModuleBodySchema, }, + response: { + 200: { + body: dataRecognizerConfigResponse, + description: + 'An object containing the results of creating the items in a module, i.e. the jobs, datafeeds and saved objects. Each item is listed by id with a success flag signifying whether the creation was successful. If the item creation failed, an error object will also be supplied containing the error.', + }, + }, }, }, routeGuard.fullLicenseAPIGuard( @@ -501,56 +255,12 @@ export function dataRecognizer( ); /** - * @apiGroup Modules - * - * @api {get} /internal/ml/modules/jobs_exist/:moduleId Check if module jobs exist - * @apiName CheckExistingModuleJobs - * @apiDescription Check whether the jobs in the module with the specified ID exist in the - * current list of jobs. The check runs a test to see if any of the jobs in existence - * have an ID which ends with the ID of each job in the module. This is done as a prefix - * may be supplied in the setup endpoint which is added to the start of the ID of every job in the module. - * @apiSchema (params) moduleIdParamSchema + * @apiSuccess {boolean} jobsExist true if all the jobs in the module have a matching job with an * ID which ends with the job ID specified in the module, false otherwise. * @apiSuccess {Object[]} jobs present if the jobs do all exist, with each object having keys of id, * and optionally earliestTimestampMs, latestTimestampMs, latestResultsTimestampMs * properties if the job has processed any data. - * @apiSuccessExample {json} Success-Response: - * { - * "jobsExist":true, - * "jobs":[ - * { - * "id":"nginx_low_request_rate_ecs", - * "earliestTimestampMs":1547016291000, - * "latestTimestampMs":1548256497000 - * "latestResultsTimestampMs":1548255600000 - * }, - * { - * "id":"nginx_source_ip_request_rate_ecs", - * "earliestTimestampMs":1547015109000, - * "latestTimestampMs":1548257222000 - * "latestResultsTimestampMs":1548255600000 - * }, - * { - * "id":"nginx_source_ip_url_count_ecs", - * "earliestTimestampMs":1547015109000, - * "latestTimestampMs":1548257222000 - * "latestResultsTimestampMs":1548255600000 - * }, - * { - * "id":"nginx_status_code_rate_ecs", - * "earliestTimestampMs":1547015109000, - * "latestTimestampMs":1548257222000 - * "latestResultsTimestampMs":1548255600000 - * }, - * { - * "id":"nginx_visitor_rate_ecs", - * "earliestTimestampMs":1547016291000, - * "latestTimestampMs":1548256497000 - * "latestResultsTimestampMs":1548255600000 - * } - * ] - * } */ router.versioned .get({ @@ -559,6 +269,8 @@ export function dataRecognizer( options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Check if module jobs exist', + description: `Check whether the jobs in the module with the specified ID exist in the current list of jobs. The check runs a test to see if any of the jobs in existence have an ID which ends with the ID of each job in the module. This is done as a prefix may be supplied in the setup endpoint which is added to the start of the ID of every job in the module.`, }) .addVersion( { @@ -567,6 +279,13 @@ export function dataRecognizer( request: { params: moduleIdParamSchema, }, + response: { + 200: { + body: jobExistsResponse, + description: + 'jobs present if the jobs do all exist, with each object having keys of id, and optionally earliestTimestampMs, latestTimestampMs, latestResultsTimestampMs properties if the job has processed any data.', + }, + }, }, }, routeGuard.fullLicenseAPIGuard( diff --git a/x-pack/plugins/ml/server/routes/notifications.ts b/x-pack/plugins/ml/server/routes/notifications.ts index c248399ff001a..02e7694834b73 100644 --- a/x-pack/plugins/ml/server/routes/notifications.ts +++ b/x-pack/plugins/ml/server/routes/notifications.ts @@ -19,13 +19,6 @@ export function notificationsRoutes({ routeGuard, getEnabledFeatures, }: RouteInitialization) { - /** - * @apiGroup Notifications - * - * @api {get} /internal/ml/notifications Get notifications - * @apiName GetNotifications - * @apiDescription Retrieves notifications based on provided criteria. - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/notifications`, @@ -37,6 +30,8 @@ export function notificationsRoutes({ 'access:ml:canGetTrainedModels', ], }, + summary: 'Get notifications', + description: 'Retrieves notifications based on provided criteria.', }) .addVersion( { @@ -68,13 +63,6 @@ export function notificationsRoutes({ ) ); - /** - * @apiGroup Notifications - * - * @api {get} /internal/ml/notifications/count Get notification counts - * @apiName GetNotificationCounts - * @apiDescription Counts notifications by level. - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/notifications/count`, @@ -86,6 +74,8 @@ export function notificationsRoutes({ 'access:ml:canGetTrainedModels', ], }, + summary: 'Get notification counts', + description: 'Counts notifications by level.', }) .addVersion( { diff --git a/x-pack/plugins/ml/server/routes/results_service.ts b/x-pack/plugins/ml/server/routes/results_service.ts index 225f39adc0d67..e558c1f94a300 100644 --- a/x-pack/plugins/ml/server/routes/results_service.ts +++ b/x-pack/plugins/ml/server/routes/results_service.ts @@ -106,15 +106,6 @@ function getCategoryStoppedPartitions(mlClient: MlClient, payload: any) { * Routes for results service */ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization) { - /** - * @apiGroup ResultsService - * - * @api {post} /internal/ml/results/anomalies_table_data Get anomalies records for table display - * @apiName GetAnomaliesTableData - * @apiDescription Retrieves anomaly records for an anomaly detection job and formats them for anomalies table display. - * - * @apiSchema (body) anomaliesTableDataSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/results/anomalies_table_data`, @@ -122,6 +113,9 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get anomalies records for table display', + description: + 'Retrieves anomaly records for an anomaly detection job and formats them for anomalies table display.', }) .addVersion( { @@ -145,15 +139,6 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization }) ); - /** - * @apiGroup ResultsService - * - * @api {post} /internal/ml/results/category_definition Get category definition - * @apiName GetCategoryDefinition - * @apiDescription Returns the definition of the category with the specified ID and job ID - * - * @apiSchema (body) categoryDefinitionSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/results/category_definition`, @@ -161,6 +146,8 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get category definition', + description: 'Returns the definition of the category with the specified ID and job ID.', }) .addVersion( { @@ -184,15 +171,6 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization }) ); - /** - * @apiGroup ResultsService - * - * @api {post} /internal/ml/results/max_anomaly_score Get the maximum anomaly_score - * @apiName GetMaxAnomalyScore - * @apiDescription Returns the maximum anomaly score of the bucket results for the request job ID(s) and time range - * - * @apiSchema (body) maxAnomalyScoreSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/results/max_anomaly_score`, @@ -200,6 +178,9 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get the maximum anomaly_score', + description: + 'Returns the maximum anomaly score of the bucket results for the request job ID(s) and time range.', }) .addVersion( { @@ -223,15 +204,6 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization }) ); - /** - * @apiGroup ResultsService - * - * @api {post} /internal/ml/results/category_examples Get category examples - * @apiName GetCategoryExamples - * @apiDescription Returns examples for the categories with the specified IDs from the job with the supplied ID - * - * @apiSchema (body) categoryExamplesSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/results/category_examples`, @@ -239,6 +211,9 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get category examples', + description: + 'Returns examples for the categories with the specified IDs from the job with the supplied ID.', }) .addVersion( { @@ -262,15 +237,6 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization }) ); - /** - * @apiGroup ResultsService - * - * @api {post} /internal/ml/results/partition_fields_values Returns partition fields values - * @apiName GetPartitionFieldsValues - * @apiDescription Returns the partition fields with values that match the provided criteria for the specified job ID. - * - * @apiSchema (body) partitionFieldValuesSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/results/partition_fields_values`, @@ -278,6 +244,9 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get partition fields values', + description: + 'Returns the partition fields with values that match the provided criteria for the specified job ID.', }) .addVersion( { @@ -301,14 +270,6 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization }) ); - /** - * @apiGroup ResultsService - * - * @api {post} /internal/ml/results/anomaly_search Run a search on the anomaly results index - * @apiName AnomalySearch - * @apiDescription Runs the supplied query against the anomaly results index for the specified job IDs. - * @apiSchema (body) anomalySearchSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/results/anomaly_search`, @@ -316,6 +277,9 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Run a search on the anomaly results index', + description: + 'Runs the supplied query against the anomaly results index for the specified job IDs.', }) .addVersion( { @@ -339,15 +303,6 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization }) ); - /** - * @apiGroup ResultsService - * - * @api {get} /internal/ml/results/:jobId/categorizer_stats Return categorizer statistics - * @apiName GetCategorizerStats - * @apiDescription Returns the categorizer stats for the specified job ID - * @apiSchema (params) jobIdSchema - * @apiSchema (query) getCategorizerStatsSchema - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/results/{jobId}/categorizer_stats`, @@ -355,6 +310,8 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get categorizer statistics', + description: 'Returns the categorizer statistics for the specified job ID.', }) .addVersion( { @@ -378,14 +335,6 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization }) ); - /** - * @apiGroup ResultsService - * - * @api {post} /internal/ml/results/category_stopped_partitions Get partitions that have stopped being categorized - * @apiName GetCategoryStoppedPartitions - * @apiDescription Returns information on the partitions that have stopped being categorized due to the categorization status changing from ok to warn. Can return either the list of stopped partitions for each job, or just the list of job IDs. - * @apiSchema (body) getCategorizerStoppedPartitionsSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/results/category_stopped_partitions`, @@ -393,6 +342,9 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get partitions that have stopped being categorized', + description: + 'Returns information on the partitions that have stopped being categorized due to the categorization status changing from ok to warn. Can return either the list of stopped partitions for each job, or just the list of job IDs.', }) .addVersion( { @@ -415,15 +367,6 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization }) ); - /** - * @apiGroup ResultsService - * - * @api {post} /internal/ml/results/datafeed_results_chart Get datafeed results chart data - * @apiName GetDatafeedResultsChartData - * @apiDescription Returns datafeed results chart data - * - * @apiSchema (body) getDatafeedResultsChartDataSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/results/datafeed_results_chart`, @@ -431,6 +374,8 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get datafeed results chart data', + description: 'Returns datafeed results chart data', }) .addVersion( { @@ -455,15 +400,6 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization }) ); - /** - * @apiGroup ResultsService - * - * @api {post} /internal/ml/results/anomaly_charts Get data for anomaly charts - * @apiName GetAnomalyChartsData - * @apiDescription Returns anomaly charts data - * - * @apiSchema (body) getAnomalyChartsSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/results/anomaly_charts`, @@ -471,6 +407,8 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get data for anomaly charts', + description: 'Returns anomaly charts data', }) .addVersion( { @@ -495,15 +433,6 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization }) ); - /** - * @apiGroup ResultsService - * - * @api {post} /internal/ml/results/anomaly_records Get anomaly records for criteria - * @apiName GetAnomalyRecords - * @apiDescription Returns anomaly records - * - * @apiSchema (body) getAnomalyRecordsSchema - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/results/anomaly_records`, @@ -511,6 +440,8 @@ export function resultsServiceRoutes({ router, routeGuard }: RouteInitialization options: { tags: ['access:ml:canGetJobs'], }, + summary: 'Get anomaly records for criteria', + description: 'Returns anomaly records', }) .addVersion( { diff --git a/x-pack/plugins/ml/server/routes/saved_objects.ts b/x-pack/plugins/ml/server/routes/saved_objects.ts index 485ce7ffe1f72..74eb14ef68f8a 100644 --- a/x-pack/plugins/ml/server/routes/saved_objects.ts +++ b/x-pack/plugins/ml/server/routes/saved_objects.ts @@ -28,14 +28,6 @@ export function savedObjectsRoutes( { router, routeGuard }: RouteInitialization, { getSpaces, resolveMlCapabilities }: SavedObjectsRouteDeps ) { - /** - * @apiGroup MLSavedObjects - * - * @api {get} /internal/ml/saved_objects/status Get job and trained model saved object status - * @apiName SavedObjectsStatus - * @apiDescription Lists all jobs, trained models and saved objects to view the relationship status between them - * - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/saved_objects/status`, @@ -43,6 +35,9 @@ export function savedObjectsRoutes( options: { tags: ['access:ml:canGetJobs', 'access:ml:canGetTrainedModels'], }, + summary: 'Get job and trained model saved object status', + description: + 'Lists all jobs, trained models and saved objects to view the relationship status between them', }) .addVersion( { @@ -63,17 +58,6 @@ export function savedObjectsRoutes( }) ); - /** - * @apiGroup MLSavedObjects - * - * @api {get} /api/ml/saved_objects/sync Sync job and trained models saved objects - * @apiName SyncMLSavedObjects - * @apiDescription Synchronizes saved objects for jobs and trained models. Saved objects will be created for items which are missing them, - * and saved objects will be deleted for items which no longer exist. - * Updates missing datafeed IDs in saved objects for datafeeds which exist, and - * removes datafeed IDs for datafeeds which no longer exist. - * - */ router.versioned .get({ path: `${ML_EXTERNAL_BASE_PATH}/saved_objects/sync`, @@ -116,14 +100,6 @@ export function savedObjectsRoutes( ) ); - /** - * @apiGroup MLSavedObjects - * - * @api {get} /internal/ml/saved_objects/initialize Create saved objects for all job and trained models - * @apiName InitializeMLSavedObjects - * @apiDescription Create saved objects for jobs and trained models which are missing them. - * - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/saved_objects/initialize`, @@ -135,6 +111,9 @@ export function savedObjectsRoutes( 'access:ml:canCreateTrainedModels', ], }, + summary: 'Create saved objects for all job and trained models', + description: + 'Creates saved objects for machine learning jobs and trained models which are missing them.', }) .addVersion( { @@ -162,14 +141,6 @@ export function savedObjectsRoutes( ) ); - /** - * @apiGroup MLSavedObjects - * - * @api {get} /internal/ml/saved_objects/sync_needed Check whether job and trained model saved objects need synchronizing - * @apiName SyncCheck - * @apiDescription Check whether job and trained model saved objects need synchronizing. - * - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/saved_objects/sync_check`, @@ -181,6 +152,8 @@ export function savedObjectsRoutes( 'access:ml:canGetTrainedModels', ], }, + summary: 'Check whether job and trained model saved objects need synchronizing', + description: 'Check whether job and trained model saved objects need synchronizing.', }) .addVersion( { @@ -208,15 +181,6 @@ export function savedObjectsRoutes( ) ); - /** - * @apiGroup MLSavedObjects - * - * @api {post} /internal/ml/saved_objects/update_jobs_spaces Update what spaces jobs are assigned to - * @apiName UpdateJobsSpaces - * @apiDescription Update a list of jobs to add and/or remove them from given spaces. - * - * @apiSchema (body) updateJobsSpaces - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/saved_objects/update_jobs_spaces`, @@ -224,6 +188,8 @@ export function savedObjectsRoutes( options: { tags: ['access:ml:canCreateJob', 'access:ml:canCreateDataFrameAnalytics'], }, + summary: 'Update what spaces jobs are assigned to', + description: 'Update a list of jobs to add and/or remove them from given spaces.', }) .addVersion( { @@ -254,15 +220,6 @@ export function savedObjectsRoutes( }) ); - /** - * @apiGroup MLSavedObjects - * - * @api {post} /internal/ml/saved_objects/update_trained_models_spaces Update what spaces trained models are assigned to - * @apiName UpdateTrainedModelsSpaces - * @apiDescription Update a list of trained models to add and/or remove them from given spaces. - * - * @apiSchema (body) updateTrainedModelsSpaces - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/saved_objects/update_trained_models_spaces`, @@ -270,6 +227,8 @@ export function savedObjectsRoutes( options: { tags: ['access:ml:canCreateTrainedModels'], }, + summary: 'Update what spaces trained models are assigned to', + description: 'Update a list of trained models to add and/or remove them from given spaces.', }) .addVersion( { @@ -299,15 +258,6 @@ export function savedObjectsRoutes( }) ); - /** - * @apiGroup MLSavedObjects - * - * @api {post} /internal/ml/saved_objects/remove_item_from_current_space Remove jobs or trained models from the current space - * @apiName RemoveMLSpaceAwareItemsFromCurrentSpace - * @apiDescription Remove a list of jobs or trained models from the current space. - * - * @apiSchema (body) itemsAndCurrentSpace - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/saved_objects/remove_item_from_current_space`, @@ -315,6 +265,8 @@ export function savedObjectsRoutes( options: { tags: ['access:ml:canCreateJob', 'access:ml:canCreateDataFrameAnalytics'], }, + summary: 'Remove jobs or trained models from the current space', + description: 'Remove a list of jobs or trained models from the current space.', }) .addVersion( { @@ -370,14 +322,6 @@ export function savedObjectsRoutes( }) ); - /** - * @apiGroup MLSavedObjects - * - * @api {get} /internal/ml/saved_objects/jobs_spaces Get all jobs and their spaces - * @apiName JobsSpaces - * @apiDescription List all jobs and their spaces. - * - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/saved_objects/jobs_spaces`, @@ -385,6 +329,8 @@ export function savedObjectsRoutes( options: { tags: ['access:ml:canGetJobs', 'access:ml:canGetDataFrameAnalytics'], }, + summary: 'Get all jobs and their spaces', + description: 'List all jobs and their spaces.', }) .addVersion( { @@ -405,14 +351,6 @@ export function savedObjectsRoutes( }) ); - /** - * @apiGroup MLSavedObjects - * - * @api {get} /internal/ml/saved_objects/trained_models_spaces Get all trained models and their spaces - * @apiName TrainedModelsSpaces - * @apiDescription List all trained models and their spaces. - * - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/saved_objects/trained_models_spaces`, @@ -420,6 +358,8 @@ export function savedObjectsRoutes( options: { tags: ['access:ml:canGetTrainedModels'], }, + summary: 'Get all trained models and their spaces', + description: 'List all trained models and their spaces.', }) .addVersion( { @@ -440,28 +380,6 @@ export function savedObjectsRoutes( }) ); - /** - * @apiGroup MLSavedObjects - * - * @api {post} /internal/ml/saved_objects/can_delete_ml_space_aware_item Check whether user can delete a job or trained model - * @apiName CanDeleteMLSpaceAwareItems - * @apiDescription Check the user's ability to delete jobs or trained models. Returns whether they are able - * to fully delete the job or trained model and whether they are able to remove it from - * the current space. - * Note, this is only for enabling UI controls. A user calling endpoints - * directly will still be able to delete or remove the job or trained model from a space. - * - * @apiSchema (params) itemTypeSchema - * @apiSchema (body) canDeleteMLSpaceAwareItemsSchema - * @apiSuccessExample {json} Error-Response: - * { - * "my_job": { - * "canDelete": false, - * "canRemoveFromSpace": true - * } - * } - * - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/saved_objects/can_delete_ml_space_aware_item/{jobType}`, @@ -473,6 +391,8 @@ export function savedObjectsRoutes( 'access:ml:canGetTrainedModels', ], }, + summary: 'Check whether user can delete a job or trained model', + description: `Check the user's ability to delete jobs or trained models. Returns whether they are able to fully delete the job or trained model and whether they are able to remove it from the current space. Note, this is only for enabling UI controls. A user calling endpoints directly will still be able to delete or remove the job or trained model from a space.`, }) .addVersion( { diff --git a/x-pack/plugins/ml/server/routes/schemas/annotations_schema.ts b/x-pack/plugins/ml/server/routes/schemas/annotations_schema.ts index 73e876f0a9122..aa1b1d57ce635 100644 --- a/x-pack/plugins/ml/server/routes/schemas/annotations_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/annotations_schema.ts @@ -6,7 +6,9 @@ */ import { schema } from '@kbn/config-schema'; +import type { Annotations } from '../../../common/types/annotations'; import { ANNOTATION_TYPE } from '../../../common/constants/annotations'; +import type { JobId } from '../../shared'; export const indexAnnotationSchema = schema.object({ timestamp: schema.number(), @@ -68,4 +70,15 @@ export const getAnnotationsSchema = schema.object({ ), }); +export const annotationsResponseSchema = () => { + return schema.object({ + success: schema.boolean(), + annotations: schema.recordOf( + schema.string(), + schema.arrayOf(indexAnnotationSchema) + ), + totalCount: schema.number(), + }); +}; + export const deleteAnnotationSchema = schema.object({ annotationId: schema.string() }); diff --git a/x-pack/plugins/ml/server/routes/schemas/anomaly_detectors_schema.ts b/x-pack/plugins/ml/server/routes/schemas/anomaly_detectors_schema.ts index 4b7fc5bf245c0..370b5d657e7c1 100644 --- a/x-pack/plugins/ml/server/routes/schemas/anomaly_detectors_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/anomaly_detectors_schema.ts @@ -21,13 +21,15 @@ const customRulesSchema = schema.maybe( conditions: schema.maybe(schema.arrayOf(schema.any())), scope: schema.maybe(schema.any()), params: schema.maybe(schema.any()), - }) + }), + { meta: { description: 'Custom rules' } } ) ); const AnalysisLimits = schema.object({ - /** Limit of categorization examples */ - categorization_examples_limit: schema.maybe(schema.number()), + categorization_examples_limit: schema.maybe( + schema.number({ meta: { description: 'Limit of categorization examples' } }) + ), model_memory_limit: schema.string(), }); @@ -48,7 +50,6 @@ const detectorSchema = schema.object({ ]) ), use_null: schema.maybe(schema.boolean()), - /** Custom rules */ custom_rules: customRulesSchema, detector_index: schema.maybe(schema.number()), }); @@ -61,8 +62,9 @@ const customUrlSchema = { const customSettingsSchema = schema.object( { - /** Indicates the creator entity */ - created_by: schema.maybe(schema.string()), + created_by: schema.maybe( + schema.string({ meta: { description: 'Indicates the creator entity' } }) + ), custom_urls: schema.maybe(schema.arrayOf(schema.maybe(schema.object(customUrlSchema)))), }, { unknowns: 'allow' } // Create / Update job API allows other fields to be added to custom_settings. @@ -119,7 +121,6 @@ export const anomalyDetectionJobSchema = { allow_lazy_open: schema.maybe(schema.any()), data_counts: schema.maybe(schema.any()), data_description: schema.object({ - /** Format */ format: schema.maybe(schema.string()), time_field: schema.string(), time_format: schema.maybe(schema.string()), @@ -145,9 +146,12 @@ export const anomalyDetectionJobSchema = { datafeed_config: schema.maybe(datafeedConfigSchema), }; +export const jobIdSchemaBasic = { + jobId: schema.string({ meta: { description: 'Job ID' } }), +}; + export const jobIdSchema = schema.object({ - /** Job ID. */ - jobId: schema.string(), + ...jobIdSchemaBasic, }); export const getBucketsSchema = schema.object({ @@ -156,14 +160,14 @@ export const getBucketsSchema = schema.object({ end: schema.maybe(schema.string()), exclude_interim: schema.maybe(schema.boolean()), expand: schema.maybe(schema.boolean()), - /** Page definition */ page: schema.maybe( - schema.object({ - /** Page offset */ - from: schema.number(), - /** Size of the page */ - size: schema.number(), - }) + schema.object( + { + from: schema.number({ meta: { description: 'Page offset' } }), + size: schema.number({ meta: { description: 'Size of the page' } }), + }, + { meta: { description: 'Page definition' } } + ) ), sort: schema.maybe(schema.string()), start: schema.maybe(schema.string()), @@ -183,43 +187,41 @@ export const getOverallBucketsSchema = schema.object({ }); export const getCategoriesSchema = schema.object({ - /** Category ID */ - categoryId: schema.string(), - /** Job ID */ - jobId: schema.string(), + categoryId: schema.string({ meta: { description: 'Category ID' } }), + ...jobIdSchemaBasic, }); export const getModelSnapshotsSchema = schema.object({ - /** Snapshot ID */ - snapshotId: schema.maybe(schema.string()), - /** Job ID */ - jobId: schema.string(), + snapshotId: schema.maybe(schema.string({ meta: { description: 'Snapshot ID' } })), + ...jobIdSchemaBasic, }); export const updateModelSnapshotsSchema = schema.object({ - /** Snapshot ID */ - snapshotId: schema.string(), - /** Job ID */ - jobId: schema.string(), + snapshotId: schema.string({ meta: { description: 'Snapshot ID' } }), + ...jobIdSchemaBasic, }); export const updateModelSnapshotBodySchema = schema.object({ - /** description */ description: schema.maybe(schema.string()), - /** retain */ retain: schema.maybe(schema.boolean()), }); export const forecastAnomalyDetector = schema.object({ duration: schema.any() }); export const forceQuerySchema = schema.object({ - /** force close */ force: schema.maybe(schema.boolean()), }); export const jobForCloningSchema = schema.object({ - /** Whether to retain the created_by custom setting. */ - retainCreatedBy: schema.maybe(schema.boolean()), - /** Job ID */ - jobId: schema.string(), + retainCreatedBy: schema.maybe( + schema.boolean({ meta: { description: 'Whether to retain the created_by custom setting.' } }) + ), + ...jobIdSchemaBasic, }); + +export const getAnomalyDetectorsResponse = () => { + return schema.object({ + count: schema.number(), + jobs: schema.arrayOf(schema.any()), + }); +}; diff --git a/x-pack/plugins/ml/server/routes/schemas/calendars_schema.ts b/x-pack/plugins/ml/server/routes/schemas/calendars_schema.ts index bc33ac3c57f47..1ca473d77661a 100644 --- a/x-pack/plugins/ml/server/routes/schemas/calendars_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/calendars_schema.ts @@ -27,6 +27,5 @@ export const calendarSchema = schema.object({ export const calendarIdSchema = schema.object({ calendarId: schema.string() }); export const calendarIdsSchema = schema.object({ - /** Comma-separated list of calendar IDs */ - calendarIds: schema.string(), + calendarIds: schema.string({ meta: { description: 'Comma-separated list of calendar IDs' } }), }); diff --git a/x-pack/plugins/ml/server/routes/schemas/data_frame_analytics_schema.ts b/x-pack/plugins/ml/server/routes/schemas/data_frame_analytics_schema.ts index 1cafc7dd8b110..d5f696eb3a8d5 100644 --- a/x-pack/plugins/ml/server/routes/schemas/data_frame_analytics_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/data_frame_analytics_schema.ts @@ -66,24 +66,15 @@ export const dataFrameAnalyticsExplainSchema = schema.object({ }); export const dataFrameAnalyticsIdSchema = schema.object({ - /** - * Analytics ID - */ - analyticsId: schema.string(), + analyticsId: schema.string({ meta: { description: 'Analytics ID' } }), }); export const dataFrameAnalyticsQuerySchema = schema.object({ - /** - * Analytics Query - */ excludeGenerated: schema.maybe(schema.boolean()), size: schema.maybe(schema.number()), }); export const deleteDataFrameAnalyticsJobSchema = schema.object({ - /** - * Analytics Destination Index - */ deleteDestIndex: schema.maybe(schema.boolean()), deleteDestDataView: schema.maybe(schema.boolean()), force: schema.maybe(schema.boolean()), diff --git a/x-pack/plugins/ml/server/routes/schemas/data_visualizer_schema.ts b/x-pack/plugins/ml/server/routes/schemas/data_visualizer_schema.ts index 37ed15a41c4a5..e1fc95b6ce00b 100644 --- a/x-pack/plugins/ml/server/routes/schemas/data_visualizer_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/data_visualizer_schema.ts @@ -13,9 +13,12 @@ export const indexPatternSchema = schema.object({ indexPattern: schema.string(), }); +const querySchemaBasic = { + query: schema.any({ meta: { description: 'Query to match documents in the index' } }), +}; + export const dataVisualizerFieldHistogramsSchema = schema.object({ - /** Query to match documents in the index. */ - query: schema.any(), + ...querySchemaBasic, /** The fields to return histogram data. */ fields: schema.arrayOf(schema.any()), /** Number of documents to be collected in the sample processed on each shard, or -1 for no sampling. */ @@ -62,3 +65,7 @@ export const dataVisualizerOverallStatsSchema = schema.object({ /** Optional search time runtime fields */ runtimeMappings: runtimeMappingsSchema, }); + +export const dataVisualizerFieldHistogramsResponse = () => { + return schema.any(); +}; diff --git a/x-pack/plugins/ml/server/routes/schemas/fields_service_schema.ts b/x-pack/plugins/ml/server/routes/schemas/fields_service_schema.ts index 719a35e7f66c5..986b731334942 100644 --- a/x-pack/plugins/ml/server/routes/schemas/fields_service_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/fields_service_schema.ts @@ -9,31 +9,64 @@ import { schema } from '@kbn/config-schema'; import { runtimeMappingsSchema } from './runtime_mappings_schema'; import { indicesOptionsSchema } from './datafeeds_schema'; +const indexPatternSchema = { + index: schema.oneOf([schema.string(), schema.arrayOf(schema.string())], { + meta: { description: 'Index or indexes for which to return the time range.' }, + }), +}; + +const querySchema = { + query: schema.maybe( + schema.any({ meta: { description: 'Query to match documents in the index(es).' } }) + ), +}; + +const timeFieldNameSchema = { + timeFieldName: schema.maybe( + schema.string({ meta: { description: 'Name of the time field in the index' } }) + ), +}; + export const getCardinalityOfFieldsSchema = schema.object({ - /** Index or indexes for which to return the time range. */ - index: schema.oneOf([schema.string(), schema.arrayOf(schema.string())]), - /** Name(s) of the field(s) to return cardinality information. */ - fieldNames: schema.maybe(schema.arrayOf(schema.string())), - /** Query to match documents in the index(es) (optional). */ - query: schema.maybe(schema.any()), - /** Name of the time field in the index. */ - timeFieldName: schema.maybe(schema.string()), - /** Earliest timestamp for search, as epoch ms (optional). */ - earliestMs: schema.maybe(schema.oneOf([schema.number(), schema.string()])), - /** Latest timestamp for search, as epoch ms (optional). */ - latestMs: schema.maybe(schema.oneOf([schema.number(), schema.string()])), + ...indexPatternSchema, + fieldNames: schema.maybe( + schema.arrayOf(schema.string(), { + meta: { description: 'Name(s) of the field(s) to return cardinality information.' }, + }) + ), + ...querySchema, + ...timeFieldNameSchema, + earliestMs: schema.maybe( + schema.oneOf([schema.number(), schema.string()], { + meta: { description: 'Earliest timestamp for search, as epoch ms' }, + }) + ), + latestMs: schema.maybe( + schema.oneOf([schema.number(), schema.string()], { + meta: { description: 'Latest timestamp for search, as epoch ms' }, + }) + ), }); export const getTimeFieldRangeSchema = schema.object({ - /** Index or indexes for which to return the time range. */ - index: schema.oneOf([schema.string(), schema.arrayOf(schema.string())]), - /** Name of the time field in the index. */ - timeFieldName: schema.maybe(schema.string()), - /** Query to match documents in the index(es). */ - query: schema.maybe(schema.any()), - /** Additional search options. */ + ...indexPatternSchema, + ...timeFieldNameSchema, + ...querySchema, runtimeMappings: runtimeMappingsSchema, indicesOptions: indicesOptionsSchema, - /** Return times from the future. */ - allowFutureTime: schema.maybe(schema.boolean()), + allowFutureTime: schema.maybe( + schema.boolean({ meta: { description: 'Return times from the future' } }) + ), }); + +export const getCardinalityOfFieldsResponse = () => { + return schema.recordOf(schema.string(), schema.number()); +}; + +export const getTimeFieldRangeResponse = () => { + return schema.object({ + start: schema.number(), + end: schema.number(), + success: schema.boolean(), + }); +}; diff --git a/x-pack/plugins/ml/server/routes/schemas/filters_schema.ts b/x-pack/plugins/ml/server/routes/schemas/filters_schema.ts index 43a900c63caed..45b3acdde524f 100644 --- a/x-pack/plugins/ml/server/routes/schemas/filters_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/filters_schema.ts @@ -20,8 +20,5 @@ export const updateFilterSchema = schema.object({ }); export const filterIdSchema = schema.object({ - /** - * ID of the filter - */ - filterId: schema.string(), + filterId: schema.string({ meta: { description: 'ID of the filter' } }), }); diff --git a/x-pack/plugins/ml/server/routes/schemas/inference_schema.ts b/x-pack/plugins/ml/server/routes/schemas/inference_schema.ts index 662b3313a06e3..1f33e0931e850 100644 --- a/x-pack/plugins/ml/server/routes/schemas/inference_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/inference_schema.ts @@ -7,22 +7,17 @@ import { schema } from '@kbn/config-schema'; +const modelIdSchemaBasic = { + modelId: schema.string({ meta: { description: 'Model ID' } }), +}; + export const modelIdSchema = schema.object({ - /** - * Model ID - */ - modelId: schema.string(), + ...modelIdSchemaBasic, }); export const modelAndDeploymentIdSchema = schema.object({ - /** - * Model ID - */ - modelId: schema.string(), - /** - * Deployment ID - */ - deploymentId: schema.string(), + ...modelIdSchemaBasic, + deploymentId: schema.string({ meta: { description: 'Deployment ID' } }), }); export const createInferenceSchema = schema.object({ taskType: schema.oneOf([schema.literal('sparse_embedding'), schema.literal('text_embedding')]), @@ -73,9 +68,8 @@ export const pipelineSimulateBody = schema.object({ export const pipelineDocs = schema.arrayOf(schema.string()); export const stopDeploymentSchema = schema.object({ - modelId: schema.string(), - /** force stop */ - force: schema.maybe(schema.boolean()), + ...modelIdSchemaBasic, + force: schema.maybe(schema.boolean({ meta: { description: 'Force stop' } })), }); export const deleteTrainedModelQuerySchema = schema.object({ diff --git a/x-pack/plugins/ml/server/routes/schemas/job_audit_messages_schema.ts b/x-pack/plugins/ml/server/routes/schemas/job_audit_messages_schema.ts index aeff76f057fc6..e88d3290377b8 100644 --- a/x-pack/plugins/ml/server/routes/schemas/job_audit_messages_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/job_audit_messages_schema.ts @@ -8,8 +8,7 @@ import { schema } from '@kbn/config-schema'; export const jobAuditMessagesJobIdSchema = schema.object({ - /** Job ID. */ - jobId: schema.maybe(schema.string()), + jobId: schema.maybe(schema.string({ meta: { description: 'Job ID' } })), }); export const jobAuditMessagesQuerySchema = schema.object({ diff --git a/x-pack/plugins/ml/server/routes/schemas/job_service_schema.ts b/x-pack/plugins/ml/server/routes/schemas/job_service_schema.ts index 2df7028093862..0feb0e70d267c 100644 --- a/x-pack/plugins/ml/server/routes/schemas/job_service_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/job_service_schema.ts @@ -61,21 +61,22 @@ export const forceStartDatafeedSchema = schema.object({ end: schema.maybe(schema.number()), }); +const jobIds = { + jobIds: schema.arrayOf(schema.string(), { meta: { description: 'List of job IDs.' } }), +}; + export const jobIdsSchema = schema.object({ - /** List of job IDs. */ - jobIds: schema.arrayOf(schema.string()), + ...jobIds, }); export const deleteJobsSchema = schema.object({ - /** List of job IDs. */ - jobIds: schema.arrayOf(schema.string()), + ...jobIds, deleteUserAnnotations: schema.maybe(schema.boolean()), deleteAlertingRules: schema.maybe(schema.boolean()), }); export const optionalJobIdsSchema = schema.object({ - /** Optional list of job IDs. */ - jobIds: schema.maybe(schema.arrayOf(schema.string())), + jobIds: schema.maybe(jobIds.jobIds), }); export const lookBackProgressSchema = { diff --git a/x-pack/plugins/ml/server/routes/schemas/modules.ts b/x-pack/plugins/ml/server/routes/schemas/modules.ts index 6514f55cccfd6..50fe45b653e42 100644 --- a/x-pack/plugins/ml/server/routes/schemas/modules.ts +++ b/x-pack/plugins/ml/server/routes/schemas/modules.ts @@ -8,98 +8,169 @@ import { schema } from '@kbn/config-schema'; export const setupModuleBodySchema = schema.object({ - /** - * Job ID prefix. This will be added to the start of the ID every job created by the module (optional). - */ - prefix: schema.maybe(schema.string()), - /** - * List of group IDs. This will override the groups assigned to each job created by the module (optional). - */ - groups: schema.maybe(schema.arrayOf(schema.string())), - /** - * Name of kibana index pattern. Overrides the index used in each datafeed and each index pattern - * used in the custom urls and saved objects created by the module. A matching index pattern must - * exist in kibana if the module contains custom urls or saved objects which rely on an index pattern ID. - * If the module does not contain custom urls or saved objects which require an index pattern ID, the - * indexPatternName can be any index name or pattern that will match an ES index. It can also be a comma - * separated list of names. If no indexPatternName is supplied, the default index pattern specified in - * the manifest.json will be used (optional). - */ - indexPatternName: schema.maybe(schema.string()), - /** - * ES Query DSL object. Overrides the query object for each datafeed created by the module (optional). - */ - query: schema.maybe(schema.any()), - /** - * Flag to specify that each job created by the module uses a dedicated index (optional). - */ - useDedicatedIndex: schema.maybe(schema.boolean()), - /** - * Flag to specify that each datafeed created by the module is started once saved. Defaults to false (optional). - */ - startDatafeed: schema.maybe(schema.boolean()), - /** - * Start date for datafeed. Specified in epoch seconds. Only used if startDatafeed is true. - * If not specified, a value of 0 is used i.e. start at the beginning of the data (optional). - */ - start: schema.maybe(schema.number()), - /** - * End date for datafeed. Specified in epoch seconds. Only used if startDatafeed is true. - * If not specified, the datafeed will continue to run in real time (optional). - */ - end: schema.maybe(schema.number()), - /** - * Partial job configuration which will override jobs contained in the module. Can be an array of objects. - * If a job_id is specified, only that job in the module will be overridden. - * Applied before any of the existing - * overridable options (e.g. useDedicatedIndex, groups, indexPatternName etc) - * and so can be overridden themselves (optional). - */ - jobOverrides: schema.maybe(schema.any()), - /** - * Partial datafeed configuration which will override datafeeds contained in the module. - * Can be an array of objects. - * If a datafeed_id or a job_id is specified, - * only that datafeed in the module will be overridden. Applied before any of the existing - * overridable options (e.g. useDedicatedIndex, groups, indexPatternName etc) - * and so can be overridden themselves (optional). - */ - datafeedOverrides: schema.maybe(schema.any()), - /** - * Indicates whether an estimate of the model memory limit - * should be made by checking the cardinality of fields in the job configurations (optional). - */ - estimateModelMemory: schema.maybe(schema.boolean()), - - /** - * Add each job created to the * space (optional) - */ - applyToAllSpaces: schema.maybe(schema.boolean()), + prefix: schema.maybe( + schema.string({ + meta: { + description: + 'Job ID prefix. This will be added to the start of the ID every job created by the module (optional).', + }, + }) + ), + groups: schema.maybe( + schema.arrayOf(schema.string(), { + meta: { + description: + 'List of group IDs. This will override the groups assigned to each job created by the module (optional).', + }, + }) + ), + indexPatternName: schema.maybe( + schema.string({ + meta: { + description: `Name of kibana index pattern. Overrides the index used in each datafeed and each index pattern used in the custom urls and saved objects created by the module. A matching index pattern must exist in kibana if the module contains custom urls or saved objects which rely on an index pattern ID. If the module does not contain custom urls or saved objects which require an index pattern ID, the indexPatternName can be any index name or pattern that will match an ES index. It can also be a comma separated list of names. If no indexPatternName is supplied, the default index pattern specified in the manifest.json will be used (optional).`, + }, + }) + ), + query: schema.maybe( + schema.any({ + meta: { + description: + 'ES Query DSL object. Overrides the query object for each datafeed created by the module (optional).', + }, + }) + ), + useDedicatedIndex: schema.maybe( + schema.boolean({ + meta: { + description: + 'Flag to specify that each job created by the module uses a dedicated index (optional).', + }, + }) + ), + startDatafeed: schema.maybe( + schema.boolean({ + meta: { + description: + 'Flag to specify that each datafeed created by the module is started once saved. Defaults to false (optional).', + }, + }) + ), + start: schema.maybe( + schema.number({ + meta: { + description: + 'Start date for datafeed. Specified in epoch seconds. Only used if startDatafeed is true. If not specified, a value of 0 is used i.e. start at the beginning of the data (optional).', + }, + }) + ), + end: schema.maybe( + schema.number({ + meta: { + description: `End date for datafeed. Specified in epoch seconds. Only used if startDatafeed is true. If not specified, the datafeed will continue to run in real time (optional).`, + }, + }) + ), + jobOverrides: schema.maybe( + schema.any({ + meta: { + description: + 'Partial job configuration which will override jobs contained in the module. Can be an array of objects. If a job_id is specified, only that job in the module will be overridden. Applied before any of the existing overridable options (e.g. useDedicatedIndex, groups, indexPatternName etc) and so can be overridden themselves (optional).', + }, + }) + ), + datafeedOverrides: schema.maybe( + schema.any({ + meta: { + description: + 'Partial datafeed configuration which will override datafeeds contained in the module. Can be an array of objects. If a datafeed_id or a job_id is specified, only that datafeed in the module will be overridden. Applied before any of the existing overridable options (e.g. useDedicatedIndex, groups, indexPatternName etc) and so can be overridden themselves (optional).', + }, + }) + ), + estimateModelMemory: schema.maybe( + schema.boolean({ + meta: { + description: + 'Indicates whether an estimate of the model memory limit should be made by checking the cardinality of fields in the job configurations (optional).', + }, + }) + ), + applyToAllSpaces: schema.maybe( + schema.boolean({ meta: { description: 'Add each job created to the * space (optional)' } }) + ), }); export const optionalModuleIdParamSchema = schema.object({ - /** - * ID of the module. - */ - moduleId: schema.maybe(schema.string()), + moduleId: schema.maybe(schema.string({ meta: { description: 'ID of the module' } })), }); export const moduleIdParamSchema = schema.object({ - /** - * ID of the module. - */ - moduleId: schema.string(), + moduleId: schema.string({ meta: { description: 'ID of the module' } }), }); export const recognizeModulesSchema = schema.object({ - /** - * Index pattern to recognize. Note that this does not need to be a Kibana - * index pattern, and can be the name of a single Elasticsearch index, - * or include a wildcard (*) to match multiple indices. - */ - indexPatternTitle: schema.string(), + indexPatternTitle: schema.string({ + meta: { + description: + 'Index pattern to recognize. Note that this does not need to be a Kibana index pattern, and can be the name of a single Elasticsearch index, or include a wildcard (*) to match multiple indices.', + }, + }), }); export const moduleFilterSchema = schema.object({ filter: schema.maybe(schema.string()), }); + +export const recognizeModulesSchemaResponse = () => + schema.arrayOf( + schema.object({ + id: schema.string(), + title: schema.string(), + query: schema.any(), + description: schema.string(), + logo: schema.any(), + }) + ); + +const moduleSchema = schema.object({ + id: schema.string(), + title: schema.string(), + description: schema.string(), + type: schema.string(), + logo: schema.maybe(schema.any()), + logoFile: schema.maybe(schema.string()), + defaultIndexPattern: schema.string(), + query: schema.any(), + jobs: schema.arrayOf(schema.any()), + datafeeds: schema.arrayOf(schema.any()), + kibana: schema.any(), + tags: schema.maybe(schema.arrayOf(schema.string())), +}); + +export const getModulesSchemaResponse = () => + schema.oneOf([moduleSchema, schema.arrayOf(moduleSchema)]); + +/** + * + * @link DataRecognizerConfigResponse + */ +export const dataRecognizerConfigResponse = () => + schema.object({ + datafeeds: schema.arrayOf(schema.any()), + jobs: schema.arrayOf(schema.any()), + kibana: schema.any(), + }); + +export const jobExistsResponse = () => + schema.object({ + jobsExist: schema.boolean(), + jobs: schema.maybe( + schema.arrayOf( + schema.object({ + id: schema.string(), + earliestTimestampMs: schema.number(), + latestTimestampMs: schema.number(), + latestResultsTimestampMs: schema.maybe(schema.number()), + }) + ) + ), + }); diff --git a/x-pack/plugins/ml/server/routes/schemas/notifications_schema.ts b/x-pack/plugins/ml/server/routes/schemas/notifications_schema.ts index e65aac0f95a9f..8d02f40cad697 100644 --- a/x-pack/plugins/ml/server/routes/schemas/notifications_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/notifications_schema.ts @@ -9,13 +9,9 @@ import type { TypeOf } from '@kbn/config-schema'; import { schema } from '@kbn/config-schema'; export const getNotificationsQuerySchema = schema.object({ - /** - * Search string for the message content - */ - queryString: schema.maybe(schema.string()), - /** - * Sort field - */ + queryString: schema.maybe( + schema.string({ meta: { description: 'Search string for the message content' } }) + ), sortField: schema.oneOf( [ schema.literal('timestamp'), @@ -25,13 +21,12 @@ export const getNotificationsQuerySchema = schema.object({ ], { defaultValue: 'timestamp', + meta: { description: 'Sort field' }, } ), - /** - * Sort direction - */ sortDirection: schema.oneOf([schema.literal('asc'), schema.literal('desc')], { defaultValue: 'desc', + meta: { description: 'Sort direction' }, }), earliest: schema.maybe(schema.string()), latest: schema.maybe(schema.string()), diff --git a/x-pack/plugins/ml/server/routes/schemas/results_service_schema.ts b/x-pack/plugins/ml/server/routes/schemas/results_service_schema.ts index a13f3d4f2a807..5b3d268c2fffd 100644 --- a/x-pack/plugins/ml/server/routes/schemas/results_service_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/results_service_schema.ts @@ -82,34 +82,32 @@ export const partitionFieldValuesSchema = schema.object({ export type FieldsConfig = TypeOf['fieldsConfig']; export type FieldConfig = TypeOf; -export const getCategorizerStatsSchema = schema.nullable( - schema.object({ - /** - * Optional value to fetch the categorizer stats - * where results are filtered by partition_by_value = value - */ - partitionByValue: schema.maybe(schema.string()), - }) -); +export const getCategorizerStatsSchema = schema.object({ + partitionByValue: schema.maybe( + schema.string({ + meta: { + description: + 'Optional value to fetch the categorizer stats where results are filtered by partition_by_value = value', + }, + }) + ), +}); export const getCategorizerStoppedPartitionsSchema = schema.object({ - /** - * List of jobIds to fetch the categorizer partitions for - */ - jobIds: schema.arrayOf(schema.string()), - /** - * Field to aggregate results by: 'job_id' or 'partition_field_value' - * If by job_id, will return list of jobIds with at least one partition that have stopped - * If by partition_field_value, it will return a list of categorizer stopped partitions for each job_id - */ - fieldToBucket: schema.maybe(schema.string()), + jobIds: schema.arrayOf(schema.string(), { + meta: { description: 'List of jobIds to fetch the categorizer partitions for' }, + }), + fieldToBucket: schema.maybe( + schema.string({ + meta: { + description: `Field to aggregate results by: 'job_id' or 'partition_field_value'. If by job_id, will return list of jobIds with at least one partition that have stopped. If by partition_field_value, it will return a list of categorizer stopped partitions for each job_id`, + }, + }) + ), }); export const getDatafeedResultsChartDataSchema = schema.object({ - /** - * Job id to fetch the bucket results for - */ - jobId: schema.string(), + jobId: schema.string({ meta: { description: 'Job id to fetch the bucket results for' } }), start: schema.number(), end: schema.number(), }); @@ -117,21 +115,24 @@ export const getDatafeedResultsChartDataSchema = schema.object({ export const getAnomalyChartsSchema = schema.object({ jobIds: schema.arrayOf(schema.string()), influencers: schema.arrayOf(schema.any()), - /** - * Severity threshold - */ - threshold: schema.number({ defaultValue: 0, min: 0, max: 99 }), + threshold: schema.number({ + defaultValue: 0, + min: 0, + max: 99, + meta: { description: 'Severity threshold' }, + }), earliestMs: schema.number(), latestMs: schema.number(), - /** - * Maximum amount of series data. - */ - maxResults: schema.number({ defaultValue: 6, min: 1, max: 50 }), + maxResults: schema.number({ + defaultValue: 6, + min: 1, + max: 50, + meta: { description: 'Maximum amount of series data' }, + }), influencersFilterQuery: schema.maybe(schema.any()), - /** - * Optimal number of data points per chart - */ - numberOfPoints: schema.number(), + numberOfPoints: schema.number({ + meta: { description: 'Optimal number of data points per chart' }, + }), timeBounds: schema.object({ min: schema.maybe(schema.number()), max: schema.maybe(schema.number()), diff --git a/x-pack/plugins/ml/server/routes/schemas/runtime_mappings_schema.ts b/x-pack/plugins/ml/server/routes/schemas/runtime_mappings_schema.ts index 44b0ad53bf850..37cb28ff4d1cc 100644 --- a/x-pack/plugins/ml/server/routes/schemas/runtime_mappings_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/runtime_mappings_schema.ts @@ -12,7 +12,6 @@ import { isRuntimeField } from '@kbn/ml-runtime-field-utils'; /** * Schema for validating a runtime field */ - export const runtimeMappingsSchema = schema.object( {}, { diff --git a/x-pack/plugins/ml/server/routes/schemas/saved_objects.ts b/x-pack/plugins/ml/server/routes/schemas/saved_objects.ts index fb133fb8955cc..d40638c496f00 100644 --- a/x-pack/plugins/ml/server/routes/schemas/saved_objects.ts +++ b/x-pack/plugins/ml/server/routes/schemas/saved_objects.ts @@ -44,6 +44,7 @@ export const syncJobObjects = schema.object({ simulate: schema.maybe(schema.bool export const syncCheckSchema = schema.object({ mlSavedObjectType: schema.maybe(schema.string()) }); export const canDeleteMLSpaceAwareItemsSchema = schema.object({ - /** List of job or trained model IDs. */ - ids: schema.arrayOf(schema.string()), + ids: schema.arrayOf(schema.string(), { + meta: { description: 'List of job or trained model IDs' }, + }), }); diff --git a/x-pack/plugins/ml/server/routes/system.ts b/x-pack/plugins/ml/server/routes/system.ts index ba985c8b0d395..632464e2c65f4 100644 --- a/x-pack/plugins/ml/server/routes/system.ts +++ b/x-pack/plugins/ml/server/routes/system.ts @@ -23,13 +23,6 @@ export function systemRoutes( { router, mlLicense, routeGuard }: RouteInitialization, { getSpaces, cloud, resolveMlCapabilities }: SystemRouteDeps ) { - /** - * @apiGroup SystemRoutes - * - * @api {post} /internal/ml/_has_privileges Check privileges - * @apiName HasPrivileges - * @apiDescription Checks if the user has required privileges - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/_has_privileges`, @@ -37,6 +30,8 @@ export function systemRoutes( options: { tags: ['access:ml:canGetMlInfo'], }, + summary: 'Check privileges', + description: 'Checks if the user has required privileges', }) .addVersion( { @@ -92,17 +87,12 @@ export function systemRoutes( }) ); - /** - * @apiGroup SystemRoutes - * - * @api {get} /internal/ml/ml_capabilities Check ML capabilities - * @apiName MlCapabilitiesResponse - * @apiDescription Checks ML capabilities - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/ml_capabilities`, access: 'internal', + summary: 'Check ML capabilities', + description: 'Checks ML capabilities', }) .addVersion( { @@ -135,13 +125,6 @@ export function systemRoutes( }) ); - /** - * @apiGroup SystemRoutes - * - * @api {get} /internal/ml/ml_node_count Get the amount of ML nodes - * @apiName MlNodeCount - * @apiDescription Returns the amount of ML nodes. - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/ml_node_count`, @@ -149,6 +132,8 @@ export function systemRoutes( options: { tags: ['access:ml:canGetMlInfo'], }, + summary: 'Get the number of ML nodes', + description: 'Returns the number of ML nodes', }) .addVersion( { @@ -166,13 +151,6 @@ export function systemRoutes( }) ); - /** - * @apiGroup SystemRoutes - * - * @api {get} /internal/ml/info Get ML info - * @apiName MlInfo - * @apiDescription Returns defaults and limits used by machine learning. - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/info`, @@ -180,6 +158,8 @@ export function systemRoutes( options: { tags: ['access:ml:canGetMlInfo'], }, + summary: 'Get ML info', + description: 'Returns defaults and limits used by machine learning', }) .addVersion( { @@ -201,14 +181,6 @@ export function systemRoutes( }) ); - /** - * @apiGroup SystemRoutes - * - * @apiDeprecated - * - * @api {post} /internal/ml/es_search ES Search wrapper - * @apiName MlEsSearch - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/es_search`, @@ -216,6 +188,8 @@ export function systemRoutes( options: { tags: ['access:ml:canGetJobs'], }, + deprecated: true, + summary: 'ES Search wrapper', }) .addVersion( { @@ -238,12 +212,6 @@ export function systemRoutes( }) ); - /** - * @apiGroup SystemRoutes - * - * @api {post} /internal/ml/index_exists ES Field caps wrapper checks if index exists - * @apiName MlIndexExists - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/index_exists`, @@ -251,6 +219,7 @@ export function systemRoutes( options: { tags: ['access:ml:canGetFieldInfo'], }, + summary: 'ES Field caps wrapper checks if index exists', }) .addVersion( { @@ -286,12 +255,6 @@ export function systemRoutes( }) ); - /** - * @apiGroup SystemRoutes - * - * @api {post} /internal/ml/reindex_with_pipeline ES reindex wrapper to reindex with pipeline - * @apiName MlReindexWithPipeline - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/reindex_with_pipeline`, @@ -299,6 +262,7 @@ export function systemRoutes( options: { tags: ['access:ml:canCreateTrainedModels'], }, + summary: 'ES reindex wrapper to reindex with pipeline', }) .addVersion( { diff --git a/x-pack/plugins/ml/server/routes/trained_models.ts b/x-pack/plugins/ml/server/routes/trained_models.ts index a41967704136d..2f3e402e05be3 100644 --- a/x-pack/plugins/ml/server/routes/trained_models.ts +++ b/x-pack/plugins/ml/server/routes/trained_models.ts @@ -103,13 +103,6 @@ export function trainedModelsRoutes( { router, routeGuard, getEnabledFeatures }: RouteInitialization, cloud: CloudSetup ) { - /** - * @apiGroup TrainedModels - * - * @api {get} /internal/ml/trained_models/:modelId Get info of a trained inference model - * @apiName GetTrainedModel - * @apiDescription Retrieves configuration information for a trained model. - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/{modelId?}`, @@ -117,6 +110,8 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canGetTrainedModels'], }, + summary: 'Get info of a trained inference model', + description: 'Retrieves configuration information for a trained model.', }) .addVersion( { @@ -278,13 +273,6 @@ export function trainedModelsRoutes( }) ); - /** - * @apiGroup TrainedModels - * - * @api {get} /internal/ml/trained_models/_stats Get stats for all trained models - * @apiName GetTrainedModelStats - * @apiDescription Retrieves usage information for all trained models. - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/_stats`, @@ -292,6 +280,8 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canGetTrainedModels'], }, + summary: 'Get stats for all trained models', + description: 'Retrieves usage information for all trained models.', }) .addVersion( { @@ -312,13 +302,6 @@ export function trainedModelsRoutes( }) ); - /** - * @apiGroup TrainedModels - * - * @api {get} /internal/ml/trained_models/:modelId/_stats Get stats of a trained model - * @apiName GetTrainedModelStatsById - * @apiDescription Retrieves usage information for trained models. - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/{modelId}/_stats`, @@ -326,6 +309,8 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canGetTrainedModels'], }, + summary: 'Get stats for a trained model', + description: 'Retrieves usage information for a trained model.', }) .addVersion( { @@ -352,13 +337,6 @@ export function trainedModelsRoutes( }) ); - /** - * @apiGroup TrainedModels - * - * @api {get} /internal/ml/trained_models/:modelId/pipelines Get trained model pipelines - * @apiName GetTrainedModelPipelines - * @apiDescription Retrieves pipelines associated with a trained model - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/{modelId}/pipelines`, @@ -366,6 +344,8 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canGetTrainedModels'], }, + summary: 'Get trained model pipelines', + description: 'Retrieves ingest pipelines associated with a trained model.', }) .addVersion( { @@ -391,13 +371,6 @@ export function trainedModelsRoutes( }) ); - /** - * @apiGroup TrainedModels - * - * @api {get} /internal/ml/trained_models/ingest_pipelines Get ingest pipelines - * @apiName GetIngestPipelines - * @apiDescription Retrieves pipelines - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/ingest_pipelines`, @@ -405,6 +378,8 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canGetTrainedModels'], // TODO: update permissions }, + summary: 'Get ingest pipelines', + description: 'Retrieves ingest pipelines.', }) .addVersion( { @@ -423,13 +398,6 @@ export function trainedModelsRoutes( }) ); - /** - * @apiGroup TrainedModels - * - * @api {post} /internal/ml/trained_models/create_inference_pipeline creates the pipeline with inference processor - * @apiName CreateInferencePipeline - * @apiDescription Creates the inference pipeline - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/create_inference_pipeline`, @@ -437,6 +405,8 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canCreateTrainedModels'], }, + summary: 'Create an inference pipeline', + description: 'Creates a pipeline with inference processor', }) .addVersion( { @@ -463,13 +433,6 @@ export function trainedModelsRoutes( }) ); - /** - * @apiGroup TrainedModels - * - * @api {put} /internal/ml/trained_models/:modelId Put a trained model - * @apiName PutTrainedModel - * @apiDescription Adds a new trained model - */ router.versioned .put({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/{modelId}`, @@ -477,6 +440,8 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canCreateTrainedModels'], }, + summary: 'Put a trained model', + description: 'Adds a new trained model', }) .addVersion( { @@ -508,13 +473,6 @@ export function trainedModelsRoutes( }) ); - /** - * @apiGroup TrainedModels - * - * @api {delete} /internal/ml/trained_models/:modelId Delete a trained model - * @apiName DeleteTrainedModel - * @apiDescription Deletes an existing trained model that is currently not referenced by an ingest pipeline. - */ router.versioned .delete({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/{modelId}`, @@ -522,6 +480,9 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canDeleteTrainedModels'], }, + summary: 'Delete a trained model', + description: + 'Deletes an existing trained model that is currently not referenced by an ingest pipeline.', }) .addVersion( { @@ -557,13 +518,6 @@ export function trainedModelsRoutes( }) ); - /** - * @apiGroup TrainedModels - * - * @api {post} /internal/ml/trained_models/:modelId/deployment/_start Start trained model deployment - * @apiName StartTrainedModelDeployment - * @apiDescription Starts trained model deployment. - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/{modelId}/deployment/_start`, @@ -571,6 +525,8 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canStartStopTrainedModels'], }, + summary: 'Start trained model deployment', + description: 'Starts trained model deployment.', }) .addVersion( { @@ -603,13 +559,6 @@ export function trainedModelsRoutes( }) ); - /** - * @apiGroup TrainedModels - * - * @api {post} /internal/ml/trained_models/:modelId/deployment/_update Update trained model deployment - * @apiName UpdateTrainedModelDeployment - * @apiDescription Updates trained model deployment. - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/{modelId}/{deploymentId}/deployment/_update`, @@ -617,6 +566,8 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canStartStopTrainedModels'], }, + summary: 'Update trained model deployment', + description: 'Updates trained model deployment.', }) .addVersion( { @@ -642,13 +593,6 @@ export function trainedModelsRoutes( }) ); - /** - * @apiGroup TrainedModels - * - * @api {post} /internal/ml/trained_models/:modelId/deployment/_stop Stop trained model deployment - * @apiName StopTrainedModelDeployment - * @apiDescription Stops trained model deployment. - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/{modelId}/{deploymentId}/deployment/_stop`, @@ -656,6 +600,8 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canStartStopTrainedModels'], }, + summary: 'Stop trained model deployment', + description: 'Stops trained model deployment.', }) .addVersion( { @@ -695,13 +641,6 @@ export function trainedModelsRoutes( }) ); - /** - * @apiGroup TrainedModels - * - * @api {post} /internal/ml/trained_models/pipeline_simulate Simulates an ingest pipeline - * @apiName SimulateIngestPipeline - * @apiDescription Simulates an ingest pipeline. - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/pipeline_simulate`, @@ -709,6 +648,8 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canTestTrainedModels'], }, + summary: 'Simulates an ingest pipeline', + description: 'Simulates an ingest pipeline.', }) .addVersion( { @@ -735,13 +676,6 @@ export function trainedModelsRoutes( }) ); - /** - * @apiGroup TrainedModels - * - * @api {post} /internal/ml/trained_models/infer/:modelId Evaluates a trained model - * @apiName InferTrainedModelDeployment - * @apiDescription Evaluates a trained model. - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/infer/{modelId}/{deploymentId}`, @@ -749,6 +683,8 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canTestTrainedModels'], }, + summary: 'Evaluates a trained model.', + description: 'Evaluates a trained model.', }) .addVersion( { @@ -784,13 +720,6 @@ export function trainedModelsRoutes( }) ); - /** - * @apiGroup TrainedModels - * - * @api {get} /internal/ml/trained_models/model_downloads Gets available models for download - * @apiName GetTrainedModelDownloadList - * @apiDescription Gets available models for download with default and recommended flags based on the cluster OS and CPU architecture. - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/model_downloads`, @@ -798,6 +727,9 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canGetTrainedModels'], }, + summary: 'Get available models for download', + description: + 'Gets available models for download with supported and recommended flags based on the cluster OS and CPU architecture.', }) .addVersion( { @@ -817,13 +749,6 @@ export function trainedModelsRoutes( }) ); - /** - * @apiGroup TrainedModels - * - * @api {get} /internal/ml/trained_models/elser_config Gets ELSER config for download - * @apiName GetElserConfig - * @apiDescription Gets ELSER config for download based on the cluster OS and CPU architecture. - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/elser_config`, @@ -831,6 +756,8 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canGetTrainedModels'], }, + summary: 'Get ELSER config for download', + description: 'Gets ELSER config for download based on the cluster OS and CPU architecture.', }) .addVersion( { @@ -858,13 +785,6 @@ export function trainedModelsRoutes( }) ); - /** - * @apiGroup TrainedModels - * - * @api {post} /internal/ml/trained_models/install_elastic_trained_model/:modelId Installs Elastic trained model - * @apiName InstallElasticTrainedModel - * @apiDescription Downloads and installs Elastic trained model. - */ router.versioned .post({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/install_elastic_trained_model/{modelId}`, @@ -872,6 +792,8 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canCreateTrainedModels'], }, + summary: 'Install Elastic trained model', + description: 'Downloads and installs Elastic trained model.', }) .addVersion( { @@ -901,13 +823,6 @@ export function trainedModelsRoutes( ) ); - /** - * @apiGroup TrainedModels - * - * @api {get} /internal/ml/trained_models/download_status Gets models download status - * @apiName ModelsDownloadStatus - * @apiDescription Gets download status for all currently downloading models - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/download_status`, @@ -915,6 +830,8 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canCreateTrainedModels'], }, + summary: 'Get models download status', + description: 'Gets download status for all currently downloading models.', }) .addVersion( { @@ -936,13 +853,6 @@ export function trainedModelsRoutes( ) ); - /** - * @apiGroup TrainedModels - * - * @api {get} /internal/ml/trained_models/curated_model_config Gets curated model config - * @apiName ModelsCuratedConfigs - * @apiDescription Gets curated model config for the specified model based on cluster architecture - */ router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/curated_model_config/{modelName}`, @@ -950,6 +860,9 @@ export function trainedModelsRoutes( options: { tags: ['access:ml:canGetTrainedModels'], }, + summary: 'Get curated model config', + description: + 'Gets curated model config for the specified model based on cluster architecture.', }) .addVersion( { diff --git a/x-pack/plugins/ml/tsconfig.json b/x-pack/plugins/ml/tsconfig.json index 516d156cf04da..8353c023f1955 100644 --- a/x-pack/plugins/ml/tsconfig.json +++ b/x-pack/plugins/ml/tsconfig.json @@ -68,7 +68,6 @@ "@kbn/ml-url-state", "@kbn/monaco", "@kbn/react-field", - "@kbn/repo-info", "@kbn/rison", "@kbn/saved-objects-finder-plugin", "@kbn/saved-objects-management-plugin", diff --git a/yarn.lock b/yarn.lock index eda377e5180cc..4e4b9dc467d37 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2973,18 +2973,6 @@ resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.3.2.tgz#439b0b50c152c89fd369d2a17eff54869b4d79b8" integrity sha512-5Frickan9c89QbPkSu6I6y8p+9eR6hZkdPahGmNDsTFX8FHLPAozyzCZMKUeW8FyYwnlCKUjqIEqxY+UctARiw== -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - "@istanbuljs/load-nyc-config@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" @@ -8164,11 +8152,6 @@ node-addon-api "^3.2.1" node-gyp-build "^4.3.0" -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - "@pmmmwh/react-refresh-webpack-plugin@^0.5.3": version "0.5.7" resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz#58f8217ba70069cc6a73f5d7e05e85b458c150e2" @@ -8184,27 +8167,6 @@ schema-utils "^3.0.0" source-map "^0.7.3" -"@pnpm/config.env-replace@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" - integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== - -"@pnpm/network.ca-file@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" - integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== - dependencies: - graceful-fs "4.2.10" - -"@pnpm/npm-conf@^2.1.0": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz#0058baf1c26cbb63a828f0193795401684ac86f0" - integrity sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA== - dependencies: - "@pnpm/config.env-replace" "^1.1.0" - "@pnpm/network.ca-file" "^1.0.1" - config-chain "^1.1.11" - "@polka/url@^1.0.0-next.20": version "1.0.0-next.21" resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" @@ -8456,11 +8418,6 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.0.tgz#2ff674e9611b45b528896d820d3d7a812de2f0e4" integrity sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ== -"@sindresorhus/is@^5.2.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" - integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== - "@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.4.0", "@sinonjs/commons@^1.7.0": version "1.7.2" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.2.tgz#505f55c74e0272b43f6c52d81946bed7058fc0e2" @@ -9670,13 +9627,6 @@ dependencies: defer-to-connect "^2.0.0" -"@szmarczak/http-timer@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" - integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== - dependencies: - defer-to-connect "^2.0.1" - "@tanstack/match-sorter-utils@^8.7.0": version "8.7.0" resolved "https://registry.yarnpkg.com/@tanstack/match-sorter-utils/-/match-sorter-utils-8.7.0.tgz#60b09a6d3d7974d5f86f1318053c1bd5a85fb0be" @@ -10562,11 +10512,6 @@ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== -"@types/http-cache-semantics@^4.0.2": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" - integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== - "@types/http-proxy@^1.17.4", "@types/http-proxy@^1.17.8": version "1.17.9" resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" @@ -12282,7 +12227,7 @@ amdefine@>=0.0.4: resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= -ansi-align@^3.0.0, ansi-align@^3.0.1: +ansi-align@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== @@ -12376,7 +12321,7 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: +ansi-styles@^6.0.0, ansi-styles@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== @@ -12414,31 +12359,6 @@ anymatch@^3.0.0, anymatch@^3.0.3, anymatch@^3.1.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -apidoc-light@^0.54.0: - version "0.54.0" - resolved "https://registry.yarnpkg.com/apidoc-light/-/apidoc-light-0.54.0.tgz#8d819bcd893ca96a60d754c59b33dcf5f9255b59" - integrity sha512-sOmzxKO3xeMrLDV0e/qjT/hSG4wvRT2QYwaFLiyVbDiU9lbIfWW83yFby9/N/HfPZP8buvNd+rPGL1iVyP9CDQ== - dependencies: - fs-extra "^11.2.0" - glob "^10.3.10" - iconv-lite "^0.6.3" - klaw-sync "^6.0.0" - lodash "^4.17.21" - markdown-it "^14.0.0" - semver "^7.5.4" - winston "^3.11.0" - -apidoc-markdown@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/apidoc-markdown/-/apidoc-markdown-7.3.2.tgz#64c1ad45ba29dd57f376419a900cd59c786624a0" - integrity sha512-0nOfTWSaFfbgJ673ztWiup5CKauuwmhg7hJ0jR7gb0TDK1RX3b0unl6soc8UVhdjYgrvRBRvujMUB/KUF5OG3Q== - dependencies: - apidoc-light "^0.54.0" - ejs "^3.1.9" - semver "^7.5.4" - update-notifier "^7.0.0" - yargs "^17.7.2" - app-module-path@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" @@ -13463,20 +13383,6 @@ boxen@^5.1.2: widest-line "^3.1.0" wrap-ansi "^7.0.0" -boxen@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-7.1.1.tgz#f9ba525413c2fec9cdb88987d835c4f7cad9c8f4" - integrity sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog== - dependencies: - ansi-align "^3.0.1" - camelcase "^7.0.1" - chalk "^5.2.0" - cli-boxes "^3.0.0" - string-width "^5.1.2" - type-fest "^2.13.0" - widest-line "^4.0.1" - wrap-ansi "^8.1.0" - bplist-parser@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6" @@ -13843,24 +13749,6 @@ cacheable-lookup@^5.0.3: resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz#049fdc59dffdd4fc285e8f4f82936591bd59fec3" integrity sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w== -cacheable-lookup@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" - integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== - -cacheable-request@^10.2.8: - version "10.2.14" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.14.tgz#eb915b665fda41b79652782df3f553449c406b9d" - integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== - dependencies: - "@types/http-cache-semantics" "^4.0.2" - get-stream "^6.0.1" - http-cache-semantics "^4.1.1" - keyv "^4.5.3" - mimic-response "^4.0.0" - normalize-url "^8.0.0" - responselike "^3.0.0" - cacheable-request@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" @@ -13970,11 +13858,6 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" - integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== - camelize@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" @@ -14088,7 +13971,7 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2, chalk@~4.1 ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.1.2, chalk@^5.2.0, chalk@^5.3.0: +chalk@^5.1.2: version "5.3.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== @@ -14310,11 +14193,6 @@ cli-boxes@^2.2.1: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== -cli-boxes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" - integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== - cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -14761,25 +14639,6 @@ concaveman@*: robust-predicates "^2.0.4" tinyqueue "^2.0.3" -config-chain@^1.1.11: - version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -configstore@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-6.0.0.tgz#49eca2ebc80983f77e09394a1a56e0aca8235566" - integrity sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA== - dependencies: - dot-prop "^6.0.1" - graceful-fs "^4.2.6" - unique-string "^3.0.0" - write-file-atomic "^3.0.3" - xdg-basedir "^5.0.1" - connect-history-api-fallback@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" @@ -15095,13 +14954,6 @@ crypto-js@^4.0.0: resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== -crypto-random-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2" - integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== - dependencies: - type-fest "^1.0.1" - css-box-model@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/css-box-model/-/css-box-model-1.2.1.tgz#59951d3b81fd6b2074a62d49444415b0d2b4d7c1" @@ -15964,7 +15816,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: +defer-to-connect@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== @@ -16475,13 +16327,6 @@ dot-case@^3.0.3, dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - dotenv-expand@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" @@ -16541,11 +16386,6 @@ earcut@^2.2.4: resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a" integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ== -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - easy-table@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-1.1.0.tgz#86f9ab4c102f0371b7297b92a651d5824bc8cb73" @@ -16573,7 +16413,7 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -ejs@^3.1.10, ejs@^3.1.9: +ejs@^3.1.10: version "3.1.10" resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== @@ -17147,11 +16987,6 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-goat@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-4.0.0.tgz#9424820331b510b0666b98f7873fe11ac4aa8081" - integrity sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg== - escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -18375,14 +18210,6 @@ foreground-child@^2.0.0: cross-spawn "^7.0.0" signal-exit "^3.0.2" -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -18425,11 +18252,6 @@ form-data-encoder@1.7.2: resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A== -form-data-encoder@^2.1.2: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" - integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== - form-data@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" @@ -18570,15 +18392,6 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fs-extra@^11.2.0: - version "11.2.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" @@ -18999,17 +18812,6 @@ glob@8.1.0: minimatch "^5.0.1" once "^1.3.0" -glob@^10.3.10: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0, glob@^7.2.3, glob@~7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -19190,23 +18992,6 @@ got@^11.8.2: p-cancelable "^2.0.0" responselike "^2.0.0" -got@^12.1.0: - version "12.6.1" - resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549" - integrity sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ== - dependencies: - "@sindresorhus/is" "^5.2.0" - "@szmarczak/http-timer" "^5.0.1" - cacheable-lookup "^7.0.0" - cacheable-request "^10.2.8" - decompress-response "^6.0.0" - form-data-encoder "^2.1.2" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^3.0.0" - gpt-tokenizer@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/gpt-tokenizer/-/gpt-tokenizer-2.1.2.tgz#14f7ce424cf2309fb5be66e112d1836080c2791a" @@ -19214,12 +18999,7 @@ gpt-tokenizer@^2.1.2: dependencies: rfc4648 "^1.5.2" -graceful-fs@4.2.10: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.8, graceful-fs@^4.2.9: +graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.8, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -19812,7 +19592,7 @@ htmlparser2@^8.0.1: domutils "^3.0.1" entities "^4.4.0" -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: +http-cache-semantics@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== @@ -19924,7 +19704,7 @@ http2-wrapper@^1.0.0-beta.5.2: quick-lru "^5.1.1" resolve-alpn "^1.0.0" -http2-wrapper@^2.1.10, http2-wrapper@^2.2.1: +http2-wrapper@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== @@ -20134,7 +19914,7 @@ ini@2.0.0: resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: +ini@^1.3.5, ini@~1.3.0: version "1.3.7" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== @@ -20555,12 +20335,7 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz#6e084bbc92061fbb0971ec58b6ce6d404e24da69" integrity sha1-bghLvJIGH7sJcexYts5tQE4k2mk= -is-in-ci@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-in-ci/-/is-in-ci-0.1.0.tgz#5e07d6a02ec3a8292d3f590973357efa3fceb0d3" - integrity sha512-d9PXLEY0v1iJ64xLiQMJ51J128EYHAaOR4yZqQi8aHGfw6KgifM3/Viw1oZZ1GCVmb3gBuyhLyHj0HgR2DhSXQ== - -is-installed-globally@^0.4.0, is-installed-globally@~0.4.0: +is-installed-globally@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== @@ -20613,11 +20388,6 @@ is-node-process@^1.2.0: resolved "https://registry.yarnpkg.com/is-node-process/-/is-node-process-1.2.0.tgz#ea02a1b90ddb3934a19aea414e88edef7e11d134" integrity sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw== -is-npm@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-6.0.0.tgz#b59e75e8915543ca5d881ecff864077cba095261" - integrity sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ== - is-number-object@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" @@ -20645,11 +20415,6 @@ is-obj@^1.0.1: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - is-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" @@ -21063,15 +20828,6 @@ iterate-value@^1.0.0: es-get-iterator "^1.0.2" iterate-iterator "^1.0.1" -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - jake@^10.8.5: version "10.8.5" resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" @@ -22018,7 +21774,7 @@ kea@^2.6.0: resolved "https://registry.yarnpkg.com/kea/-/kea-2.6.0.tgz#774a82188e0fb52cdb18b72843a875ee857f3807" integrity sha512-+yaLyZx8h2v96aL01XIRZjqA8Qk4fIUziznSKnkjDItUU8YnH75xER6+vMHT5EHC3MJeSScxIx5UuqZl30DBdg== -keyv@^4.0.0, keyv@^4.5.3: +keyv@^4.0.0: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== @@ -22049,13 +21805,6 @@ kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -klaw-sync@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" - integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== - dependencies: - graceful-fs "^4.1.11" - klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" @@ -22138,13 +21887,6 @@ language-tags@=1.0.5: dependencies: language-subtag-registry "~0.3.2" -latest-version@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-7.0.0.tgz#843201591ea81a4d404932eeb61240fe04e9e5da" - integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg== - dependencies: - package-json "^8.1.0" - launchdarkly-eventsource@1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/launchdarkly-eventsource/-/launchdarkly-eventsource-1.4.4.tgz#fa595af8602e487c61520787170376c6a1104459" @@ -22681,11 +22423,6 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== -lowercase-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" - integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== - lowlight@^1.14.0: version "1.17.0" resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.17.0.tgz#a1143b2fba8239df8cd5893f9fe97aaf8465af4a" @@ -22694,7 +22431,7 @@ lowlight@^1.14.0: fault "^1.0.0" highlight.js "~10.4.0" -lru-cache@10.2.0, "lru-cache@^9.1.1 || ^10.0.0": +lru-cache@10.2.0: version "10.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== @@ -22871,7 +22608,7 @@ markdown-escapes@^1.0.0: resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.1.tgz#1994df2d3af4811de59a6714934c2b2292734518" integrity sha1-GZTfLTr0gR3lmmcUk0wrIpJzRRg= -markdown-it@^14.0.0, markdown-it@^14.1.0: +markdown-it@^14.1.0: version "14.1.0" resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg== @@ -23334,11 +23071,6 @@ mimic-response@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -mimic-response@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" - integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== - min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -23391,13 +23123,6 @@ minimatch@^5.0.1, minimatch@^5.1.0: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -23452,11 +23177,6 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - minizlib@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" @@ -24326,11 +24046,6 @@ normalize-url@^6.0.1: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -normalize-url@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a" - integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== - now-and-later@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-3.0.0.tgz#cdc045dc5b894b35793cf276cc3206077bb7302d" @@ -24898,11 +24613,6 @@ p-cancelable@^2.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.0.0.tgz#4a3740f5bdaf5ed5d7c3e34882c6fb5d6b266a6e" integrity sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg== -p-cancelable@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" - integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== - p-event@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.1.0.tgz#e92bb866d7e8e5b732293b1c8269d38e9982bf8e" @@ -25057,16 +24767,6 @@ package-hash@^4.0.0: lodash.flattendeep "^4.4.0" release-zalgo "^1.0.0" -package-json@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.1.tgz#3e9948e43df40d1e8e78a85485f1070bf8f03dc8" - integrity sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA== - dependencies: - got "^12.1.0" - registry-auth-token "^5.0.1" - registry-url "^6.0.0" - semver "^7.3.7" - pako@^0.2.5: version "0.2.9" resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" @@ -25256,14 +24956,6 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -26196,11 +25888,6 @@ property-information@^5.0.0, property-information@^5.0.1, property-information@^ dependencies: xtend "^4.0.0" -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - protobufjs@6.11.4, protobufjs@6.8.8: version "6.11.4" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" @@ -26355,13 +26042,6 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -pupa@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-3.1.0.tgz#f15610274376bbcc70c9a3aa8b505ea23f41c579" - integrity sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug== - dependencies: - escape-goat "^4.0.0" - puppeteer-core@22.13.1: version "22.13.1" resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-22.13.1.tgz#3ba03e5ebd98bbbd86e465864cf00314e07309de" @@ -26575,7 +26255,7 @@ rc-pagination@^1.20.1: prop-types "^15.5.7" react-lifecycles-compat "^3.0.4" -rc@1.2.8, rc@^1.2.7: +rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -27531,20 +27211,6 @@ regexpu-core@^5.3.1: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" -registry-auth-token@^5.0.1: - version "5.0.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.2.tgz#8b026cc507c8552ebbe06724136267e63302f756" - integrity sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ== - dependencies: - "@pnpm/npm-conf" "^2.1.0" - -registry-url@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58" - integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q== - dependencies: - rc "1.2.8" - regjsparser@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" @@ -27950,13 +27616,6 @@ responselike@^2.0.0: dependencies: lowercase-keys "^2.0.0" -responselike@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" - integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== - dependencies: - lowercase-keys "^3.0.0" - restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -28474,13 +28133,6 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== -semver-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-4.0.0.tgz#3afcf5ed6d62259f5c72d0d5d50dffbdc9680df5" - integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA== - dependencies: - semver "^7.3.5" - "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" @@ -28801,7 +28453,7 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1, signal-exit@^4.1.0: +signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== @@ -29585,15 +29237,6 @@ string-replace-loader@^2.2.0: loader-utils "^1.2.3" schema-utils "^1.0.0" -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -29612,15 +29255,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - string-width@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.1.0.tgz#d994252935224729ea3719c49f7206dc9c46550a" @@ -29722,13 +29356,6 @@ stringify-object@^3.2.1: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -29743,7 +29370,7 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1, strip-ansi@^7.1.0: +strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== @@ -30884,16 +30511,11 @@ type-fest@^0.8.0, type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^1.0.1, type-fest@^1.2.1: +type-fest@^1.2.1: version "1.4.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== -type-fest@^2.13.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - type-fest@^4.15.0, type-fest@^4.17.0, type-fest@^4.9.0: version "4.18.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.18.3.tgz#5249f96e7c2c3f0f1561625f54050e343f1c8f68" @@ -31191,13 +30813,6 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unique-string@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" - integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== - dependencies: - crypto-random-string "^4.0.0" - unist-builder@2.0.3, unist-builder@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" @@ -31335,24 +30950,6 @@ update-browserslist-db@^1.0.13: escalade "^3.1.1" picocolors "^1.0.0" -update-notifier@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-7.0.0.tgz#295aa782dadab784ed4073f7ffaea1fb2123031c" - integrity sha512-Hv25Bh+eAbOLlsjJreVPOs4vd51rrtCrmhyOJtbpAojro34jS4KQaEp4/EvlHJX7jSO42VvEFpkastVyXyIsdQ== - dependencies: - boxen "^7.1.1" - chalk "^5.3.0" - configstore "^6.0.0" - import-lazy "^4.0.0" - is-in-ci "^0.1.0" - is-installed-globally "^0.4.0" - is-npm "^6.0.0" - latest-version "^7.0.0" - pupa "^3.1.0" - semver "^7.5.4" - semver-diff "^4.0.0" - xdg-basedir "^5.1.0" - uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -32577,13 +32174,6 @@ widest-line@^3.1.0: dependencies: string-width "^4.0.0" -widest-line@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" - integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== - dependencies: - string-width "^5.0.1" - wildcard@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" @@ -32610,7 +32200,7 @@ winston-transport@^4.5.0: readable-stream "^3.6.0" triple-beam "^1.3.0" -winston@^3.11.0, winston@^3.8.2: +winston@^3.8.2: version "3.11.0" resolved "https://registry.yarnpkg.com/winston/-/winston-3.11.0.tgz#2d50b0a695a2758bb1c95279f0a88e858163ed91" integrity sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g== @@ -32661,15 +32251,6 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -32696,15 +32277,6 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - wrap-ansi@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e" @@ -32719,7 +32291,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: +write-file-atomic@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== @@ -32754,11 +32326,6 @@ x-default-browser@^0.4.0: optionalDependencies: default-browser-id "^1.0.4" -xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" - integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== - xml-crypto@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/xml-crypto/-/xml-crypto-6.0.0.tgz#9657ce63cbbaacc48b2c74a13d05cf0a9d339d47" From bd9dde8ba749a33a1d5b56dff77d2e47c6e7e17c Mon Sep 17 00:00:00 2001 From: Panos Koutsovasilis Date: Fri, 23 Aug 2024 16:47:49 +0300 Subject: [PATCH 51/59] fix: remove deprecated squid filebeat module tutorial from integrations (#191115) ## Summary This PR removes the deprecated `squid` integration based on the Filebeat module (deprecation issue [here](https://github.com/elastic/beats/issues/37746)). Instead, as of now, a user that wants to use the `squad` integration needs to tick the `Display beta integrations` and install the "new" squid integration ### Risk Matrix N/A ### 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) --- src/plugins/home/server/tutorials/register.ts | 2 - .../home/server/tutorials/squid_logs/index.ts | 61 ------------------- .../apis/custom_integration/integrations.ts | 2 +- .../translations/translations/fr-FR.json | 4 -- .../translations/translations/ja-JP.json | 4 -- .../translations/translations/zh-CN.json | 4 -- 6 files changed, 1 insertion(+), 76 deletions(-) delete mode 100644 src/plugins/home/server/tutorials/squid_logs/index.ts diff --git a/src/plugins/home/server/tutorials/register.ts b/src/plugins/home/server/tutorials/register.ts index bc8c85c43e691..42e1d425cf539 100644 --- a/src/plugins/home/server/tutorials/register.ts +++ b/src/plugins/home/server/tutorials/register.ts @@ -98,7 +98,6 @@ import { redisenterpriseMetricsSpecProvider } from './redisenterprise_metrics'; import { santaLogsSpecProvider } from './santa_logs'; import { sonicwallLogsSpecProvider } from './sonicwall_logs'; import { sophosLogsSpecProvider } from './sophos_logs'; -import { squidLogsSpecProvider } from './squid_logs'; import { stanMetricsSpecProvider } from './stan_metrics'; import { statsdMetricsSpecProvider } from './statsd_metrics'; import { suricataLogsSpecProvider } from './suricata_logs'; @@ -223,7 +222,6 @@ export const builtInTutorials = [ santaLogsSpecProvider, sonicwallLogsSpecProvider, sophosLogsSpecProvider, - squidLogsSpecProvider, tomcatLogsSpecProvider, zscalerLogsSpecProvider, ]; diff --git a/src/plugins/home/server/tutorials/squid_logs/index.ts b/src/plugins/home/server/tutorials/squid_logs/index.ts deleted file mode 100644 index 05b76ab92bcc5..0000000000000 --- a/src/plugins/home/server/tutorials/squid_logs/index.ts +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 { TutorialsCategory } from '../../services/tutorials'; -import { - onPremInstructions, - cloudInstructions, - onPremCloudInstructions, -} from '../instructions/filebeat_instructions'; -import { - TutorialContext, - TutorialSchema, -} from '../../services/tutorials/lib/tutorials_registry_types'; - -export function squidLogsSpecProvider(context: TutorialContext): TutorialSchema { - const moduleName = 'squid'; - const platforms = ['OSX', 'DEB', 'RPM', 'WINDOWS'] as const; - return { - id: 'squidLogs', - name: i18n.translate('home.tutorials.squidLogs.nameTitle', { - defaultMessage: 'Squid Logs', - }), - moduleName, - category: TutorialsCategory.SECURITY_SOLUTION, - shortDescription: i18n.translate('home.tutorials.squidLogs.shortDescription', { - defaultMessage: 'Collect and parse logs from Squid servers with Filebeat.', - }), - longDescription: i18n.translate('home.tutorials.squidLogs.longDescription', { - defaultMessage: - 'This is a module for receiving Squid logs over Syslog or a file. \ -[Learn more]({learnMoreLink}).', - values: { - learnMoreLink: '{config.docs.beats.filebeat}/filebeat-module-squid.html', - }, - }), - euiIconType: 'logoLogging', - artifacts: { - dashboards: [], - application: { - path: '/app/security', - label: i18n.translate('home.tutorials.squidLogs.artifacts.dashboards.linkLabel', { - defaultMessage: 'Security App', - }), - }, - exportedFields: { - documentationUrl: '{config.docs.beats.filebeat}/exported-fields-squid.html', - }, - }, - completionTimeMinutes: 10, - onPrem: onPremInstructions(moduleName, platforms, context), - elasticCloud: cloudInstructions(moduleName, platforms, context), - onPremElasticCloud: onPremCloudInstructions(moduleName, platforms, context), - integrationBrowserCategories: ['security', 'network', 'proxy_security'], - }; -} diff --git a/test/api_integration/apis/custom_integration/integrations.ts b/test/api_integration/apis/custom_integration/integrations.ts index fd974a92adb1e..5a5284dd0a63d 100644 --- a/test/api_integration/apis/custom_integration/integrations.ts +++ b/test/api_integration/apis/custom_integration/integrations.ts @@ -40,7 +40,7 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.body).to.be.an('array'); - expect(resp.body.length).to.be(109); // the beats + expect(resp.body.length).to.be(108); // the beats }); }); }); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 2d3c0aacfbd94..beb17be6ca60e 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -4540,10 +4540,6 @@ "home.tutorials.sophosLogs.longDescription": "Il s'agit d'un module pour les produits Sophos. Actuellement, il prend en charge les logs XG SFOS envoyés au format Syslog. [En savoir plus]({learnMoreLink}).", "home.tutorials.sophosLogs.nameTitle": "Logs Sophos", "home.tutorials.sophosLogs.shortDescription": "Collectez et analysez les logs à partir de Sophos XG SFOS avec Filebeat.", - "home.tutorials.squidLogs.artifacts.dashboards.linkLabel": "Application Security", - "home.tutorials.squidLogs.longDescription": "Ce module permet de recevoir des logs Squid par le biais de Syslog ou d'un fichier. [En savoir plus]({learnMoreLink}).", - "home.tutorials.squidLogs.nameTitle": "Logs Squid", - "home.tutorials.squidLogs.shortDescription": "Collectez et analysez les logs à partir de serveurs Squid avec Filebeat.", "home.tutorials.stanMetrics.artifacts.dashboards.linkLabel": "Tableau de bord des indicateurs Stan", "home.tutorials.stanMetrics.longDescription": "Le module Metricbeat `stan` récupère des indicateurs depuis STAN. [En savoir plus]({learnMoreLink}).", "home.tutorials.stanMetrics.nameTitle": "Indicateurs STAN", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 72b5ec7d10d8d..d1e70e1204cc4 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -4536,10 +4536,6 @@ "home.tutorials.sophosLogs.longDescription": "これは Sophos 製品用モジュールであり、Syslog 形式で送信された XG SFOS ログが現在サポートされています。[詳細]({learnMoreLink})。", "home.tutorials.sophosLogs.nameTitle": "Sophosログ", "home.tutorials.sophosLogs.shortDescription": "Filebeatを使用してSophos XG SFOSからログを収集して解析します。", - "home.tutorials.squidLogs.artifacts.dashboards.linkLabel": "セキュリティアプリ", - "home.tutorials.squidLogs.longDescription": "これは、Syslog またはファイルで Squid ログを受信するためのモジュールです。[詳細]({learnMoreLink})。", - "home.tutorials.squidLogs.nameTitle": "Squidログ", - "home.tutorials.squidLogs.shortDescription": "Filebeatを使用してSquidサーバーからログを収集して解析します。", "home.tutorials.stanMetrics.artifacts.dashboards.linkLabel": "Stan メトリックダッシュボード", "home.tutorials.stanMetrics.longDescription": "Metricbeat モジュール「stan」は、STAN からメトリックを取得します。[詳細]({learnMoreLink})。", "home.tutorials.stanMetrics.nameTitle": "STANメトリック", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 82ebf1e2d42ed..a9f701c750483 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -4544,10 +4544,6 @@ "home.tutorials.sophosLogs.longDescription": "这是用于 Sophos Products 的模块,当前支持以 syslog 格式发送的 XG SFOS 日志。[了解详情]({learnMoreLink})。", "home.tutorials.sophosLogs.nameTitle": "Sophos 日志", "home.tutorials.sophosLogs.shortDescription": "使用 Filebeat 从 Sophos XG SFOS 收集并解析日志。", - "home.tutorials.squidLogs.artifacts.dashboards.linkLabel": "Security 应用", - "home.tutorials.squidLogs.longDescription": "这是用于通过 Syslog 或文件接收 Squid 日志的模块。[了解详情]({learnMoreLink})。", - "home.tutorials.squidLogs.nameTitle": "Squid 日志", - "home.tutorials.squidLogs.shortDescription": "使用 Filebeat 从 Squid 服务器收集并解析日志。", "home.tutorials.stanMetrics.artifacts.dashboards.linkLabel": "Stan 指标仪表板", "home.tutorials.stanMetrics.longDescription": "Metricbeat 模块 `stan` 从 STAN 提取指标。[了解详情]({learnMoreLink})。", "home.tutorials.stanMetrics.nameTitle": "STAN 指标", From 8f7ea3c34e9c2362e7c3fa7f457b2ba51fafa6b9 Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Fri, 23 Aug 2024 10:07:47 -0400 Subject: [PATCH 52/59] [Fleet] Fix space_ids validation and spaces UI (#191083) --- .../agent_policy_advanced_fields/index.tsx | 12 +++-- .../fleet/server/types/models/agent_policy.ts | 6 +-- .../apis/agent_policy/agent_policy.ts | 50 ++++++++++++++++++- 3 files changed, 57 insertions(+), 11 deletions(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx index 28d14b62a575e..9e35dc441fa28 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx @@ -77,9 +77,8 @@ export const AgentPolicyAdvancedOptionsContent: React.FunctionComponent = validation, disabled = false, }) => { - const useSpaceAwareness = ExperimentalFeaturesService.get()?.useSpaceAwareness ?? false; const { docLinks } = useStartServices(); - const { spaceId } = useFleetStatus(); + const { spaceId, isSpaceAwarenessEnabled } = useFleetStatus(); const { getAbsolutePath } = useLink(); const AgentTamperProtectionWrapper = useUIExtension( @@ -263,21 +262,21 @@ export const AgentPolicyAdvancedOptionsContent: React.FunctionComponent = /> - {useSpaceAwareness ? ( + {isSpaceAwarenessEnabled ? ( } description={ = : [spaceId || 'default'] } onChange={(newValue) => { + if (newValue.length === 0) { + return; + } updateAgentPolicy({ space_ids: newValue, }); diff --git a/x-pack/plugins/fleet/server/types/models/agent_policy.ts b/x-pack/plugins/fleet/server/types/models/agent_policy.ts index f977392547400..560f6939eedba 100644 --- a/x-pack/plugins/fleet/server/types/models/agent_policy.ts +++ b/x-pack/plugins/fleet/server/types/models/agent_policy.ts @@ -41,11 +41,7 @@ function isInteger(n: number) { export const AgentPolicyBaseSchema = { id: schema.maybe(schema.string()), - space_ids: schema.maybe( - schema.arrayOf(schema.string(), { - minSize: 1, - }) - ), + space_ids: schema.maybe(schema.arrayOf(schema.string())), name: schema.string({ minLength: 1, validate: validateNonEmptyString }), namespace: AgentPolicyNamespaceSchema, description: schema.maybe(schema.string()), diff --git a/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts index be968e21feb97..80309b8909363 100644 --- a/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts +++ b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts @@ -906,6 +906,7 @@ export default function (providerContext: FtrProviderContext) { describe('PUT /api/fleet/agent_policies/{agentPolicyId}', () => { before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await kibanaServer.savedObjects.cleanStandardList(); }); const createdPolicyIds: string[] = []; after(async () => { @@ -967,6 +968,53 @@ export default function (providerContext: FtrProviderContext) { }); }); + it('should support empty space_ids', async () => { + const { + body: { item: originalPolicy }, + } = await supertest + .post(`/api/fleet/agent_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'Initial name 2', + space_ids: [], + description: 'Initial description', + namespace: 'default', + }) + .expect(200); + agentPolicyId = originalPolicy.id; + const { + body: { item: updatedPolicy }, + } = await supertest + .put(`/api/fleet/agent_policies/${agentPolicyId}`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'Updated name 2', + space_ids: [], + description: 'Updated description', + namespace: 'default', + is_protected: false, + }) + .expect(200); + createdPolicyIds.push(updatedPolicy.id); + // eslint-disable-next-line @typescript-eslint/naming-convention + const { id, updated_at, version, ...newPolicy } = updatedPolicy; + + expect(newPolicy).to.eql({ + status: 'active', + name: 'Updated name 2', + description: 'Updated description', + namespace: 'default', + is_managed: false, + revision: 2, + schema_version: FLEET_AGENT_POLICIES_SCHEMA_VERSION, + updated_by: 'elastic', + inactivity_timeout: 1209600, + package_policies: [], + is_protected: false, + space_ids: [], + }); + }); + it('should return a 409 if policy already exists with name given', async () => { const sharedBody = { name: 'Initial name', @@ -1053,7 +1101,7 @@ export default function (providerContext: FtrProviderContext) { .put(`/api/fleet/agent_policies/${originalPolicy.id}`) .set('kbn-xsrf', 'xxxx') .send({ - name: 'Updated name', + name: `Updated name ${Date.now()}`, description: 'Initial description', namespace: 'default', }) From db970ffba6a7958e63ee07d9575e41c58ea0d7f9 Mon Sep 17 00:00:00 2001 From: Elastic Machine Date: Fri, 23 Aug 2024 15:11:10 +0100 Subject: [PATCH 53/59] [main] Sync bundled packages with Package Storage (#191184) Automated by https://buildkite.com/elastic/package-storage-infra-kibana-discover-release-branches/builds/1155 --- fleet_packages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fleet_packages.json b/fleet_packages.json index 5c345da5fc02e..4ff38b376c6f9 100644 --- a/fleet_packages.json +++ b/fleet_packages.json @@ -34,7 +34,7 @@ }, { "name": "endpoint", - "version": "8.15.0" + "version": "8.15.1" }, { "name": "fleet_server", From 8e66a3e8ad06a9abfe176c0e8bc8bea976c1d171 Mon Sep 17 00:00:00 2001 From: Marius Iversen Date: Fri, 23 Aug 2024 16:45:12 +0200 Subject: [PATCH 54/59] [Automatic Import] Adding support for larger samples in ECS graph (#190426) ## Summary This PR prepares the ECS Mapping graph to support larger samples by chunking and running certain parts of the graph concurrently side by side and merging the results rather than trying to use one large context. More details below, but in general there is only a slight modification to the actual code, most of the lines are related to moving code around to new files and updated tests. There are also some minor tweaks to the ECS graph code in general, below is the related changes: 1. Moved some code out of graph.ts to make it a bit smaller (moved model* functions to a new model.ts, moved state to its own file. 2. Added chunkSize as a optional input to the graph (default to 10 fields with an actual string value per chunk). Just to allow it to be overwritten if necessary later. 3. Renamed the `samples` state to `prefixedSamples` and `formattedSamples` to `combinedSamples` as it got really confusing at some point when debugging. I also updated the function argument names that used them to the new names to better understand which sample type they are using. 4. Renamed `modifySamples` to `prefixSamples` to clarify what it actually modifies 5. Moved `mapping`, `invalid`, `duplicate`, `missing` and `validate` nodes to its own subgraph. The `combinedSamples` state is now set when invoking the subgraph, the value will be its related `chunk`, so it only needs to work on this smaller subset of data. 6. The `currentMapping` state is now only used by the sub graph, once all the subgraphs has finished, the will post their own results to `finalMapping` state. This state uses a reducer function, that combines the existing state with the new, so all results from the X subgraphs running will be merged into the same resulting object as before this PR. ### 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 ### 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) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Elastic Machine --- .../__jest__/fixtures/ecs_mapping.ts | 8 +- .../server/graphs/categorization/graph.ts | 4 +- .../server/graphs/ecs/chunk.test.ts | 17 ++ .../server/graphs/ecs/chunk.ts | 83 +++++++++ .../server/graphs/ecs/duplicates.ts | 3 +- .../server/graphs/ecs/graph.test.ts | 1 - .../server/graphs/ecs/graph.ts | 158 +++++------------- .../server/graphs/ecs/invalid.ts | 5 +- .../server/graphs/ecs/mapping.ts | 6 +- .../server/graphs/ecs/missing.ts | 5 +- .../server/graphs/ecs/model.ts | 43 +++++ .../server/graphs/ecs/pipeline.ts | 2 +- .../server/graphs/ecs/prompts.ts | 22 +-- .../server/graphs/ecs/state.ts | 93 +++++++++++ .../server/graphs/ecs/validate.ts | 20 +-- .../server/graphs/related/graph.ts | 4 +- .../integration_assistant/server/types.ts | 7 +- .../server/util/samples.ts | 103 ++++++------ 18 files changed, 375 insertions(+), 209 deletions(-) create mode 100644 x-pack/plugins/integration_assistant/server/graphs/ecs/chunk.test.ts create mode 100644 x-pack/plugins/integration_assistant/server/graphs/ecs/chunk.ts create mode 100644 x-pack/plugins/integration_assistant/server/graphs/ecs/model.ts create mode 100644 x-pack/plugins/integration_assistant/server/graphs/ecs/state.ts diff --git a/x-pack/plugins/integration_assistant/__jest__/fixtures/ecs_mapping.ts b/x-pack/plugins/integration_assistant/__jest__/fixtures/ecs_mapping.ts index 112f9f2348dec..e0c2054a49e84 100644 --- a/x-pack/plugins/integration_assistant/__jest__/fixtures/ecs_mapping.ts +++ b/x-pack/plugins/integration_assistant/__jest__/fixtures/ecs_mapping.ts @@ -4,6 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ + export const ecsMappingExpectedResults = { mapping: { mysql_enterprise: { @@ -441,18 +442,21 @@ export const ecsTestState = { ecs: 'teststring', exAnswer: 'testanswer', finalized: false, + chunkSize: 30, currentPipeline: { test: 'testpipeline' }, duplicateFields: [], missingKeys: [], invalidEcsFields: [], + finalMapping: { test: 'testmapping' }, + sampleChunks: [''], results: { test: 'testresults' }, samplesFormat: 'testsamplesFormat', ecsVersion: 'testversion', currentMapping: { test1: 'test1' }, lastExecutedChain: 'testchain', rawSamples: ['{"test1": "test1"}'], - samples: ['{ "test1": "test1" }'], + prefixedSamples: ['{ "test1": "test1" }'], packageName: 'testpackage', dataStreamName: 'testDataStream', - formattedSamples: '{"test1": "test1"}', + combinedSamples: '{"test1": "test1"}', }; diff --git a/x-pack/plugins/integration_assistant/server/graphs/categorization/graph.ts b/x-pack/plugins/integration_assistant/server/graphs/categorization/graph.ts index fae09ecc32d87..ff170a23fdf7a 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/categorization/graph.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/categorization/graph.ts @@ -13,7 +13,7 @@ import type { ActionsClientSimpleChatModel, } from '@kbn/langchain/server/language_models'; import type { CategorizationState } from '../../types'; -import { modifySamples, formatSamples } from '../../util/samples'; +import { prefixSamples, formatSamples } from '../../util/samples'; import { handleCategorization } from './categorization'; import { handleValidatePipeline } from '../../util/graph'; import { handleCategorizationValidation } from './validate'; @@ -106,7 +106,7 @@ const graphState: StateGraphArgs['channels'] = { }; function modelInput(state: CategorizationState): Partial { - const samples = modifySamples(state); + const samples = prefixSamples(state); const formattedSamples = formatSamples(samples); const initialPipeline = JSON.parse(JSON.stringify(state.currentPipeline)); return { diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/chunk.test.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/chunk.test.ts new file mode 100644 index 0000000000000..51aab586253a6 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/chunk.test.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 { mergeAndChunkSamples } from './chunk'; + +describe('test chunks', () => { + it('mergeAndChunkSamples()', async () => { + const objects = ['{"a": 1, "b": 2, "c": {"d": 3}}', '{"a": 2, "b": 3, "e": 4}']; + const chunkSize = 2; + const result = mergeAndChunkSamples(objects, chunkSize); + expect(result).toEqual(['{"a":1,"b":2}', '{"c":{"d":3},"e":4}']); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/chunk.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/chunk.ts new file mode 100644 index 0000000000000..62448776bdf8c --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/chunk.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. + */ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +import { merge } from '../../util/samples'; + +interface NestedObject { + [key: string]: any; +} + +// Takes an array of JSON strings and merges them into a single object. +// The resulting object will be a combined object that includes all unique fields from the input samples. +// While merging the samples, the function will prioritize non-empty values over empty values. +// The function then splits the combined object into chunks of a given size, to be used in the ECS mapping subgraph. +export function mergeAndChunkSamples(objects: string[], chunkSize: number): string[] { + let result: NestedObject = {}; + + for (const obj of objects) { + const sample: NestedObject = JSON.parse(obj); + result = merge(result, sample); + } + + const chunks = generateChunks(result, chunkSize); + + // Each chunk is used for the combinedSamples state when passed to the subgraph, which should be a nicely formatted string + return chunks.map((chunk) => JSON.stringify(chunk)); +} + +// This function takes the already merged array of samples, and splits it up into chunks of a given size. +// Size is determined by the count of fields with an actual value (not nested objects etc). +// This is to be able to run the ECS mapping sub graph concurrently with a larger number of total unique fields without getting confused. +function generateChunks(mergedSamples: NestedObject, chunkSize: number): NestedObject[] { + const chunks: NestedObject[] = []; + let currentChunk: NestedObject = {}; + let currentSize = 0; + + function traverse(current: NestedObject, path: string[] = []) { + for (const [key, value] of Object.entries(current)) { + const newPath = [...path, key]; + + // If the value is a nested object, recurse into it + if (typeof value === 'object' && value !== null && !Array.isArray(value)) { + traverse(value, newPath); + } else { + // For non-object values, add them to the current chunk + let target = currentChunk; + + // Recreate the nested structure in the current chunk + for (let i = 0; i < newPath.length - 1; i++) { + if (!(newPath[i] in target)) { + target[newPath[i]] = {}; + } + target = target[newPath[i]]; + } + + // Add the value to the deepest level of the structure + target[newPath[newPath.length - 1]] = value; + currentSize++; + + // If the chunk is full, add it to the chunks and start a new chunk + if (currentSize === chunkSize) { + chunks.push(currentChunk); + currentChunk = {}; + currentSize = 0; + } + } + } + } + + // Start the traversal from the root object + traverse(mergedSamples); + + // Add any remaining items in the last chunk + if (currentSize > 0) { + chunks.push(currentChunk); + } + + return chunks; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/duplicates.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/duplicates.ts index fd11a660e75ab..a9508901860db 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/ecs/duplicates.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/duplicates.ts @@ -16,9 +16,8 @@ export async function handleDuplicates( state: EcsMappingState, model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel ) { - const ecsDuplicatesPrompt = ECS_DUPLICATES_PROMPT; const outputParser = new JsonOutputParser(); - const ecsDuplicatesGraph = ecsDuplicatesPrompt.pipe(model).pipe(outputParser); + const ecsDuplicatesGraph = ECS_DUPLICATES_PROMPT.pipe(model).pipe(outputParser); const currentMapping = await ecsDuplicatesGraph.invoke({ ecs: state.ecs, diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/graph.test.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/graph.test.ts index 0ae626924c349..62e51e7d68c71 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/ecs/graph.test.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/graph.test.ts @@ -77,7 +77,6 @@ describe('EcsGraph', () => { it('Runs the whole graph, with mocked outputs from the LLM.', async () => { // The mocked outputs are specifically crafted to trigger ALL different conditions, allowing us to test the whole graph. // This is why we have all the expects ensuring each function was called. - const ecsGraph = await getEcsGraph(mockLlm); const response = await ecsGraph.invoke(mockedRequest); expect(response.results).toStrictEqual(ecsMappingExpectedResults); diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/graph.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/graph.ts index 1d02f3c8970d8..4b1e4c4c37791 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/ecs/graph.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/graph.ts @@ -9,120 +9,32 @@ import type { ActionsClientChatOpenAI, ActionsClientSimpleChatModel, } from '@kbn/langchain/server/language_models'; -import type { StateGraphArgs } from '@langchain/langgraph'; -import { END, START, StateGraph } from '@langchain/langgraph'; +import { END, START, StateGraph, Send } from '@langchain/langgraph'; import type { EcsMappingState } from '../../types'; -import { mergeSamples, modifySamples } from '../../util/samples'; -import { ECS_EXAMPLE_ANSWER, ECS_FIELDS } from './constants'; +import { modelInput, modelOutput, modelSubOutput } from './model'; import { handleDuplicates } from './duplicates'; import { handleInvalidEcs } from './invalid'; import { handleEcsMapping } from './mapping'; import { handleMissingKeys } from './missing'; -import { createPipeline } from './pipeline'; import { handleValidateMappings } from './validate'; +import { graphState } from './state'; -const graphState: StateGraphArgs['channels'] = { - ecs: { - value: (x: string, y?: string) => y ?? x, - default: () => '', - }, - lastExecutedChain: { - value: (x: string, y?: string) => y ?? x, - default: () => '', - }, - rawSamples: { - value: (x: string[], y?: string[]) => y ?? x, - default: () => [], - }, - samples: { - value: (x: string[], y?: string[]) => y ?? x, - default: () => [], - }, - formattedSamples: { - value: (x: string, y?: string) => y ?? x, - default: () => '', - }, - exAnswer: { - value: (x: string, y?: string) => y ?? x, - default: () => '', - }, - packageName: { - value: (x: string, y?: string) => y ?? x, - default: () => '', - }, - dataStreamName: { - value: (x: string, y?: string) => y ?? x, - default: () => '', - }, - finalized: { - value: (x: boolean, y?: boolean) => y ?? x, - default: () => false, - }, - currentMapping: { - value: (x: object, y?: object) => y ?? x, - default: () => ({}), - }, - currentPipeline: { - value: (x: object, y?: object) => y ?? x, - default: () => ({}), - }, - duplicateFields: { - value: (x: string[], y?: string[]) => y ?? x, - default: () => [], - }, - missingKeys: { - value: (x: string[], y?: string[]) => y ?? x, - default: () => [], - }, - invalidEcsFields: { - value: (x: string[], y?: string[]) => y ?? x, - default: () => [], - }, - results: { - value: (x: object, y?: object) => y ?? x, - default: () => ({}), - }, - samplesFormat: { - value: (x: string, y?: string) => y ?? x, - default: () => 'json', - }, - ecsVersion: { - value: (x: string, y?: string) => y ?? x, - default: () => '8.11.0', - }, -}; - -function modelInput(state: EcsMappingState): Partial { - const samples = modifySamples(state); - const formattedSamples = mergeSamples(samples); - return { - exAnswer: JSON.stringify(ECS_EXAMPLE_ANSWER, null, 2), - ecs: JSON.stringify(ECS_FIELDS, null, 2), - samples, - finalized: false, - formattedSamples, - lastExecutedChain: 'modelInput', - }; -} - -function modelOutput(state: EcsMappingState): Partial { - const currentPipeline = createPipeline(state); - return { - finalized: true, - lastExecutedChain: 'modelOutput', - results: { - mapping: state.currentMapping, - pipeline: currentPipeline, - }, +const handleCreateMappingChunks = async (state: EcsMappingState) => { + // Cherrypick a shallow copy of state to pass to subgraph + const stateParams = { + exAnswer: state.exAnswer, + prefixedSamples: state.prefixedSamples, + ecs: state.ecs, + dataStreamName: state.dataStreamName, + packageName: state.packageName, }; -} - -function inputRouter(state: EcsMappingState): string { if (Object.keys(state.currentMapping).length === 0) { - return 'ecsMapping'; + return state.sampleChunks.map((chunk) => { + return new Send('subGraph', { ...stateParams, combinedSamples: chunk }); + }); } return 'modelOutput'; -} +}; function chainRouter(state: EcsMappingState): string { if (Object.keys(state.duplicateFields).length > 0) { @@ -135,38 +47,52 @@ function chainRouter(state: EcsMappingState): string { return 'invalidEcsFields'; } if (!state.finalized) { - return 'modelOutput'; + return 'modelSubOutput'; } return END; } -export async function getEcsGraph(model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel) { +// This is added as a separate graph to be able to run these steps concurrently from handleCreateMappingChunks +async function getEcsSubGraph(model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel) { const workflow = new StateGraph({ channels: graphState, }) - .addNode('modelInput', modelInput) - .addNode('modelOutput', modelOutput) - .addNode('handleEcsMapping', (state: EcsMappingState) => handleEcsMapping(state, model)) + .addNode('modelSubOutput', modelSubOutput) .addNode('handleValidation', handleValidateMappings) + .addNode('handleEcsMapping', (state: EcsMappingState) => handleEcsMapping(state, model)) .addNode('handleDuplicates', (state: EcsMappingState) => handleDuplicates(state, model)) .addNode('handleMissingKeys', (state: EcsMappingState) => handleMissingKeys(state, model)) .addNode('handleInvalidEcs', (state: EcsMappingState) => handleInvalidEcs(state, model)) - .addEdge(START, 'modelInput') - .addEdge('modelOutput', END) + .addEdge(START, 'handleEcsMapping') .addEdge('handleEcsMapping', 'handleValidation') .addEdge('handleDuplicates', 'handleValidation') .addEdge('handleMissingKeys', 'handleValidation') .addEdge('handleInvalidEcs', 'handleValidation') - .addConditionalEdges('modelInput', inputRouter, { - ecsMapping: 'handleEcsMapping', - modelOutput: 'modelOutput', - }) .addConditionalEdges('handleValidation', chainRouter, { duplicateFields: 'handleDuplicates', missingKeys: 'handleMissingKeys', invalidEcsFields: 'handleInvalidEcs', - modelOutput: 'modelOutput', - }); + modelSubOutput: 'modelSubOutput', + }) + .addEdge('modelSubOutput', END); + + const compiledEcsSubGraph = workflow.compile(); + + return compiledEcsSubGraph; +} + +export async function getEcsGraph(model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel) { + const subGraph = await getEcsSubGraph(model); + const workflow = new StateGraph({ + channels: graphState, + }) + .addNode('modelInput', modelInput) + .addNode('modelOutput', modelOutput) + .addNode('subGraph', subGraph) + .addEdge(START, 'modelInput') + .addEdge('subGraph', 'modelOutput') + .addConditionalEdges('modelInput', handleCreateMappingChunks) + .addEdge('modelOutput', END); const compiledEcsGraph = workflow.compile(); diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/invalid.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/invalid.ts index dcbba0ebe9d13..8e2d1baf4c423 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/ecs/invalid.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/invalid.ts @@ -16,15 +16,14 @@ export async function handleInvalidEcs( state: EcsMappingState, model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel ) { - const ecsInvalidEcsPrompt = ECS_INVALID_PROMPT; const outputParser = new JsonOutputParser(); - const ecsInvalidEcsGraph = ecsInvalidEcsPrompt.pipe(model).pipe(outputParser); + const ecsInvalidEcsGraph = ECS_INVALID_PROMPT.pipe(model).pipe(outputParser); const currentMapping = await ecsInvalidEcsGraph.invoke({ ecs: state.ecs, current_mapping: JSON.stringify(state.currentMapping, null, 2), ex_answer: state.exAnswer, - formatted_samples: state.formattedSamples, + combined_samples: state.combinedSamples, invalid_ecs_fields: state.invalidEcsFields, }); diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/mapping.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/mapping.ts index 7ecb108659f45..30c51dcc01dd9 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/ecs/mapping.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/mapping.ts @@ -16,17 +16,15 @@ export async function handleEcsMapping( state: EcsMappingState, model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel ) { - const ecsMainPrompt = ECS_MAIN_PROMPT; const outputParser = new JsonOutputParser(); - const ecsMainGraph = ecsMainPrompt.pipe(model).pipe(outputParser); + const ecsMainGraph = ECS_MAIN_PROMPT.pipe(model).pipe(outputParser); const currentMapping = await ecsMainGraph.invoke({ ecs: state.ecs, - formatted_samples: state.formattedSamples, + combined_samples: state.combinedSamples, package_name: state.packageName, data_stream_name: state.dataStreamName, ex_answer: state.exAnswer, }); - return { currentMapping, lastExecutedChain: 'ecsMapping' }; } diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/missing.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/missing.ts index d7f1f65b2b4ea..0a23b35bd3b72 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/ecs/missing.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/missing.ts @@ -16,15 +16,14 @@ export async function handleMissingKeys( state: EcsMappingState, model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel ) { - const ecsMissingPrompt = ECS_MISSING_KEYS_PROMPT; const outputParser = new JsonOutputParser(); - const ecsMissingGraph = ecsMissingPrompt.pipe(model).pipe(outputParser); + const ecsMissingGraph = ECS_MISSING_KEYS_PROMPT.pipe(model).pipe(outputParser); const currentMapping = await ecsMissingGraph.invoke({ ecs: state.ecs, current_mapping: JSON.stringify(state.currentMapping, null, 2), ex_answer: state.exAnswer, - formatted_samples: state.formattedSamples, + combined_samples: state.combinedSamples, missing_keys: state?.missingKeys, }); diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/model.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/model.ts new file mode 100644 index 0000000000000..9bc2909ab7942 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/model.ts @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { prefixSamples } from '../../util/samples'; +import { ECS_EXAMPLE_ANSWER, ECS_FIELDS } from './constants'; +import { createPipeline } from './pipeline'; +import { mergeAndChunkSamples } from './chunk'; +import type { EcsMappingState } from '../../types'; + +export function modelSubOutput(state: EcsMappingState): Partial { + return { + lastExecutedChain: 'ModelSubOutput', + finalMapping: state.currentMapping, + }; +} + +export function modelInput(state: EcsMappingState): Partial { + const prefixedSamples = prefixSamples(state); + const sampleChunks = mergeAndChunkSamples(prefixedSamples, state.chunkSize); + return { + exAnswer: JSON.stringify(ECS_EXAMPLE_ANSWER, null, 2), + ecs: JSON.stringify(ECS_FIELDS, null, 2), + prefixedSamples, + sampleChunks, + finalized: false, + lastExecutedChain: 'modelInput', + }; +} + +export function modelOutput(state: EcsMappingState): Partial { + const currentPipeline = createPipeline(state); + return { + finalized: true, + lastExecutedChain: 'modelOutput', + results: { + mapping: state.finalMapping, + pipeline: currentPipeline, + }, + }; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/pipeline.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/pipeline.ts index 0dc7e772a94cf..35c1fb4d31f42 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/ecs/pipeline.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/pipeline.ts @@ -161,7 +161,7 @@ function generateProcessors(ecsMapping: object, samples: object, basePath: strin } export function createPipeline(state: EcsMappingState): IngestPipeline { - const samples = JSON.parse(state.formattedSamples); + const samples = JSON.parse(state.combinedSamples); const processors = generateProcessors(state.currentMapping, samples); // Retrieve all source field names from convert processors to populate single remove processor: diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/prompts.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/prompts.ts index f336b2cde4b48..4e5e4794d5b8f 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/ecs/prompts.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/prompts.ts @@ -15,15 +15,16 @@ Here is some context for you to reference for your task, read it carefully as yo {ecs} - -{formatted_samples} - `, ], [ 'human', `Looking at the combined sample from {package_name} {data_stream_name} provided above. The combined sample is a JSON object that includes all unique fields from the log samples sent by {package_name} {data_stream_name}. + +{combined_samples} + + Go through each value step by step and modify it with the following process: 1. Check if the name of each key and its current value matches the description and usecase of any of the above ECS fields. 2. If one or more relevant ECS field is found, pick the one you are most confident about. @@ -70,9 +71,9 @@ Here is some context for you to reference your task, read it carefully as you wi {ecs} - -{formatted_samples} - + +{combined_samples} + {current_mapping} @@ -84,6 +85,7 @@ Here is some context for you to reference your task, read it carefully as you wi {invalid_ecs_fields} + To resolve the invalid ecs fields, go through each key and value defined in the invalid fields, and modify the current mapping step by step, and ensure they follow these guidelines: - Update the provided current mapping object, the value should be the corresponding Elastic Common Schema field name. If no good or valid match is found the value should always be null. @@ -111,9 +113,9 @@ Here is some context for you to reference for your task, read it carefully as yo {ecs} - -{formatted_samples} - + +{combined_samples} + {current_mapping} @@ -126,7 +128,7 @@ Here is some context for you to reference for your task, read it carefully as yo {missing_keys} -Help resolve the issue by adding the missing keys, look up example values from the formatted samples, and go through each missing key step by step, resolve it by following these guidelines: +Help resolve the issue by adding the missing keys, look up example values from the combined samples, and go through each missing key step by step, resolve it by following these guidelines: - Update the provided current mapping object with all the missing keys, the value should be the corresponding Elastic Common Schema field name. If no good match is found the value should always be null. - Do not respond with anything except the updated current mapping JSON object enclosed with 3 backticks (\`). See example response below. diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/state.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/state.ts new file mode 100644 index 0000000000000..35a307f1de934 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/state.ts @@ -0,0 +1,93 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { StateGraphArgs } from '@langchain/langgraph'; +import type { EcsMappingState } from '../../types'; +import { merge } from '../../util/samples'; + +export const graphState: StateGraphArgs['channels'] = { + ecs: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + chunkSize: { + value: (x: number, y?: number) => y ?? x, + default: () => 10, + }, + lastExecutedChain: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + rawSamples: { + value: (x: string[], y?: string[]) => y ?? x, + default: () => [], + }, + prefixedSamples: { + value: (x: string[], y?: string[]) => y ?? x, + default: () => [], + }, + combinedSamples: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + sampleChunks: { + value: (x: string[], y?: string[]) => y ?? x, + default: () => [], + }, + exAnswer: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + packageName: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + dataStreamName: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + finalized: { + value: (x: boolean, y?: boolean) => y ?? x, + default: () => false, + }, + currentMapping: { + value: (x: object, y?: object) => y ?? x, + default: () => ({}), + }, + finalMapping: { + reducer: merge, + default: () => ({}), + }, + currentPipeline: { + value: (x: object, y?: object) => y ?? x, + default: () => ({}), + }, + duplicateFields: { + value: (x: string[], y?: string[]) => y ?? x, + default: () => [], + }, + missingKeys: { + value: (x: string[], y?: string[]) => y ?? x, + default: () => [], + }, + invalidEcsFields: { + value: (x: string[], y?: string[]) => y ?? x, + default: () => [], + }, + results: { + value: (x: object, y?: object) => y ?? x, + default: () => ({}), + }, + samplesFormat: { + value: (x: string, y?: string) => y ?? x, + default: () => 'json', + }, + ecsVersion: { + value: (x: string, y?: string) => y ?? x, + default: () => '8.11.0', + }, +}; diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/validate.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/validate.ts index c5fee772e133a..f347247df4246 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/ecs/validate.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/validate.ts @@ -41,9 +41,9 @@ function extractKeys(data: AnyObject, prefix: string = ''): Set { return keys; } -function findMissingFields(formattedSamples: string, ecsMapping: AnyObject): string[] { - const combinedSamples = JSON.parse(formattedSamples); - const uniqueKeysFromSamples = extractKeys(combinedSamples); +function findMissingFields(combinedSamples: string, ecsMapping: AnyObject): string[] { + const parsedSamples = JSON.parse(combinedSamples); + const uniqueKeysFromSamples = extractKeys(parsedSamples); const ecsResponseKeys = extractKeys(ecsMapping); const missingKeys = [...uniqueKeysFromSamples].filter((key) => !ecsResponseKeys.has(key)); @@ -94,8 +94,8 @@ function getValueFromPath(obj: AnyObject, path: string[]): unknown { return path.reduce((acc, key) => (acc && acc[key] !== undefined ? acc[key] : null), obj); } -function findDuplicateFields(samples: string[], ecsMapping: AnyObject): string[] { - const parsedSamples = samples.map((sample) => JSON.parse(sample)); +function findDuplicateFields(prefixedSamples: string[], ecsMapping: AnyObject): string[] { + const parsedSamples = prefixedSamples.map((sample) => JSON.parse(sample)); const results: string[] = []; const output: Record = {}; @@ -123,18 +123,17 @@ function findDuplicateFields(samples: string[], ecsMapping: AnyObject): string[] } } } - return results; } // Function to find invalid ECS fields -export function findInvalidEcsFields(ecsMapping: AnyObject): string[] { +export function findInvalidEcsFields(currentMapping: AnyObject): string[] { const results: string[] = []; const output: Record = {}; const ecsDict = ECS_FULL; const ecsReserved = ECS_RESERVED; - processMapping([], ecsMapping, output); + processMapping([], currentMapping, output); const filteredOutput = Object.fromEntries( Object.entries(output).filter(([key, _]) => key !== null) ); @@ -150,13 +149,12 @@ export function findInvalidEcsFields(ecsMapping: AnyObject): string[] { results.push(`Reserved ECS field mapping identified for ${ecsValue} : ${field.join(', ')}`); } } - return results; } export function handleValidateMappings(state: EcsMappingState): AnyObject { - const missingKeys = findMissingFields(state?.formattedSamples, state?.currentMapping); - const duplicateFields = findDuplicateFields(state?.samples, state?.currentMapping); + const missingKeys = findMissingFields(state?.combinedSamples, state?.currentMapping); + const duplicateFields = findDuplicateFields(state?.prefixedSamples, state?.currentMapping); const invalidEcsFields = findInvalidEcsFields(state?.currentMapping); return { missingKeys, diff --git a/x-pack/plugins/integration_assistant/server/graphs/related/graph.ts b/x-pack/plugins/integration_assistant/server/graphs/related/graph.ts index bd387b7177f75..22eb69f7d2a2d 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/related/graph.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/related/graph.ts @@ -13,7 +13,7 @@ import type { ActionsClientSimpleChatModel, } from '@kbn/langchain/server/language_models'; import type { RelatedState } from '../../types'; -import { modifySamples, formatSamples } from '../../util/samples'; +import { prefixSamples, formatSamples } from '../../util/samples'; import { handleValidatePipeline } from '../../util/graph'; import { handleRelated } from './related'; import { handleErrors } from './errors'; @@ -92,7 +92,7 @@ const graphState: StateGraphArgs['channels'] = { }; function modelInput(state: RelatedState): Partial { - const samples = modifySamples(state); + const samples = prefixSamples(state); const formattedSamples = formatSamples(samples); const initialPipeline = JSON.parse(JSON.stringify(state.currentPipeline)); return { diff --git a/x-pack/plugins/integration_assistant/server/types.ts b/x-pack/plugins/integration_assistant/server/types.ts index 3bbe25a8fbd0f..82d43b2a19b43 100644 --- a/x-pack/plugins/integration_assistant/server/types.ts +++ b/x-pack/plugins/integration_assistant/server/types.ts @@ -57,15 +57,18 @@ export interface CategorizationState { export interface EcsMappingState { ecs: string; + chunkSize: number; lastExecutedChain: string; rawSamples: string[]; - samples: string[]; - formattedSamples: string; + prefixedSamples: string[]; + combinedSamples: string; + sampleChunks: string[]; exAnswer: string; packageName: string; dataStreamName: string; finalized: boolean; currentMapping: object; + finalMapping: object; currentPipeline: object; duplicateFields: string[]; missingKeys: string[]; diff --git a/x-pack/plugins/integration_assistant/server/util/samples.ts b/x-pack/plugins/integration_assistant/server/util/samples.ts index f6728653e75ca..766856f644a86 100644 --- a/x-pack/plugins/integration_assistant/server/util/samples.ts +++ b/x-pack/plugins/integration_assistant/server/util/samples.ts @@ -24,7 +24,10 @@ interface Field { fields?: Field[]; } -export function modifySamples(state: EcsMappingState | CategorizationState | RelatedState) { +// Given a graph state, it collects the rawSamples (array of JSON strings) and prefixes them with the packageName and dataStreamName, returning an array of prefixed JSON strings. +export function prefixSamples( + state: EcsMappingState | CategorizationState | RelatedState +): string[] { const modifiedSamples: string[] = []; const rawSamples = state.rawSamples; const packageName = state.packageName; @@ -44,55 +47,6 @@ export function modifySamples(state: EcsMappingState | CategorizationState | Rel return modifiedSamples; } -function isEmptyValue(value: unknown): boolean { - return ( - value === null || - value === undefined || - (typeof value === 'object' && !Array.isArray(value) && Object.keys(value).length === 0) || - (Array.isArray(value) && value.length === 0) - ); -} - -function merge(target: Record, source: Record): Record { - for (const [key, sourceValue] of Object.entries(source)) { - if (key !== '__proto__' && key !== 'constructor') { - if (Object.prototype.hasOwnProperty.call(target, key)) { - const targetValue = target[key]; - if (Array.isArray(sourceValue)) { - target[key] = sourceValue; - } else if ( - typeof sourceValue === 'object' && - sourceValue !== null && - typeof targetValue === 'object' && - targetValue !== null && - !Array.isArray(targetValue) - ) { - target[key] = merge(targetValue, sourceValue); - } else if (isEmptyValue(targetValue) && !isEmptyValue(sourceValue)) { - target[key] = sourceValue; - } - } else if (!isEmptyValue(sourceValue)) { - target[key] = sourceValue; - } - } - } - return target; -} - -export function mergeSamples(objects: any[]): string { - let result: Record = {}; - - for (const obj of objects) { - let sample: Record = obj; - if (typeof obj === 'string') { - sample = JSON.parse(obj); - } - result = merge(result, sample); - } - - return JSON.stringify(result, null, 2); -} - export function formatSamples(samples: string[]): string { const formattedSamples: unknown[] = []; @@ -208,3 +162,52 @@ export function generateFields(mergedDocs: string): string { return yaml.safeDump(fieldsStructure, { sortKeys: false }); } + +function isEmptyValue(value: unknown): boolean { + return ( + value === null || + value === undefined || + (typeof value === 'object' && !Array.isArray(value) && Object.keys(value).length === 0) || + (Array.isArray(value) && value.length === 0) + ); +} + +export function merge( + target: Record, + source: Record +): Record { + for (const [key, sourceValue] of Object.entries(source)) { + const targetValue = target[key]; + if (Array.isArray(sourceValue)) { + // Directly assign arrays + target[key] = sourceValue; + } else if ( + typeof sourceValue === 'object' && + sourceValue !== null && + !Array.isArray(targetValue) + ) { + if (typeof targetValue !== 'object' || isEmptyValue(targetValue)) { + target[key] = merge({}, sourceValue); + } else { + target[key] = merge(targetValue, sourceValue); + } + } else if (!(key in target) || (isEmptyValue(targetValue) && !isEmptyValue(sourceValue))) { + target[key] = sourceValue; + } + } + return target; +} + +export function mergeSamples(objects: any[]): string { + let result: Record = {}; + + for (const obj of objects) { + let sample: Record = obj; + if (typeof obj === 'string') { + sample = JSON.parse(obj); + } + result = merge(result, sample); + } + + return JSON.stringify(result, null, 2); +} From 06baacf33873acd682fc5151efab6c351a54aa7d Mon Sep 17 00:00:00 2001 From: Panagiota Mitsopoulou Date: Fri, 23 Aug 2024 17:06:07 +0200 Subject: [PATCH 55/59] [A11Y][SLO detail] burn rate time range abbreviations (#191146) Fixes https://github.com/elastic/observability-accessibility/issues/54 ## How to test - Turn on your Screen Reader (voiceOver on MAC) - Go to SLO detail page - The burn rate abbreviation labels should be `1 hour`, `6 hours`, `24 hours`, `72 hours` - Navigate with `Tab` button to the burn rate time range abbreviations - The Screen Reader should speak out `1 hour`, `6 hours`, `24 hours`, `72 hours` https://github.com/user-attachments/assets/4cc6a375-afef-4531-a177-d52e9326a701 Co-authored-by: Elastic Machine --- .../slo/burn_rate/burn_rate_header.tsx | 6 +++- .../components/slo/burn_rate/burn_rates.tsx | 1 + .../hooks/use_burn_rate_options.ts | 30 +++++++++++++++---- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/burn_rate_header.tsx b/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/burn_rate_header.tsx index 5df9bcb2255b4..4c878735a5857 100644 --- a/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/burn_rate_header.tsx +++ b/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/burn_rate_header.tsx @@ -43,7 +43,11 @@ export function BurnRateHeader({ legend={i18n.translate('xpack.slo.burnRate.timeRangeBtnLegend', { defaultMessage: 'Select the time range', })} - options={burnRateOptions.map((opt) => ({ id: opt.id, label: opt.label }))} + options={burnRateOptions.map((opt) => ({ + id: opt.id, + label: opt.label, + 'aria-label': opt.ariaLabel, + }))} idSelected={burnRateOption.id} onChange={onBurnRateOptionChange} buttonSize="compressed" diff --git a/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/burn_rates.tsx b/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/burn_rates.tsx index cb7555dfeaec3..a6c02572d10fe 100644 --- a/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/burn_rates.tsx +++ b/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/burn_rates.tsx @@ -32,6 +32,7 @@ export interface BurnRateOption { windowName: string; threshold: number; duration: number; + ariaLabel: string; } function getWindowsFromOptions(opts: BurnRateOption[]): Array<{ name: string; duration: string }> { diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slo_details/hooks/use_burn_rate_options.ts b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/hooks/use_burn_rate_options.ts index 2054c53723607..1bb86de617fac 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slo_details/hooks/use_burn_rate_options.ts +++ b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/hooks/use_burn_rate_options.ts @@ -15,7 +15,11 @@ export const DEFAULT_BURN_RATE_OPTIONS: BurnRateOption[] = [ { id: htmlIdGenerator()(), label: i18n.translate('xpack.slo.burnRates.fromRange.label', { - defaultMessage: '{duration}h', + defaultMessage: '{duration} hour', + values: { duration: 1 }, + }), + ariaLabel: i18n.translate('xpack.slo.burnRates.fromRange.label', { + defaultMessage: '{duration} hour', values: { duration: 1 }, }), windowName: 'CRITICAL', @@ -25,7 +29,11 @@ export const DEFAULT_BURN_RATE_OPTIONS: BurnRateOption[] = [ { id: htmlIdGenerator()(), label: i18n.translate('xpack.slo.burnRates.fromRange.label', { - defaultMessage: '{duration}h', + defaultMessage: '{duration} hours', + values: { duration: 6 }, + }), + ariaLabel: i18n.translate('xpack.slo.burnRates.fromRange.label', { + defaultMessage: '{duration} hours', values: { duration: 6 }, }), windowName: 'HIGH', @@ -35,7 +43,11 @@ export const DEFAULT_BURN_RATE_OPTIONS: BurnRateOption[] = [ { id: htmlIdGenerator()(), label: i18n.translate('xpack.slo.burnRates.fromRange.label', { - defaultMessage: '{duration}h', + defaultMessage: '{duration} hours', + values: { duration: 24 }, + }), + ariaLabel: i18n.translate('xpack.slo.burnRates.fromRange.label', { + defaultMessage: '{duration} hours', values: { duration: 24 }, }), windowName: 'MEDIUM', @@ -44,8 +56,12 @@ export const DEFAULT_BURN_RATE_OPTIONS: BurnRateOption[] = [ }, { id: htmlIdGenerator()(), + ariaLabel: i18n.translate('xpack.slo.burnRates.fromRange.label', { + defaultMessage: '{duration} hours', + values: { duration: 72 }, + }), label: i18n.translate('xpack.slo.burnRates.fromRange.label', { - defaultMessage: '{duration}h', + defaultMessage: '{duration} hours', values: { duration: 72 }, }), windowName: 'LOW', @@ -60,7 +76,11 @@ export const useBurnRateOptions = (slo: SLOWithSummaryResponse) => { rules?.[slo.id]?.[0]?.params?.windows?.map((window) => ({ id: htmlIdGenerator()(), label: i18n.translate('xpack.slo.burnRates.fromRange.label', { - defaultMessage: '{duration}h', + defaultMessage: '{duration, plural, one {# hour} other {# hours}}', + values: { duration: window.longWindow.value }, + }), + ariaLabel: i18n.translate('xpack.slo.burnRates.fromRange.label', { + defaultMessage: '{duration, plural, one {# hour} other {# hours}}', values: { duration: window.longWindow.value }, }), windowName: window.actionGroup, From e6e75ef6faf272bdfed2eb2146a64eac00d12656 Mon Sep 17 00:00:00 2001 From: Rodney Norris Date: Fri, 23 Aug 2024 10:13:52 -0500 Subject: [PATCH 56/59] [Search] search_indices: scaffold empty plugin (#190748) ## Summary Scaffolding empty plugin for development of day 0 onboarding work. This plugin is currently disabled by default and will be enabled for ES3 when it's ready for users. --- .github/CODEOWNERS | 1 + docs/developer/plugin-list.asciidoc | 4 ++ package.json | 1 + packages/kbn-optimizer/limits.yml | 1 + tsconfig.base.json | 2 + x-pack/.i18nrc.json | 1 + x-pack/plugins/search_indices/README.mdx | 3 ++ x-pack/plugins/search_indices/common/index.ts | 9 ++++ x-pack/plugins/search_indices/jest.config.js | 15 +++++++ x-pack/plugins/search_indices/kibana.jsonc | 23 ++++++++++ x-pack/plugins/search_indices/public/index.ts | 15 +++++++ .../plugins/search_indices/public/plugin.ts | 23 ++++++++++ x-pack/plugins/search_indices/public/types.ts | 17 +++++++ .../plugins/search_indices/server/config.ts | 19 ++++++++ x-pack/plugins/search_indices/server/index.ts | 17 +++++++ .../plugins/search_indices/server/plugin.ts | 45 +++++++++++++++++++ .../search_indices/server/routes/index.ts | 10 +++++ x-pack/plugins/search_indices/server/types.ts | 11 +++++ x-pack/plugins/search_indices/tsconfig.json | 21 +++++++++ x-pack/plugins/serverless_search/kibana.jsonc | 1 + yarn.lock | 4 ++ 21 files changed, 243 insertions(+) create mode 100644 x-pack/plugins/search_indices/README.mdx create mode 100644 x-pack/plugins/search_indices/common/index.ts create mode 100644 x-pack/plugins/search_indices/jest.config.js create mode 100644 x-pack/plugins/search_indices/kibana.jsonc create mode 100644 x-pack/plugins/search_indices/public/index.ts create mode 100644 x-pack/plugins/search_indices/public/plugin.ts create mode 100644 x-pack/plugins/search_indices/public/types.ts create mode 100644 x-pack/plugins/search_indices/server/config.ts create mode 100644 x-pack/plugins/search_indices/server/index.ts create mode 100644 x-pack/plugins/search_indices/server/plugin.ts create mode 100644 x-pack/plugins/search_indices/server/routes/index.ts create mode 100644 x-pack/plugins/search_indices/server/types.ts create mode 100644 x-pack/plugins/search_indices/tsconfig.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8a307d8ce90a1..35390910137c6 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -741,6 +741,7 @@ packages/kbn-search-errors @elastic/kibana-data-discovery examples/search_examples @elastic/kibana-data-discovery x-pack/plugins/search_homepage @elastic/search-kibana packages/kbn-search-index-documents @elastic/search-kibana +x-pack/plugins/search_indices @elastic/search-kibana x-pack/plugins/search_inference_endpoints @elastic/search-kibana x-pack/plugins/search_notebooks @elastic/search-kibana x-pack/plugins/search_playground @elastic/search-kibana diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index fc89188c4d219..1f4f516e59167 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -807,6 +807,10 @@ It uses Chromium and Puppeteer underneath to run the browser in headless mode. |The Search Homepage is a shared homepage for elasticsearch users. +|{kib-repo}blob/{branch}/x-pack/plugins/search_indices/README.mdx[searchIndices] +|The Search Indices plugin is a shared set of pages for elasticsearch users across stack and serverless search solutions. + + |{kib-repo}blob/{branch}/x-pack/plugins/search_inference_endpoints/README.md[searchInferenceEndpoints] |The Inference Endpoints is a tool used to manage inference endpoints diff --git a/package.json b/package.json index 038ba497cfa1b..27a009189f475 100644 --- a/package.json +++ b/package.json @@ -759,6 +759,7 @@ "@kbn/search-examples-plugin": "link:examples/search_examples", "@kbn/search-homepage": "link:x-pack/plugins/search_homepage", "@kbn/search-index-documents": "link:packages/kbn-search-index-documents", + "@kbn/search-indices": "link:x-pack/plugins/search_indices", "@kbn/search-inference-endpoints": "link:x-pack/plugins/search_inference_endpoints", "@kbn/search-notebooks": "link:x-pack/plugins/search_notebooks", "@kbn/search-playground": "link:x-pack/plugins/search_playground", diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index d6aa58cb5d307..3a56e7e75029b 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -139,6 +139,7 @@ pageLoadAssetSize: searchAssistant: 19831 searchConnectors: 30000 searchHomepage: 19831 + searchIndices: 20519 searchInferenceEndpoints: 20470 searchNotebooks: 18942 searchPlayground: 19325 diff --git a/tsconfig.base.json b/tsconfig.base.json index 690d74cfab916..8eb24fb127bb8 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1476,6 +1476,8 @@ "@kbn/search-homepage/*": ["x-pack/plugins/search_homepage/*"], "@kbn/search-index-documents": ["packages/kbn-search-index-documents"], "@kbn/search-index-documents/*": ["packages/kbn-search-index-documents/*"], + "@kbn/search-indices": ["x-pack/plugins/search_indices"], + "@kbn/search-indices/*": ["x-pack/plugins/search_indices/*"], "@kbn/search-inference-endpoints": ["x-pack/plugins/search_inference_endpoints"], "@kbn/search-inference-endpoints/*": ["x-pack/plugins/search_inference_endpoints/*"], "@kbn/search-notebooks": ["x-pack/plugins/search_notebooks"], diff --git a/x-pack/.i18nrc.json b/x-pack/.i18nrc.json index c90ce916b712b..f2ab7a782915e 100644 --- a/x-pack/.i18nrc.json +++ b/x-pack/.i18nrc.json @@ -102,6 +102,7 @@ "xpack.runtimeFields": "plugins/runtime_fields", "xpack.screenshotting": "plugins/screenshotting", "xpack.searchHomepage": "plugins/search_homepage", + "xpack.searchIndices": "plugins/search_indices", "xpack.searchNotebooks": "plugins/search_notebooks", "xpack.searchPlayground": "plugins/search_playground", "xpack.searchInferenceEndpoints": "plugins/search_inference_endpoints", diff --git a/x-pack/plugins/search_indices/README.mdx b/x-pack/plugins/search_indices/README.mdx new file mode 100644 index 0000000000000..77ca7d86aa55c --- /dev/null +++ b/x-pack/plugins/search_indices/README.mdx @@ -0,0 +1,3 @@ +# Search Indices + +The Search Indices plugin is a shared set of pages for elasticsearch users across stack and serverless search solutions. diff --git a/x-pack/plugins/search_indices/common/index.ts b/x-pack/plugins/search_indices/common/index.ts new file mode 100644 index 0000000000000..a0e7d3fe35e68 --- /dev/null +++ b/x-pack/plugins/search_indices/common/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const PLUGIN_ID = 'searchIndices'; +export const PLUGIN_NAME = 'searchIndices'; diff --git a/x-pack/plugins/search_indices/jest.config.js b/x-pack/plugins/search_indices/jest.config.js new file mode 100644 index 0000000000000..8f8cacaaeed62 --- /dev/null +++ b/x-pack/plugins/search_indices/jest.config.js @@ -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. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../..', + roots: ['/x-pack/plugins/search_indices'], + coverageDirectory: '/target/kibana-coverage/jest/x-pack/plugins/search_indices', + coverageReporters: ['text', 'html'], + collectCoverageFrom: ['/x-pack/plugins/search_indices/{public,server}/**/*.{ts,tsx}'], +}; diff --git a/x-pack/plugins/search_indices/kibana.jsonc b/x-pack/plugins/search_indices/kibana.jsonc new file mode 100644 index 0000000000000..287719e99b350 --- /dev/null +++ b/x-pack/plugins/search_indices/kibana.jsonc @@ -0,0 +1,23 @@ +{ + "type": "plugin", + "id": "@kbn/search-indices", + "owner": "@elastic/search-kibana", + "plugin": { + "id": "searchIndices", + "server": true, + "browser": true, + "configPath": [ + "xpack", + "searchIndices" + ], + "requiredPlugins": [ + "share", + ], + "optionalPlugins": [ + "cloud", + "console", + "usageCollection", + ], + "requiredBundles": [] + } +} diff --git a/x-pack/plugins/search_indices/public/index.ts b/x-pack/plugins/search_indices/public/index.ts new file mode 100644 index 0000000000000..b3ad3b1e834b7 --- /dev/null +++ b/x-pack/plugins/search_indices/public/index.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 { SearchIndicesPlugin } from './plugin'; + +// This exports static code and TypeScript types, +// as well as, Kibana Platform `plugin()` initializer. +export function plugin() { + return new SearchIndicesPlugin(); +} +export type { SearchIndicesPluginSetup, SearchIndicesPluginStart } from './types'; diff --git a/x-pack/plugins/search_indices/public/plugin.ts b/x-pack/plugins/search_indices/public/plugin.ts new file mode 100644 index 0000000000000..88df6c1e4c10e --- /dev/null +++ b/x-pack/plugins/search_indices/public/plugin.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 { CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; +import type { SearchIndicesPluginSetup, SearchIndicesPluginStart } from './types'; + +export class SearchIndicesPlugin + implements Plugin +{ + public setup(core: CoreSetup): SearchIndicesPluginSetup { + return {}; + } + + public start(core: CoreStart): SearchIndicesPluginStart { + return {}; + } + + public stop() {} +} diff --git a/x-pack/plugins/search_indices/public/types.ts b/x-pack/plugins/search_indices/public/types.ts new file mode 100644 index 0000000000000..b16086803be53 --- /dev/null +++ b/x-pack/plugins/search_indices/public/types.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SearchIndicesPluginSetup {} +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SearchIndicesPluginStart {} + +export interface AppPluginStartDependencies { + navigation: NavigationPublicPluginStart; +} diff --git a/x-pack/plugins/search_indices/server/config.ts b/x-pack/plugins/search_indices/server/config.ts new file mode 100644 index 0000000000000..408d45cf23e2e --- /dev/null +++ b/x-pack/plugins/search_indices/server/config.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema, TypeOf } from '@kbn/config-schema'; +import { PluginConfigDescriptor } from '@kbn/core/server'; + +const configSchema = schema.object({ + enabled: schema.boolean({ defaultValue: false }), +}); + +export type SearchIndicesConfig = TypeOf; + +export const config: PluginConfigDescriptor = { + schema: configSchema, +}; diff --git a/x-pack/plugins/search_indices/server/index.ts b/x-pack/plugins/search_indices/server/index.ts new file mode 100644 index 0000000000000..b9b062b7df181 --- /dev/null +++ b/x-pack/plugins/search_indices/server/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { PluginInitializerContext } from '@kbn/core/server'; + +export { config } from './config'; + +export async function plugin(initializerContext: PluginInitializerContext) { + const { SearchIndicesPlugin } = await import('./plugin'); + return new SearchIndicesPlugin(initializerContext); +} + +export type { SearchIndicesPluginSetup, SearchIndicesPluginStart } from './types'; diff --git a/x-pack/plugins/search_indices/server/plugin.ts b/x-pack/plugins/search_indices/server/plugin.ts new file mode 100644 index 0000000000000..666e49016f551 --- /dev/null +++ b/x-pack/plugins/search_indices/server/plugin.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + PluginInitializerContext, + CoreSetup, + CoreStart, + Plugin, + Logger, +} from '@kbn/core/server'; + +import type { SearchIndicesPluginSetup, SearchIndicesPluginStart } from './types'; +import { defineRoutes } from './routes'; + +export class SearchIndicesPlugin + implements Plugin +{ + private readonly logger: Logger; + + constructor(initializerContext: PluginInitializerContext) { + this.logger = initializerContext.logger.get(); + } + + public setup(core: CoreSetup) { + this.logger.debug('searchIndices: Setup'); + this.logger.info('searchIndices test'); + const router = core.http.createRouter(); + + // Register server side APIs + defineRoutes(router); + + return {}; + } + + public start(core: CoreStart) { + this.logger.debug('searchIndices: Started'); + return {}; + } + + public stop() {} +} diff --git a/x-pack/plugins/search_indices/server/routes/index.ts b/x-pack/plugins/search_indices/server/routes/index.ts new file mode 100644 index 0000000000000..c98be5b6a4490 --- /dev/null +++ b/x-pack/plugins/search_indices/server/routes/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { IRouter } from '@kbn/core/server'; + +export function defineRoutes(router: IRouter) {} diff --git a/x-pack/plugins/search_indices/server/types.ts b/x-pack/plugins/search_indices/server/types.ts new file mode 100644 index 0000000000000..3586d18e6f253 --- /dev/null +++ b/x-pack/plugins/search_indices/server/types.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. + */ + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SearchIndicesPluginSetup {} +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SearchIndicesPluginStart {} diff --git a/x-pack/plugins/search_indices/tsconfig.json b/x-pack/plugins/search_indices/tsconfig.json new file mode 100644 index 0000000000000..48969cf7142bb --- /dev/null +++ b/x-pack/plugins/search_indices/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types" + }, + "include": [ + "__mocks__/**/*", + "common/**/*", + "public/**/*", + "server/**/*", + "../../../typings/**/*" + ], + "kbn_references": [ + "@kbn/core", + "@kbn/navigation-plugin", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", + ] +} diff --git a/x-pack/plugins/serverless_search/kibana.jsonc b/x-pack/plugins/serverless_search/kibana.jsonc index 04002ee897cf4..a326956635d80 100644 --- a/x-pack/plugins/serverless_search/kibana.jsonc +++ b/x-pack/plugins/serverless_search/kibana.jsonc @@ -30,6 +30,7 @@ "indexManagement", "searchConnectors", "searchHomepage", + "searchIndices", "searchInferenceEndpoints", "usageCollection" ], diff --git a/yarn.lock b/yarn.lock index 4e4b9dc467d37..0fa11b5e9465a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6236,6 +6236,10 @@ version "0.0.0" uid "" +"@kbn/search-indices@link:x-pack/plugins/search_indices": + version "0.0.0" + uid "" + "@kbn/search-inference-endpoints@link:x-pack/plugins/search_inference_endpoints": version "0.0.0" uid "" From 5d0acf77a7f478550501a6feb32422347372a770 Mon Sep 17 00:00:00 2001 From: Lola Date: Fri, 23 Aug 2024 11:23:11 -0400 Subject: [PATCH 57/59] [Cloud Security] fix cloud formation pop-up flicker (#191136) ## Summary Summarize your PR. If it involves visual changes include a screenshot or gif. If go to CSPM page and click save and continue, the Cloud Formation Pop occasionally flickers and shows Fleet Server host error for one second. This PR adds a boolean `isLoadingIntialRequest` for us to wait after loading Fleet Server hosts before showing the errors. [Quick Wins](https://github.com/elastic/security-team/issues/10316) Locally: https://github.com/user-attachments/assets/bf393103-9d21-4ddf-96a9-8fc3e9626369 Serverless QA https://github.com/user-attachments/assets/d1877a5a-97ba-4ce6-b87b-177656bdd004 --- .../post_install_cloud_formation_modal.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/cloud_security_posture/post_install_cloud_formation_modal.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/cloud_security_posture/post_install_cloud_formation_modal.tsx index a4ef8c1cee1bb..77fab1cb61e62 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/cloud_security_posture/post_install_cloud_formation_modal.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/cloud_security_posture/post_install_cloud_formation_modal.tsx @@ -44,7 +44,9 @@ export const PostInstallCloudFormationModal: React.FunctionComponent<{ ); const { agentPolicyWithPackagePolicies } = useAgentPolicyWithPackagePolicies(agentPolicy.id); - const { fleetServerHost } = useFleetServerHostsForPolicy(agentPolicyWithPackagePolicies); + const { fleetServerHost, isLoadingInitialRequest } = useFleetServerHostsForPolicy( + agentPolicyWithPackagePolicies + ); const cloudFormationProps = getCloudFormationPropsFromPackagePolicy(packagePolicy); @@ -67,7 +69,7 @@ export const PostInstallCloudFormationModal: React.FunctionComponent<{ - {error && isError && ( + {error && isError && !isLoadingInitialRequest && ( <> From 0330c70642ccce33bf984629ccd53f4864cbbc68 Mon Sep 17 00:00:00 2001 From: Larry Gregory Date: Fri, 23 Aug 2024 11:42:00 -0400 Subject: [PATCH 58/59] Add Elena to the hardening manifest (#191197) ## Summary Adds @elena-shostak to the Iron Bank hardening manifest. --- .../templates/ironbank/hardening_manifest.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/dev/build/tasks/os_packages/docker_generator/templates/ironbank/hardening_manifest.yaml b/src/dev/build/tasks/os_packages/docker_generator/templates/ironbank/hardening_manifest.yaml index 8d82b411961a4..4dc8ff9868dc1 100644 --- a/src/dev/build/tasks/os_packages/docker_generator/templates/ironbank/hardening_manifest.yaml +++ b/src/dev/build/tasks/os_packages/docker_generator/templates/ironbank/hardening_manifest.yaml @@ -80,3 +80,7 @@ maintainers: email: sid.mantri@elastic.co name: Sid Mantri username: sidmantri + - cht_member: false + email: elena.shostak@elastic.co + name: Elena Shostak + username: elena.shostak From d1b322311a85c823d9127e2fdfa7164e98b2658d Mon Sep 17 00:00:00 2001 From: Dominique Clarke Date: Fri, 23 Aug 2024 11:48:04 -0400 Subject: [PATCH 59/59] [Synthetics] add aria-live region to add monitor creation flow (#191135) ## Summary Resolves https://github.com/elastic/observability-accessibility/issues/14 ### Testing 1. Turn on your screen reader. For Mac, to turn on voiceover it's Command + F5. 2. Make sure you have a few synthetics monitors created, at least two 3. Navigate to `synthetics/add-monitor`. Tab to monitor type radio list and use the right and left arrow buttons to change the option. 4. The content of the bottom descriptive callout should be read when changing the monitor type --- .../monitor_add_edit/fields/monitor_type_radio_group.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/fields/monitor_type_radio_group.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/fields/monitor_type_radio_group.tsx index 0cf66f8fc65ae..33f4bf004fd7c 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/fields/monitor_type_radio_group.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/fields/monitor_type_radio_group.tsx @@ -92,7 +92,7 @@ export const MonitorTypeRadioGroup = ({ {selectedOption && ( - +

{selectedOption.descriptionTitle}