From 42d4b6f0091383ac7bae1a6d3869c7ca85181759 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 11 Aug 2023 02:16:46 -0700
Subject: [PATCH 01/46] Update APM (main) (#163623)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 4 ++--
yarn.lock | 28 ++++++++++++++--------------
2 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/package.json b/package.json
index 9f93dce31d0fa..27016cdefdb0b 100644
--- a/package.json
+++ b/package.json
@@ -92,8 +92,8 @@
"@dnd-kit/core": "^3.1.1",
"@dnd-kit/sortable": "^4.0.0",
"@dnd-kit/utilities": "^2.0.0",
- "@elastic/apm-rum": "^5.13.0",
- "@elastic/apm-rum-react": "^1.4.3",
+ "@elastic/apm-rum": "^5.14.0",
+ "@elastic/apm-rum-react": "^1.4.4",
"@elastic/charts": "59.1.0",
"@elastic/datemath": "5.0.3",
"@elastic/elasticsearch": "npm:@elastic/elasticsearch@8.9.0",
diff --git a/yarn.lock b/yarn.lock
index 93eef32dcd84e..945c81f6d566d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1456,29 +1456,29 @@
dependencies:
tslib "^2.0.0"
-"@elastic/apm-rum-core@^5.18.0":
- version "5.18.0"
- resolved "https://registry.yarnpkg.com/@elastic/apm-rum-core/-/apm-rum-core-5.18.0.tgz#d1c25594c8e81a929b1f9444ecc081359a97b3d5"
- integrity sha512-KGU+ZFtdXdD7pR+arDq0JRIC4IKIH0D16p+7SMkq9Lq8wq70Uy6r5SKZgW7X6ahnJP35hStMXT2mjStjD9a+wA==
+"@elastic/apm-rum-core@^5.19.0":
+ version "5.19.0"
+ resolved "https://registry.yarnpkg.com/@elastic/apm-rum-core/-/apm-rum-core-5.19.0.tgz#653a120e60549b2486c86919e5079df9fd779a67"
+ integrity sha512-vjddutdSY2L15I0hFd45PaStleemFfxmvXj1KjiFCbRGQRW2JhMoaNJ6YpFXP+L5rs96olwXGzYLHaztWs1ciQ==
dependencies:
error-stack-parser "^1.3.5"
opentracing "^0.14.3"
promise-polyfill "^8.1.3"
-"@elastic/apm-rum-react@^1.4.3":
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/@elastic/apm-rum-react/-/apm-rum-react-1.4.3.tgz#cbbde9d8e0f9aaf8459e07626d88b15188f99d37"
- integrity sha512-9OSy373fNkLfnf6g8lEBjycm03NJnTPeTYTLUh+Gvlf5NGic+mLZbm7d4dQvUxgIcjKzlx94et3SGysG6JzDrg==
+"@elastic/apm-rum-react@^1.4.4":
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/@elastic/apm-rum-react/-/apm-rum-react-1.4.4.tgz#f716d9a5b44e2c8d89b47fb90ad24264c4e67cea"
+ integrity sha512-j6WZSDlA1SsWuAhn9bv2HGXFhoHe3TQVvOysUXdRvCyo2yzzdiwGQeqJs5Gl4dfxqZmyFnlutpAnoygTJVWdtQ==
dependencies:
- "@elastic/apm-rum" "^5.13.0"
+ "@elastic/apm-rum" "^5.14.0"
hoist-non-react-statics "^3.3.0"
-"@elastic/apm-rum@^5.13.0":
- version "5.13.0"
- resolved "https://registry.yarnpkg.com/@elastic/apm-rum/-/apm-rum-5.13.0.tgz#a79df440a2e80a492b24e9c04b62c408a6863fa4"
- integrity sha512-b3H9EEwUpDsGhtqY9oiVILR3nFh8jM9rA9LQGZxw155d2x1MEFyqOhI1uXkhgxirnC+RZHRuQKcfWxZtPQnrfA==
+"@elastic/apm-rum@^5.14.0":
+ version "5.14.0"
+ resolved "https://registry.yarnpkg.com/@elastic/apm-rum/-/apm-rum-5.14.0.tgz#a7d503a3ef3272767e383e9be780bf68a63c553f"
+ integrity sha512-JyJrKAtumXpQL9X3MTkR4YTw7CzYq5O7jqpB7nVZtqgmfkKgUBAQsmQ4kkpIYhDFDKGDI+45EBj+O0ZQ9QND9w==
dependencies:
- "@elastic/apm-rum-core" "^5.18.0"
+ "@elastic/apm-rum-core" "^5.19.0"
"@elastic/app-search-javascript@^8.1.2":
version "8.1.2"
From c8e5741a0b4722d1adb8e532ab2997b30d664fc1 Mon Sep 17 00:00:00 2001
From: Liam Thompson <32779855+leemthompo@users.noreply.github.com>
Date: Fri, 11 Aug 2023 11:27:26 +0200
Subject: [PATCH 02/46] [Enterprise Search] Update Workplace Search connectors
doclink (#163676)
Small URL update.
---
packages/kbn-doc-links/src/get_doc_links.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/kbn-doc-links/src/get_doc_links.ts b/packages/kbn-doc-links/src/get_doc_links.ts
index 7bf1b32195dd5..49105db3e5db4 100644
--- a/packages/kbn-doc-links/src/get_doc_links.ts
+++ b/packages/kbn-doc-links/src/get_doc_links.ts
@@ -152,7 +152,7 @@ export const getDocLinks = ({ kibanaBranch }: GetDocLinkOptions): DocLinks => {
connectorsServiceNow: `${ENTERPRISE_SEARCH_DOCS}connectors-servicenow.html`,
connectorsSharepoint: `${ENTERPRISE_SEARCH_DOCS}connectors-sharepoint.html`,
connectorsSharepointOnline: `${ENTERPRISE_SEARCH_DOCS}connectors-sharepoint-online.html`,
- connectorsWorkplaceSearch: `${ENTERPRISE_SEARCH_DOCS}connectors.html#connectors-workplace-search`,
+ connectorsWorkplaceSearch: `${ENTERPRISE_SEARCH_DOCS}workplace-search-connectors.html`,
crawlerExtractionRules: `${ENTERPRISE_SEARCH_DOCS}crawler-extraction-rules.html`,
crawlerManaging: `${ENTERPRISE_SEARCH_DOCS}crawler-managing.html`,
crawlerOverview: `${ENTERPRISE_SEARCH_DOCS}crawler.html`,
From 81ca020ad710c500ce7a33b51439c4d413715c3c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20S=C3=A1nchez?=
Date: Fri, 11 Aug 2023 11:45:14 +0200
Subject: [PATCH 03/46] [Security Solution][Endpoint] Removes pMap and uses a
for loop instead (#163509)
## Summary
Removes pMap and uses a for loop instead when fetching exceptions (as it
was done before) since exceptions are cached and there is no need for
parallel code here.
Original PR with previous changes:
https://github.com/elastic/kibana/pull/160387
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
---
.../manifest_manager/manifest_manager.ts | 23 +++++--------------
1 file changed, 6 insertions(+), 17 deletions(-)
diff --git a/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts
index e6b15c07262f7..2dd607604b82f 100644
--- a/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts
+++ b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts
@@ -5,7 +5,6 @@
* 2.0.
*/
-import pMap from 'p-map';
import semver from 'semver';
import { isEqual, isEmpty, chunk, keyBy } from 'lodash';
import type { ElasticsearchClient } from '@kbn/core/server';
@@ -223,23 +222,13 @@ export class ManifestManager {
osOptions: BuildArtifactsForOsOptions
): Promise> {
const policySpecificArtifacts: Record = {};
- await pMap(
- allPolicyIds,
- async (policyId) => {
- for (const os of supportedOSs) {
- policySpecificArtifacts[policyId] = policySpecificArtifacts[policyId] || [];
- policySpecificArtifacts[policyId].push(
- await this.buildArtifactsForOs({ os, policyId, ...osOptions })
- );
- }
- },
- {
- concurrency: 5,
- /** When set to false, instead of stopping when a promise rejects, it will wait for all the promises to
- * settle and then reject with an aggregated error containing all the errors from the rejected promises. */
- stopOnError: false,
+ for (const policyId of allPolicyIds)
+ for (const os of supportedOSs) {
+ policySpecificArtifacts[policyId] = policySpecificArtifacts[policyId] || [];
+ policySpecificArtifacts[policyId].push(
+ await this.buildArtifactsForOs({ os, policyId, ...osOptions })
+ );
}
- );
return policySpecificArtifacts;
}
From 4c812e3b6d1a4e477768dae04047e79bbdc940ff Mon Sep 17 00:00:00 2001
From: Marco Liberati
Date: Fri, 11 Aug 2023 11:52:17 +0200
Subject: [PATCH 04/46] [Lens] Relax counter field checks for saved
visualizations with unsupported operations (#163515)
## Summary
Fix #163473
This PR relaxes a bit the checks on the Lens side for old/saved
visualizations with unsupported operations for the `counter` field type,
while preserving those checks for newer visualizations.
Dashboards with "meaningless" operations will now show a warning
message:
When in editor the warning is shown at the top-right corner as well:
New visualizations still prevent the user from using the unsupported
operations:
There's theoretically a last case where users in old SOs might create a
new metric dimension trying to force to use a unsupported operation for
a counter field: in this case the logic for a "new" visualization will
kick-in, clean the data in the workspace and show a full error.
Cancelling such metric dimension will lead to the previous "relaxed"
state.
Messages are grouped by field and by top referencing column (i.e. a
formula): this means that if a formula uses the same `counter` field
with two different dimensions (i.e. `sum(counter_field) +
median(counter_field)` as `myFormula`) will show up as a single column
(`myFormula`).
The wording of the message mimics the same documentation copy provided
in the ES documentation. Ref:
https://github.com/elastic/elasticsearch/pull/97974
Testing SO:
[export.ndjson.txt](https://github.com/elastic/kibana/files/12304924/export.ndjson.txt)
### Checklist
Delete any items that are not applicable to this PR.
- [x] Any text added follows [EUI's writing
guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses
sentence case text and includes [i18n
support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md)
- [x]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
---------
Co-authored-by: Stratoula Kalafateli
---
.../datasources/form_based/form_based.tsx | 2 +
.../operations/definitions/metrics.tsx | 1 -
.../datasources/form_based/utils.test.tsx | 200 +++++++++++++++++-
.../public/datasources/form_based/utils.tsx | 142 +++++++++++--
4 files changed, 326 insertions(+), 19 deletions(-)
diff --git a/x-pack/plugins/lens/public/datasources/form_based/form_based.tsx b/x-pack/plugins/lens/public/datasources/form_based/form_based.tsx
index f51fe7a65eb14..51ed27f328838 100644
--- a/x-pack/plugins/lens/public/datasources/form_based/form_based.tsx
+++ b/x-pack/plugins/lens/public/datasources/form_based/form_based.tsx
@@ -69,6 +69,7 @@ import {
isColumnInvalid,
cloneLayer,
getNotifiableFeatures,
+ getUnsupportedOperationsWarningMessage,
} from './utils';
import { getUniqueLabelGenerator, isDraggedDataViewField, nonNullable } from '../../utils';
import { hasField, normalizeOperationDataType } from './pure_utils';
@@ -801,6 +802,7 @@ export function getFormBasedDatasource({
core.docLinks,
setState
),
+ ...getUnsupportedOperationsWarningMessage(state, frameDatasourceAPI, core.docLinks),
];
const infoMessages = getNotifiableFeatures(state, frameDatasourceAPI, visualizationInfo);
diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/metrics.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/metrics.tsx
index deb0c19dc4837..2b9d45979b446 100644
--- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/metrics.tsx
+++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/metrics.tsx
@@ -126,7 +126,6 @@ function buildMetricOperation>({
newField &&
supportedTypes.includes(newField.type) &&
newField.aggregatable &&
- isTimeSeriesCompatible(type, newField.timeSeriesMetric) &&
(!newField.aggregationRestrictions || newField.aggregationRestrictions![type])
);
},
diff --git a/x-pack/plugins/lens/public/datasources/form_based/utils.test.tsx b/x-pack/plugins/lens/public/datasources/form_based/utils.test.tsx
index ca7f346033111..f4aa785bd25f2 100644
--- a/x-pack/plugins/lens/public/datasources/form_based/utils.test.tsx
+++ b/x-pack/plugins/lens/public/datasources/form_based/utils.test.tsx
@@ -8,15 +8,20 @@
import React from 'react';
import { shallow } from 'enzyme';
import { createDatatableUtilitiesMock } from '@kbn/data-plugin/common/mocks';
-import { getPrecisionErrorWarningMessages, cloneLayer } from './utils';
+import {
+ getPrecisionErrorWarningMessages,
+ cloneLayer,
+ getUnsupportedOperationsWarningMessage,
+} from './utils';
import type { FormBasedPrivateState, GenericIndexPatternColumn } from './types';
-import type { FramePublicAPI } from '../../types';
+import type { FramePublicAPI, IndexPattern } from '../../types';
import type { DocLinksStart } from '@kbn/core/public';
import { EuiLink } from '@elastic/eui';
import { TermsIndexPatternColumn } from './operations';
import { mountWithIntl } from '@kbn/test-jest-helpers';
import { FormattedMessage } from '@kbn/i18n-react';
import { FormBasedLayer } from './types';
+import { createMockedIndexPatternWithAdditionalFields } from './mocks';
describe('indexpattern_datasource utils', () => {
describe('getPrecisionErrorWarningMessages', () => {
@@ -240,4 +245,195 @@ describe('indexpattern_datasource utils', () => {
).toMatchSnapshot();
});
});
+
+ describe('getUnsupportedOperationsWarningMessage', () => {
+ let docLinks: DocLinksStart;
+ const affectedOperations = [
+ 'sum',
+ 'average',
+ 'percentile',
+ 'percentile_rank',
+ 'count',
+ 'unique_count',
+ 'standard_deviation',
+ ];
+
+ function createColumnsForField(field: string, colOffset: number = 0) {
+ return Object.fromEntries(
+ affectedOperations.map((operationType, i) => [
+ `col_${i + colOffset}`,
+ { operationType, sourceField: field, label: `${operationType} of ${field}` },
+ ])
+ );
+ }
+
+ function createState(fields: string[]) {
+ return {
+ layers: {
+ id: {
+ indexPatternId: '0',
+ columns: Object.assign(
+ {},
+ ...fields.map((field, i) =>
+ createColumnsForField(field, i * affectedOperations.length)
+ )
+ ),
+ },
+ },
+ } as unknown as FormBasedPrivateState;
+ }
+
+ function createFramePublic(indexPattern: IndexPattern): FramePublicAPI {
+ return {
+ dataViews: {
+ indexPatterns: Object.fromEntries([indexPattern].map((dataView, i) => [i, dataView])),
+ },
+ } as unknown as FramePublicAPI;
+ }
+
+ function createFormulaColumns(formulaParts: string[], field: string, colOffset: number = 0) {
+ const fullFormula = formulaParts.map((part) => `${part}(${field})`).join(' + ');
+ // just assume it's a sum of all the parts for testing
+ const rootId = `col-formula${colOffset}`;
+ return Object.fromEntries([
+ [
+ rootId,
+ {
+ operationType: 'formula',
+ label: `Formula: ${fullFormula}`,
+ params: { formula: fullFormula },
+ },
+ ],
+ ...formulaParts.map((part, i) => [
+ `${rootId}X${i}`,
+ { operationType: part, sourceField: field, label: 'Part of formula' },
+ ]),
+ [
+ `${rootId}X${formulaParts.length}`,
+ { operationType: 'math', references: formulaParts.map((_, i) => `${rootId}X${i}`) },
+ ],
+ ]);
+ }
+
+ beforeEach(() => {
+ docLinks = {
+ links: {
+ fleet: {
+ datastreamsTSDSMetrics: 'http://tsdb_metric_doc',
+ },
+ },
+ } as DocLinksStart;
+ });
+
+ it.each([['bytes'], ['bytes_gauge']])(
+ 'should return no warning for non-counter fields: %s',
+ (fieldName: string) => {
+ const warnings = getUnsupportedOperationsWarningMessage(
+ createState([fieldName]),
+ createFramePublic(
+ createMockedIndexPatternWithAdditionalFields([
+ {
+ name: 'bytes_gauge',
+ displayName: 'bytes_gauge',
+ type: 'number',
+ aggregatable: true,
+ searchable: true,
+ timeSeriesMetric: 'gauge',
+ },
+ ])
+ ),
+ docLinks
+ );
+ expect(warnings).toHaveLength(0);
+ }
+ );
+
+ it('should return a warning for a counter field grouped by field', () => {
+ const warnings = getUnsupportedOperationsWarningMessage(
+ createState(['bytes_counter']),
+ createFramePublic(
+ createMockedIndexPatternWithAdditionalFields([
+ {
+ name: 'bytes_counter',
+ displayName: 'bytes_counter',
+ type: 'number',
+ aggregatable: true,
+ searchable: true,
+ timeSeriesMetric: 'counter',
+ },
+ ])
+ ),
+ docLinks
+ );
+ expect(warnings).toHaveLength(1);
+ });
+
+ it('should group multiple warnings by field', () => {
+ const warnings = getUnsupportedOperationsWarningMessage(
+ createState(['bytes_counter', 'bytes_counter2']),
+ createFramePublic(
+ createMockedIndexPatternWithAdditionalFields([
+ {
+ name: 'bytes_counter',
+ displayName: 'bytes_counter',
+ type: 'number',
+ aggregatable: true,
+ searchable: true,
+ timeSeriesMetric: 'counter',
+ },
+ {
+ name: 'bytes_counter2',
+ displayName: 'bytes_counter2',
+ type: 'number',
+ aggregatable: true,
+ searchable: true,
+ timeSeriesMetric: 'counter',
+ },
+ ])
+ ),
+ docLinks
+ );
+ expect(warnings).toHaveLength(2);
+ });
+
+ it('should handle formula reporting only the top visible dimension', () => {
+ const warnings = getUnsupportedOperationsWarningMessage(
+ {
+ layers: {
+ id: {
+ indexPatternId: '0',
+ columns: Object.assign(
+ {},
+ ...['bytes_counter', 'bytes_counter2'].map((field, i) =>
+ createFormulaColumns(affectedOperations, field, i * affectedOperations.length)
+ )
+ ),
+ },
+ },
+ } as unknown as FormBasedPrivateState,
+ createFramePublic(
+ createMockedIndexPatternWithAdditionalFields([
+ {
+ name: 'bytes_counter',
+ displayName: 'bytes_counter',
+ type: 'number',
+ aggregatable: true,
+ searchable: true,
+ timeSeriesMetric: 'counter',
+ },
+ {
+ name: 'bytes_counter2',
+ displayName: 'bytes_counter2',
+ type: 'number',
+ aggregatable: true,
+ searchable: true,
+ timeSeriesMetric: 'counter',
+ },
+ ])
+ ),
+ docLinks
+ );
+ expect(warnings).toHaveLength(2);
+ });
+ });
});
diff --git a/x-pack/plugins/lens/public/datasources/form_based/utils.tsx b/x-pack/plugins/lens/public/datasources/form_based/utils.tsx
index 50c4b0f78e61b..2d6806902bd52 100644
--- a/x-pack/plugins/lens/public/datasources/form_based/utils.tsx
+++ b/x-pack/plugins/lens/public/datasources/form_based/utils.tsx
@@ -14,7 +14,7 @@ import { TimeRange } from '@kbn/es-query';
import { EuiLink, EuiSpacer, EuiText } from '@elastic/eui';
import type { DatatableColumn } from '@kbn/expressions-plugin/common';
-import { groupBy, escape, uniq } from 'lodash';
+import { groupBy, escape, uniq, uniqBy } from 'lodash';
import type { Query } from '@kbn/data-plugin/common';
import { SearchRequest } from '@kbn/data-plugin/common';
@@ -40,16 +40,19 @@ import type { ReferenceBasedIndexPatternColumn } from './operations/definitions/
import {
operationDefinitionMap,
- GenericIndexPatternColumn,
- TermsIndexPatternColumn,
- CountIndexPatternColumn,
+ getReferenceRoot,
updateColumnParam,
updateDefaultLabels,
- RangeIndexPatternColumn,
- FormulaIndexPatternColumn,
- DateHistogramIndexPatternColumn,
- MaxIndexPatternColumn,
- MinIndexPatternColumn,
+ type GenericIndexPatternColumn,
+ type TermsIndexPatternColumn,
+ type CountIndexPatternColumn,
+ type RangeIndexPatternColumn,
+ type FormulaIndexPatternColumn,
+ type DateHistogramIndexPatternColumn,
+ type MaxIndexPatternColumn,
+ type MinIndexPatternColumn,
+ type GenericOperationDefinition,
+ type FieldBasedIndexPatternColumn,
} from './operations';
import { getInvalidFieldMessage, isColumnOfType } from './operations/definitions/helpers';
@@ -338,6 +341,113 @@ export function getShardFailuresWarningMessages(
return [];
}
+export function getUnsupportedOperationsWarningMessage(
+ state: FormBasedPrivateState,
+ { dataViews }: FramePublicAPI,
+ docLinks: DocLinksStart
+) {
+ const warningMessages: UserMessage[] = [];
+ const columnsWithUnsupportedOperations: Array<
+ [FieldBasedIndexPatternColumn, ReferenceBasedIndexPatternColumn | undefined]
+ > = Object.values(state.layers)
+ // filter layers without dataView loaded yet
+ .filter(({ indexPatternId }) => dataViews.indexPatterns[indexPatternId])
+ .flatMap((layer) => {
+ const dataView = dataViews.indexPatterns[layer.indexPatternId];
+ const columnsEntries = Object.entries(layer.columns);
+ return columnsEntries
+ .filter(([_, column]) => {
+ if (!hasField(column)) {
+ return false;
+ }
+ const field = dataView.getFieldByName(column.sourceField);
+ if (!field) {
+ return false;
+ }
+ return (
+ !(
+ operationDefinitionMap[column.operationType] as Extract<
+ GenericOperationDefinition,
+ { input: 'field' }
+ >
+ ).getPossibleOperationForField(field) && field?.timeSeriesMetric === 'counter'
+ );
+ })
+ .map(
+ ([id, fieldColumn]) =>
+ [fieldColumn, layer.columns[getReferenceRoot(layer, id)]] as [
+ FieldBasedIndexPatternColumn,
+ ReferenceBasedIndexPatternColumn | undefined
+ ]
+ );
+ });
+ if (columnsWithUnsupportedOperations.length) {
+ // group the columns by field
+ // then group together columns of a formula/referenced operation who use the same field
+ const columnsGroupedByField = Object.values(
+ groupBy(columnsWithUnsupportedOperations, ([column]) => column.sourceField)
+ ).map((columnsList) => uniqBy(columnsList, ([column, rootColumn]) => rootColumn ?? column));
+
+ for (const columnsGrouped of columnsGroupedByField) {
+ const sourceField = columnsGrouped[0][0].sourceField;
+ warningMessages.push({
+ severity: 'warning',
+ fixableInEditor: false,
+ displayLocations: [{ id: 'toolbar' }, { id: 'embeddableBadge' }],
+ shortMessage: i18n.translate(
+ 'xpack.lens.indexPattern.tsdbErrorWarning.unsupportedCounterOperationErrorWarning.shortMessage',
+ {
+ defaultMessage:
+ 'The result of {count} {count, plural, one {operation} other {operations}} might be meaningless for {field}: {operations}',
+ values: {
+ count: columnsGrouped.length,
+ operations: columnsGrouped
+ .map(([affectedColumn, rootColumn]) => (rootColumn ?? affectedColumn).label)
+ .join(', '),
+ field: sourceField,
+ },
+ }
+ ),
+ longMessage: (
+ <>
+
+ {columnsGrouped.map(([affectedColumn, rootColumn], i) => (
+
+ {(rootColumn ?? affectedColumn).label}
+ {i < columnsGrouped.length - 1 ? ', ' : ''}
+
+ ))}
+ >
+ ),
+ field: sourceField,
+ link: (
+
+
+
+ ),
+ }}
+ />
+ >
+ ),
+ });
+ }
+ }
+ return warningMessages;
+}
+
export function getPrecisionErrorWarningMessages(
datatableUtilities: DatatableUtilitiesService,
state: FormBasedPrivateState,
@@ -349,18 +459,18 @@ export function getPrecisionErrorWarningMessages(
if (state && activeData) {
Object.entries(activeData)
- .reduce(
- (acc, [layerId, { columns }]) => [
- ...acc,
- ...columns.map((column) => ({ layerId, column })),
- ],
- [] as Array<{ layerId: string; column: DatatableColumn }>
- )
+ .reduce((acc, [layerId, { columns }]) => {
+ acc.push(...columns.map((column) => ({ layerId, column })));
+ return acc;
+ }, [] as Array<{ layerId: string; column: DatatableColumn }>)
.forEach(({ layerId, column }) => {
const currentLayer = state.layers[layerId];
const currentColumn = currentLayer?.columns[column.id];
if (currentLayer && currentColumn && datatableUtilities.hasPrecisionError(column)) {
const indexPattern = dataViews.indexPatterns[currentLayer.indexPatternId];
+ if (!indexPattern) {
+ return;
+ }
// currentColumnIsTerms is mostly a type guard. If there's a precision error,
// we already know that we're dealing with a terms-based operation (at least for now).
const currentColumnIsTerms = isColumnOfType(
From a98dfa1c893ff4c8f39cda7fb3250809089e3124 Mon Sep 17 00:00:00 2001
From: Marco Liberati
Date: Fri, 11 Aug 2023 11:52:31 +0200
Subject: [PATCH 05/46] [Lens] Align decoration color with text color for layer
actions (#163630)
## Summary
Fix #163390
### Checklist
Delete any items that are not applicable to this PR.
- [ ] Any text added follows [EUI's writing
guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses
sentence case text and includes [i18n
support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md)
- [ ]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [ ] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
- [ ] Any UI touched in this PR is usable by keyboard only (learn more
about [keyboard accessibility](https://webaim.org/techniques/keyboard/))
- [ ] Any UI touched in this PR does not create any new axe failures
(run axe in browser:
[FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/),
[Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US))
- [ ] If a plugin configuration key changed, check if it needs to be
allowlisted in the cloud and added to the [docker
list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)
- [ ] This renders correctly on smaller devices using a responsive
layout. (You can test this [in your
browser](https://www.browserstack.com/guide/responsive-testing-on-local-server))
- [ ] This was checked for [cross-browser
compatibility](https://www.elastic.co/support/matrix#matrix_browsers)
### Risk Matrix
Delete this section if it is not applicable to this PR.
Before closing this PR, invite QA, stakeholders, and other developers to
identify risks that should be tested prior to the change/feature
release.
When forming the risk matrix, consider some of the following examples
and how they may potentially impact the change:
| Risk | Probability | Severity | Mitigation/Notes |
|---------------------------|-------------|----------|-------------------------|
| Multiple Spaces—unexpected behavior in non-default Kibana Space.
| Low | High | Integration tests will verify that all features are still
supported in non-default Kibana Space and when user switches between
spaces. |
| Multiple nodes—Elasticsearch polling might have race conditions
when multiple Kibana nodes are polling for the same tasks. | High | Low
| Tasks are idempotent, so executing them multiple times will not result
in logical error, but will degrade performance. To test for this case we
add plenty of unit tests around this logic and document manual testing
procedure. |
| Code should gracefully handle cases when feature X or plugin Y are
disabled. | Medium | High | Unit tests will verify that any feature flag
or plugin combination still results in our service operational. |
| [See more potential risk
examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) |
### For maintainers
- [ ] This was checked for breaking API changes and was [labeled
appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
---
.../editor_frame/config_panel/layer_actions/layer_actions.tsx | 3 +++
1 file changed, 3 insertions(+)
diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_actions/layer_actions.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_actions/layer_actions.tsx
index 58ec4bd9ff26a..6c0ebc453c614 100644
--- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_actions/layer_actions.tsx
+++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_actions/layer_actions.tsx
@@ -145,6 +145,9 @@ const InContextMenuActions = (props: LayerActionsProps) => {
? {
css: css`
color: ${euiTheme.colors[i.color]};
+ &:hover {
+ text-decoration-color: ${euiTheme.colors[i.color]} !important;
+ }
`,
size: 's', // need to be explicit here as css prop will disable the default small size
}
From 1f79ff4f1cf3b24b7aee453c61b2dd33f0f601ac Mon Sep 17 00:00:00 2001
From: Thom Heymann <190132+thomheymann@users.noreply.github.com>
Date: Fri, 11 Aug 2023 12:14:45 +0100
Subject: [PATCH 06/46] Document interactive setup (#163619)
## Summary
Add instruction for developer on how to run interactive setup locally
---------
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
---
docs/developer/plugin-list.asciidoc | 2 +-
src/plugins/interactive_setup/README.md | 44 +++++++++++++++++++++++--
2 files changed, 43 insertions(+), 3 deletions(-)
diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc
index 7cad590c7f52c..923496d123682 100644
--- a/docs/developer/plugin-list.asciidoc
+++ b/docs/developer/plugin-list.asciidoc
@@ -215,7 +215,7 @@ in Kibana, e.g. visualizations. It has the form of a flyout panel.
|{kib-repo}blob/{branch}/src/plugins/interactive_setup/README.md[interactiveSetup]
-|The plugin provides UI and APIs for the interactive setup mode.
+|This plugin provides UI and APIs for interactive setup mode a.k.a "enrollment flow".
|{kib-repo}blob/{branch}/src/plugins/kibana_overview/README.md[kibanaOverview]
diff --git a/src/plugins/interactive_setup/README.md b/src/plugins/interactive_setup/README.md
index 9fd43eb0445b6..1c4d9d56771c7 100644
--- a/src/plugins/interactive_setup/README.md
+++ b/src/plugins/interactive_setup/README.md
@@ -1,3 +1,43 @@
-# `interactiveSetup` plugin
+# Interactive Setup Plugin
-The plugin provides UI and APIs for the interactive setup mode.
+This plugin provides UI and APIs for interactive setup mode a.k.a "enrollment flow".
+
+## How to run interactive setup locally
+
+Kibana does not start interactive setup mode if it detects that an Elasticsearch connection has already been configured. This is always the case when running `yarn start` so in order to trigger interactive setup we need to run Elasticsearch manually and pass a special command line flag to the Kibana start command.
+
+1. Start a clean copy of Elasticsearch from inside your Kibana working directory:
+
+ ```
+ cd /.es/cache
+ tar -xzf elasticsearch-8.10.0-SNAPSHOT-darwin-aarch64.tar.gz
+ cd ./elasticsearch-8.10.0-SNAPSHOT
+ ./bin/elasticsearch
+ ```
+
+ You should see the enrollment token get logged:
+
+ ```
+ Elasticsearch security features have been automatically configured!
+
+ • Copy the following enrollment token and paste it into Kibana in your browser:
+ eyJ2ZXIiOiI4LjEwLjAiLCJhZHIiOlsiMTkyLjE2OC4xLjIxMTo5MjAwIl0sImZnciI6ImZiYWZjOTgxODM0MjAwNzQ0M2ZhMzNmNTQ2N2QzMTM0YTk1NzU2NjEwOTcxNmJmMjdlYWViZWNlYTE3NmM3MTkiLCJrZXkiOiJxdVVQallrQkhOTkFxOVBqNEY0ejpZUkVMaFR5ZlNlZTZGZW9PQVZwaDRnIn0=
+ ```
+
+2. Start Kibana without dev credentials and config:
+
+ ```
+ yarn start --no-dev-credentials --no-dev-config
+ ```
+
+ You should see the magic link get logged:
+
+ ```
+ i Kibana has not been configured.
+
+ Go to http://localhost:5601/tcu/?code=651822 to get started.
+ ```
+
+3. Open the link and copy the enrollment token from Elasticsearch when prompted to complete setup.
+
+Note: If you want to go through the enrollment flow again you will need to clear all Elasticsearch settings (`elasticsearch.*`) from your `kibana.yml` file and trash your Elasticsearch folder before starting with Step 1.
From d5c4f461b5e871e873bbc97cd011b178826f130a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?=
Date: Fri, 11 Aug 2023 13:19:55 +0200
Subject: [PATCH 07/46] [Flaky Test #111821] Mock `moment` to avoid midnight TZ
issues (#163157)
---
.../integration_tests/daily_rollups.test.ts | 32 ++++++++++---------
1 file changed, 17 insertions(+), 15 deletions(-)
diff --git a/src/plugins/kibana_usage_collection/server/collectors/event_loop_delays/rollups/integration_tests/daily_rollups.test.ts b/src/plugins/kibana_usage_collection/server/collectors/event_loop_delays/rollups/integration_tests/daily_rollups.test.ts
index 32ce4ed198038..6014c3b3acf4c 100644
--- a/src/plugins/kibana_usage_collection/server/collectors/event_loop_delays/rollups/integration_tests/daily_rollups.test.ts
+++ b/src/plugins/kibana_usage_collection/server/collectors/event_loop_delays/rollups/integration_tests/daily_rollups.test.ts
@@ -6,6 +6,7 @@
* Side Public License, v 1.
*/
+import moment, { type MomentInput } from 'moment';
import type { Logger, ISavedObjectsRepository, SavedObject } from '@kbn/core/server';
import {
type TestElasticsearchUtils,
@@ -13,7 +14,7 @@ import {
createTestServers,
createRootWithCorePlugins,
} from '@kbn/core-test-helpers-kbn-server';
-import { rollDailyData } from '../daily';
+
import { metricsServiceMock } from '@kbn/core/server/mocks';
import {
@@ -21,10 +22,21 @@ import {
serializeSavedObjectId,
EventLoopDelaysDaily,
} from '../../saved_objects';
-import moment from 'moment';
+import { rollDailyData } from '../daily';
const eventLoopDelaysMonitor = metricsServiceMock.createEventLoopDelaysMonitor();
+/*
+ * Mocking the constructor of moment, so we can control the time of the day.
+ * This is to avoid flaky tests when starting to run before midnight and ending the test after midnight
+ * because the logic might remove one extra document since we moved to the next day.
+ */
+jest.doMock('moment', () => {
+ const mockedMoment = (date?: MomentInput) => moment(date ?? '2023-07-04T10:00:00.000Z');
+ Object.setPrototypeOf(mockedMoment, moment); // inherit the prototype of `moment` so it has all the same methods.
+ return mockedMoment;
+});
+
function createRawObject(date: moment.MomentInput): SavedObject {
const pid = Math.round(Math.random() * 10000);
const instanceUuid = 'mock_instance';
@@ -45,8 +57,8 @@ function createRawObject(date: moment.MomentInput): SavedObject {
+describe(`daily rollups integration test`, () => {
let esServer: TestElasticsearchUtils;
let root: TestKibanaUtils['root'];
let internalRepository: ISavedObjectsRepository;
@@ -82,15 +93,6 @@ describe.skip(`daily rollups integration test`, () => {
logger = root.logger.get('test daily rollups');
internalRepository = start.savedObjects.createInternalRepository([SAVED_OBJECTS_DAILY_TYPE]);
- // If we are less than 1 second away from midnight, let's wait 1 second before creating the docs.
- // Otherwise, we may receive 1 document less than the expected ones.
- if (moment().endOf('day').diff(moment(), 's', true) < 1) {
- logger.info(
- 'Delaying the creation of the docs 1s, just in case we create them before midnight and run the tests on the following day.'
- );
- await new Promise((resolve) => setTimeout(resolve, 1000));
- }
-
// Create the docs now
const rawDailyDocs = createRawEventLoopDelaysDailyDocs();
rawEventLoopDelaysDaily = rawDailyDocs.rawEventLoopDelaysDaily;
From 26e5c20238376bbff6136cb9a20b83c004046bcd Mon Sep 17 00:00:00 2001
From: Maxim Palenov
Date: Fri, 11 Aug 2023 14:05:45 +0200
Subject: [PATCH 08/46] [Security Solution] Re-enable fixed rule snoozing
Cypress test (#160037)
**Addresses:** https://github.com/elastic/kibana/issues/159349
## Summary
This PR fixes and re-enables rule snoozing Cypress test `Rule editing page / actions tab - adds an action to a snoozed rule`.
## Details
Basically the test wasn't flaky it just failed on the `main` branch and was skipped. The cause lays in interlacing [Rule snooze tests PR](https://github.com/elastic/kibana/pull/158195) with [Rule Editing page refactoring PR](https://github.com/elastic/kibana/pull/157749). Two PRs were merged independently to the `main` branch (while the tests PR was merged the last) so combining them lead to a test failure while each one separately didn't cause any problems.
### The root cause
The root cause is in a combination of factors.
[useForm](https://github.com/elastic/kibana/blob/main/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/use_form.ts#L33) hook has a flaw it can't update its state when new `defaultValue` comes in. The same issue also in [useField](https://github.com/elastic/kibana/blob/main/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/use_field.ts#L77) hook. Rule Editing page fetched a fresh rule's data every time it's rendered via [useRule](https://github.com/elastic/kibana/blob/main/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx#L581). As `useRule` hook is based on `React Query` it returns stale data during the first render while firing an HTTP request for the fresh data. Obviously the problem happens if the stale data is passed to `useForm` hook as `defaultValue` and when fresh data is fetched and passed again to `useForm` hook the latter just ignores it.
Staying longer on the Rule Details page helps to avoid the problem as fetched rule's data is cached and returned as stale data on the Rule Editing page after transition. As stale and fresh data are the same the test would pass. Anyway this behaviour can be reproduced in prod with a slow internet connection.
### What was done to fix the problem?
Functionality has been added to update the cached rule's data (React Query cache) upon mutation successful update rule mutation. The mutation if fired by pressing "Save changes" button on the Rule Editing page. It is possible as update rule endpoint returns an updated rule in its response.
Along the way it turned out update rule endpoint's and read rule endpoint's responses weren't properly typed so it lead to types mismatch. To fix it `updateRule`'s and `UseMutationOptions`'s return types were changed to `Rule` instead of `RuleResponse`.
### Misc
Along the way it turned out `cy.get(RULE_INDICES).should('be.visible');` isn't required anymore to access rule actions form.
---
.../rule_actions/snoozing/rule_snoozing.cy.ts | 6 +----
.../rule_management/api/api.ts | 14 +++++++++--
.../api/hooks/use_fetch_rule_by_id_query.ts | 24 +++++++++++++++++++
.../api/hooks/use_update_rule_mutation.ts | 23 +++++++++---------
4 files changed, 49 insertions(+), 18 deletions(-)
diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_response/rule_management/rule_actions/snoozing/rule_snoozing.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detection_response/rule_management/rule_actions/snoozing/rule_snoozing.cy.ts
index 08bddea26288a..b3939ff3c7b27 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/detection_response/rule_management/rule_actions/snoozing/rule_snoozing.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/detection_response/rule_management/rule_actions/snoozing/rule_snoozing.cy.ts
@@ -35,7 +35,6 @@ import { duplicateFirstRule, importRules } from '../../../../../tasks/alerts_det
import { goToActionsStepTab } from '../../../../../tasks/create_new_rule';
import { goToRuleEditSettings } from '../../../../../tasks/rule_details';
import { actionFormSelector } from '../../../../../screens/common/rule_actions';
-import { RULE_INDICES } from '../../../../../screens/create_new_rule';
import { addEmailConnectorAndRuleAction } from '../../../../../tasks/common/rule_actions';
import { saveEditedRule } from '../../../../../tasks/edit_rule';
import { DISABLED_SNOOZE_BADGE } from '../../../../../screens/rule_snoozing';
@@ -169,8 +168,7 @@ describe('rule snoozing', () => {
});
});
- // SKIPPED: https://github.com/elastic/kibana/issues/159349
- describe.skip('Rule editing page / actions tab', () => {
+ describe('Rule editing page / actions tab', () => {
beforeEach(() => {
deleteConnectors();
});
@@ -178,8 +176,6 @@ describe('rule snoozing', () => {
it('adds an action to a snoozed rule', () => {
createSnoozedRule(getNewRule({ name: 'Snoozed rule' })).then(({ body: rule }) => {
visitWithoutDateRange(ruleEditUrl(rule.id));
- // Wait for rule data being loaded
- cy.get(RULE_INDICES).should('be.visible');
goToActionsStepTab();
addEmailConnectorAndRuleAction('abc@example.com', 'Test action');
diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.ts
index d62114881adad..27ce67f23a978 100644
--- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.ts
+++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.ts
@@ -104,10 +104,15 @@ export const createRule = async ({ rule, signal }: CreateRulesProps): Promise An updated rule
+ *
+ * In fact this function should return Promise but it'd require massive refactoring.
+ * It should be addressed as a part of OpenAPI schema adoption.
+ *
* @throws An error if response is not OK
*/
-export const updateRule = async ({ rule, signal }: UpdateRulesProps): Promise =>
- KibanaServices.get().http.fetch(DETECTION_ENGINE_RULES_URL, {
+export const updateRule = async ({ rule, signal }: UpdateRulesProps): Promise =>
+ KibanaServices.get().http.fetch(DETECTION_ENGINE_RULES_URL, {
method: 'PUT',
body: JSON.stringify(rule),
signal,
@@ -198,6 +203,11 @@ export const fetchRules = async ({
* @param id Rule ID's (not rule_id)
* @param signal to cancel request
*
+ * @returns Promise
+ *
+ * In fact this function should return Promise but it'd require massive refactoring.
+ * It should be addressed as a part of OpenAPI schema adoption.
+ *
* @throws An error if response is not OK
*/
export const fetchRuleById = async ({ id, signal }: FetchRuleProps): Promise =>
diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_rule_by_id_query.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_rule_by_id_query.ts
index 4c8ee37e3e211..197b97effa1f8 100644
--- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_rule_by_id_query.ts
+++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_rule_by_id_query.ts
@@ -59,3 +59,27 @@ export const useInvalidateFetchRuleByIdQuery = () => {
});
}, [queryClient]);
};
+
+/**
+ * We should use this hook to update the rules cache when modifying a rule.
+ * Use it with the new rule data after operations like rule edit.
+ *
+ * @returns A rules cache update callback
+ */
+export const useUpdateRuleByIdCache = () => {
+ const queryClient = useQueryClient();
+ /**
+ * Use this method to update rules data cached by react-query.
+ * It is useful when we receive new rules back from a mutation query (bulk edit, etc.);
+ * we can merge those rules with the existing cache to avoid an extra roundtrip to re-fetch updated rules.
+ */
+ return useCallback(
+ (updatedRuleResponse: Rule) => {
+ queryClient.setQueryData['data']>(
+ [...FIND_ONE_RULE_QUERY_KEY, updatedRuleResponse.id],
+ transformInput(updatedRuleResponse)
+ );
+ },
+ [queryClient]
+ );
+};
diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_update_rule_mutation.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_update_rule_mutation.ts
index 53103287046be..932c50ff2a46f 100644
--- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_update_rule_mutation.ts
+++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_update_rule_mutation.ts
@@ -6,42 +6,43 @@
*/
import type { UseMutationOptions } from '@tanstack/react-query';
import { useMutation } from '@tanstack/react-query';
-import type {
- RuleResponse,
- RuleUpdateProps,
-} from '../../../../../common/api/detection_engine/model/rule_schema';
+import type { RuleUpdateProps } from '../../../../../common/api/detection_engine/model/rule_schema';
import { transformOutput } from '../../../../detections/containers/detection_engine/rules/transforms';
import { DETECTION_ENGINE_RULES_URL } from '../../../../../common/constants';
import { updateRule } from '../api';
import { useInvalidateFindRulesQuery } from './use_find_rules_query';
-import { useInvalidateFetchRuleByIdQuery } from './use_fetch_rule_by_id_query';
+import { useUpdateRuleByIdCache } from './use_fetch_rule_by_id_query';
import { useInvalidateFetchRuleManagementFiltersQuery } from './use_fetch_rule_management_filters_query';
import { useInvalidateFetchCoverageOverviewQuery } from './use_fetch_coverage_overview';
+import type { Rule } from '../../logic/types';
export const UPDATE_RULE_MUTATION_KEY = ['PUT', DETECTION_ENGINE_RULES_URL];
export const useUpdateRuleMutation = (
- options?: UseMutationOptions
+ options?: UseMutationOptions
) => {
const invalidateFindRulesQuery = useInvalidateFindRulesQuery();
const invalidateFetchRuleManagementFilters = useInvalidateFetchRuleManagementFiltersQuery();
- const invalidateFetchRuleByIdQuery = useInvalidateFetchRuleByIdQuery();
const invalidateFetchCoverageOverviewQuery = useInvalidateFetchCoverageOverviewQuery();
+ const updateRuleCache = useUpdateRuleByIdCache();
- return useMutation(
+ return useMutation(
(rule: RuleUpdateProps) => updateRule({ rule: transformOutput(rule) }),
{
...options,
mutationKey: UPDATE_RULE_MUTATION_KEY,
onSettled: (...args) => {
invalidateFindRulesQuery();
- invalidateFetchRuleByIdQuery();
invalidateFetchRuleManagementFilters();
invalidateFetchCoverageOverviewQuery();
- if (options?.onSettled) {
- options.onSettled(...args);
+ const [response] = args;
+
+ if (response) {
+ updateRuleCache(response);
}
+
+ options?.onSettled?.(...args);
},
}
);
From 589ef228fb9c2525a49d6abc5db64eb98b2c381e Mon Sep 17 00:00:00 2001
From: Maxim Palenov
Date: Fri, 11 Aug 2023 14:07:35 +0200
Subject: [PATCH 09/46] [Security Solution] Unskip rules table auto-refresh
Cypress tests (#163451)
**Addresses:** https://github.com/elastic/kibana/issues/154694
## Summary
This PR unskips rules table auto-refresh tests.
## Details
Rules table auto-refresh Cypress tests were outdated so it was hard to determine the original flakiness reason. To make it working the following has been done
- `mockGlobalClock()` moved above `visit()` to mock the time before visiting the page. It didn't look like working so the test had to wait for 60 seconds (our refresh interval)
- removed unnecessary waiting `waitForRulesTableToBeLoaded()` as the test should work without it
- removed `setRowsPerPageTo(5)` as the test doesn't look related to the page size
- `AutoRefreshButtonComponent ` was refactored in attempt to fix popover closing related flakiness but it doesn't seem to help but the refactoring looks improving readability so leaving as a part of this PR
- auto-refresh popover's behavior has been changed. The trigger button gets disabled if there is a rule selected. Clicking the disabled button won't make the auto-refresh popover to appear so this part was changed.
### Encountered issues
- `EuiPopover` should close by clicking the trigger button, clicking outside or pressing `Esc` button. The latter two cause flakiness for some reason. I spent quite some time to investigate the reason but without success. It looks like there is a race condition related to [EuiFocusTrap](https://github.com/elastic/eui/blob/main/src/components/focus_trap/focus_trap.tsx) but it doesn't look to be an issue outside Cypress.
- `waitForRulesTableToBeLoaded()` basically does nothing after changes in the rules table. Looking at tis contents
```ts
export const waitForRulesTableToBeLoaded = () => {
// Wait up to 5 minutes for the rules to load as in CI containers this can be very slow
cy.get(RULES_TABLE_INITIAL_LOADING_INDICATOR, { timeout: 300000 }).should('not.exist');
};
```
reveals that `RULES_TABLE_INITIAL_LOADING_INDICATOR` defined as `[data-test-subj="initialLoadingPanelAllRulesTable"]` doesn't exist anymore in our codebase so this function instantly returns. The selector will be fixed in a separate PR.
- invoking `mockGlobalClock()` during the test leads to appearing a lot of `Executing a cancelled action` error messages.
### Flaky test runner
[50 runs succeeded](https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/2842)
---
.../rules_table_auto_refresh.cy.ts | 76 ++++++++-----------
.../cypress/screens/alerts_detection_rules.ts | 2 +-
.../cypress/tasks/alerts_detection_rules.ts | 42 ++++++----
.../auto_refresh_button.tsx | 56 +++++++-------
4 files changed, 88 insertions(+), 88 deletions(-)
diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_response/rule_management/rules_table/rules_table_auto_refresh.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detection_response/rule_management/rules_table/rules_table_auto_refresh.cy.ts
index 7304972a65790..bd3363572915d 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/detection_response/rule_management/rules_table/rules_table_auto_refresh.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/detection_response/rule_management/rules_table/rules_table_auto_refresh.cy.ts
@@ -8,20 +8,19 @@
import {
RULE_CHECKBOX,
REFRESH_RULES_STATUS,
- REFRESH_SETTINGS_SWITCH,
- REFRESH_SETTINGS_SELECTION_NOTE,
+ RULES_TABLE_AUTOREFRESH_INDICATOR,
+ RULES_MANAGEMENT_TABLE,
} from '../../../../screens/alerts_detection_rules';
import {
- checkAutoRefresh,
- waitForRulesTableToBeLoaded,
selectAllRules,
- openRefreshSettingsPopover,
clearAllRuleSelection,
selectNumberOfRules,
mockGlobalClock,
disableAutoRefresh,
- checkAutoRefreshIsDisabled,
- checkAutoRefreshIsEnabled,
+ expectAutoRefreshIsDisabled,
+ expectAutoRefreshIsEnabled,
+ expectAutoRefreshIsDeactivated,
+ expectNumberOfRules,
} from '../../../../tasks/alerts_detection_rules';
import { login, visit, visitWithoutDateRange } from '../../../../tasks/login';
@@ -29,16 +28,16 @@ import { DETECTIONS_RULE_MANAGEMENT_URL } from '../../../../urls/navigation';
import { createRule } from '../../../../tasks/api_calls/rules';
import { cleanKibana } from '../../../../tasks/common';
import { getNewRule } from '../../../../objects/rule';
-import { setRowsPerPageTo } from '../../../../tasks/table_pagination';
const DEFAULT_RULE_REFRESH_INTERVAL_VALUE = 60000;
+const NUM_OF_TEST_RULES = 6;
-// TODO: See https://github.com/elastic/kibana/issues/154694
-describe.skip('Rules table: auto-refresh', () => {
+describe('Rules table: auto-refresh', () => {
before(() => {
cleanKibana();
login();
- for (let i = 1; i < 7; i += 1) {
+
+ for (let i = 1; i <= NUM_OF_TEST_RULES; ++i) {
createRule(getNewRule({ name: `Test rule ${i}`, rule_id: `${i}` }));
}
});
@@ -48,31 +47,31 @@ describe.skip('Rules table: auto-refresh', () => {
});
it('Auto refreshes rules', () => {
+ mockGlobalClock();
visitWithoutDateRange(DETECTIONS_RULE_MANAGEMENT_URL);
- waitForRulesTableToBeLoaded();
-
- // ensure rules have rendered. As there is no user interaction in this test,
- // rules were not rendered before test completes
- cy.get(RULE_CHECKBOX).should('have.length', 6);
+ expectNumberOfRules(RULES_MANAGEMENT_TABLE, NUM_OF_TEST_RULES);
// // mock 1 minute passing to make sure refresh is conducted
- mockGlobalClock();
- checkAutoRefresh(DEFAULT_RULE_REFRESH_INTERVAL_VALUE, 'be.visible');
+ cy.get(RULES_TABLE_AUTOREFRESH_INDICATOR).should('not.exist');
+ cy.tick(DEFAULT_RULE_REFRESH_INTERVAL_VALUE);
+ cy.get(RULES_TABLE_AUTOREFRESH_INDICATOR).should('be.visible');
cy.contains(REFRESH_RULES_STATUS, 'Updated now');
});
it('should prevent table from rules refetch if any rule selected', () => {
+ mockGlobalClock();
visitWithoutDateRange(DETECTIONS_RULE_MANAGEMENT_URL);
- waitForRulesTableToBeLoaded();
+ expectNumberOfRules(RULES_MANAGEMENT_TABLE, NUM_OF_TEST_RULES);
selectNumberOfRules(1);
// mock 1 minute passing to make sure refresh is not conducted
- mockGlobalClock();
- checkAutoRefresh(DEFAULT_RULE_REFRESH_INTERVAL_VALUE, 'not.exist');
+ cy.get(RULES_TABLE_AUTOREFRESH_INDICATOR).should('not.exist');
+ cy.tick(DEFAULT_RULE_REFRESH_INTERVAL_VALUE);
+ cy.get(RULES_TABLE_AUTOREFRESH_INDICATOR).should('not.exist');
// ensure rule is still selected
cy.get(RULE_CHECKBOX).first().should('be.checked');
@@ -82,50 +81,37 @@ describe.skip('Rules table: auto-refresh', () => {
it('should disable auto refresh when any rule selected and enable it after rules unselected', () => {
visit(DETECTIONS_RULE_MANAGEMENT_URL);
- waitForRulesTableToBeLoaded();
- setRowsPerPageTo(5);
+
+ expectNumberOfRules(RULES_MANAGEMENT_TABLE, NUM_OF_TEST_RULES);
// check refresh settings if it's enabled before selecting
- openRefreshSettingsPopover();
- checkAutoRefreshIsEnabled();
+ expectAutoRefreshIsEnabled();
selectAllRules();
- // auto refresh should be disabled after rules selected
- openRefreshSettingsPopover();
- checkAutoRefreshIsDisabled();
-
- // if any rule selected, refresh switch should be disabled and help note to users should displayed
- cy.get(REFRESH_SETTINGS_SWITCH).should('be.disabled');
- cy.contains(
- REFRESH_SETTINGS_SELECTION_NOTE,
- 'Note: Refresh is disabled while there is an active selection.'
- );
+ // auto refresh should be deactivated (which means disabled without an ability to enable it) after rules selected
+ expectAutoRefreshIsDeactivated();
clearAllRuleSelection();
- // after all rules unselected, auto refresh should renew
- openRefreshSettingsPopover();
- checkAutoRefreshIsEnabled();
+ // after all rules unselected, auto refresh should be reset to its previous state
+ expectAutoRefreshIsEnabled();
});
it('should not enable auto refresh after rules were unselected if auto refresh was disabled', () => {
visit(DETECTIONS_RULE_MANAGEMENT_URL);
- waitForRulesTableToBeLoaded();
- setRowsPerPageTo(5);
- openRefreshSettingsPopover();
+ expectNumberOfRules(RULES_MANAGEMENT_TABLE, NUM_OF_TEST_RULES);
+
disableAutoRefresh();
selectAllRules();
- openRefreshSettingsPopover();
- checkAutoRefreshIsDisabled();
+ expectAutoRefreshIsDeactivated();
clearAllRuleSelection();
// after all rules unselected, auto refresh should still be disabled
- openRefreshSettingsPopover();
- checkAutoRefreshIsDisabled();
+ expectAutoRefreshIsDisabled();
});
});
diff --git a/x-pack/plugins/security_solution/cypress/screens/alerts_detection_rules.ts b/x-pack/plugins/security_solution/cypress/screens/alerts_detection_rules.ts
index 40d16dd088af8..ab5a2697d4be4 100644
--- a/x-pack/plugins/security_solution/cypress/screens/alerts_detection_rules.ts
+++ b/x-pack/plugins/security_solution/cypress/screens/alerts_detection_rules.ts
@@ -158,7 +158,7 @@ export const RULES_SELECTED_TAG = '.euiSelectableListItem[aria-checked="true"]';
export const SELECTED_RULES_NUMBER_LABEL = '[data-test-subj="selectedRules"]';
-export const REFRESH_SETTINGS_POPOVER = '[data-test-subj="refreshSettings-popover"]';
+export const AUTO_REFRESH_POPOVER_TRIGGER_BUTTON = '[data-test-subj="autoRefreshButton"]';
export const REFRESH_RULES_TABLE_BUTTON = '[data-test-subj="refreshRulesAction-linkIcon"]';
diff --git a/x-pack/plugins/security_solution/cypress/tasks/alerts_detection_rules.ts b/x-pack/plugins/security_solution/cypress/tasks/alerts_detection_rules.ts
index d73a67cd6c271..221c3d6a61501 100644
--- a/x-pack/plugins/security_solution/cypress/tasks/alerts_detection_rules.ts
+++ b/x-pack/plugins/security_solution/cypress/tasks/alerts_detection_rules.ts
@@ -12,7 +12,6 @@ import {
DELETE_RULE_ACTION_BTN,
RULES_SELECTED_TAG,
RULES_TABLE_INITIAL_LOADING_INDICATOR,
- RULES_TABLE_AUTOREFRESH_INDICATOR,
RULE_CHECKBOX,
RULE_NAME,
RULE_SWITCH,
@@ -37,7 +36,6 @@ import {
RULES_TAGS_POPOVER_WRAPPER,
INTEGRATIONS_POPOVER,
SELECTED_RULES_NUMBER_LABEL,
- REFRESH_SETTINGS_POPOVER,
REFRESH_SETTINGS_SWITCH,
ELASTIC_RULES_BTN,
TOASTER_ERROR_BTN,
@@ -57,6 +55,7 @@ import {
TOASTER_CLOSE_ICON,
ADD_ELASTIC_RULES_EMPTY_PROMPT_BTN,
CONFIRM_DELETE_RULE_BTN,
+ AUTO_REFRESH_POPOVER_TRIGGER_BUTTON,
} from '../screens/alerts_detection_rules';
import type { RULES_MONITORING_TABLE } from '../screens/alerts_detection_rules';
import { EUI_CHECKBOX } from '../screens/common/controls';
@@ -305,12 +304,6 @@ export const waitForRuleToUpdate = () => {
cy.get(RULE_SWITCH_LOADER, { timeout: 300000 }).should('not.exist');
};
-export const checkAutoRefresh = (ms: number, condition: string) => {
- cy.get(RULES_TABLE_AUTOREFRESH_INDICATOR).should('not.exist');
- cy.tick(ms);
- cy.get(RULES_TABLE_AUTOREFRESH_INDICATOR).should(condition);
-};
-
export const importRules = (rulesFile: string) => {
cy.get(RULE_IMPORT_MODAL).click();
cy.get(INPUT_FILE).click({ force: true });
@@ -459,22 +452,45 @@ export const testMultipleSelectedRulesLabel = (rulesCount: number) => {
cy.get(SELECTED_RULES_NUMBER_LABEL).should('have.text', `Selected ${rulesCount} rules`);
};
-export const openRefreshSettingsPopover = () => {
- cy.get(REFRESH_SETTINGS_POPOVER).click();
+const openRefreshSettingsPopover = () => {
+ cy.get(REFRESH_SETTINGS_SWITCH).should('not.exist');
+ cy.get(AUTO_REFRESH_POPOVER_TRIGGER_BUTTON).click();
cy.get(REFRESH_SETTINGS_SWITCH).should('be.visible');
};
-export const checkAutoRefreshIsDisabled = () => {
+const closeRefreshSettingsPopover = () => {
+ cy.get(REFRESH_SETTINGS_SWITCH).should('be.visible');
+ cy.get(AUTO_REFRESH_POPOVER_TRIGGER_BUTTON).click();
+ cy.get(REFRESH_SETTINGS_SWITCH).should('not.exist');
+};
+
+export const expectAutoRefreshIsDisabled = () => {
+ cy.get(AUTO_REFRESH_POPOVER_TRIGGER_BUTTON).should('be.enabled');
+ cy.get(AUTO_REFRESH_POPOVER_TRIGGER_BUTTON).should('have.text', 'Off');
+ openRefreshSettingsPopover();
cy.get(REFRESH_SETTINGS_SWITCH).should('have.attr', 'aria-checked', 'false');
+ closeRefreshSettingsPopover();
};
-export const checkAutoRefreshIsEnabled = () => {
+export const expectAutoRefreshIsEnabled = () => {
+ cy.get(AUTO_REFRESH_POPOVER_TRIGGER_BUTTON).should('be.enabled');
+ cy.get(AUTO_REFRESH_POPOVER_TRIGGER_BUTTON).should('have.text', 'On');
+ openRefreshSettingsPopover();
cy.get(REFRESH_SETTINGS_SWITCH).should('have.attr', 'aria-checked', 'true');
+ closeRefreshSettingsPopover();
+};
+
+// Expects the auto refresh to be deactivated which means it's disabled without an ability to enable it
+// so it's even impossible to open the popover
+export const expectAutoRefreshIsDeactivated = () => {
+ cy.get(AUTO_REFRESH_POPOVER_TRIGGER_BUTTON).should('be.disabled');
+ cy.get(AUTO_REFRESH_POPOVER_TRIGGER_BUTTON).should('have.text', 'Off');
};
export const disableAutoRefresh = () => {
+ openRefreshSettingsPopover();
cy.get(REFRESH_SETTINGS_SWITCH).click();
- checkAutoRefreshIsDisabled();
+ expectAutoRefreshIsDisabled();
};
export const mockGlobalClock = () => {
diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/auto_refresh_button/auto_refresh_button.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/auto_refresh_button/auto_refresh_button.tsx
index 83499efd323c8..560be75abee26 100644
--- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/auto_refresh_button/auto_refresh_button.tsx
+++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/auto_refresh_button/auto_refresh_button.tsx
@@ -41,9 +41,14 @@ const AutoRefreshButtonComponent = ({
setIsRefreshOn,
}: AutoRefreshButtonProps) => {
const [isPopoverOpen, setIsPopoverOpen] = useState(false);
+ const closePopover = useCallback(() => setIsPopoverOpen(false), [setIsPopoverOpen]);
+ const togglePopover = useCallback(
+ () => setIsPopoverOpen((prevState) => !prevState),
+ [setIsPopoverOpen]
+ );
const handleAutoRefreshSwitch = useCallback(
- (closePopover: () => void) => (e: EuiSwitchEvent) => {
+ (e: EuiSwitchEvent) => {
const refreshOn = e.target.checked;
if (refreshOn) {
reFetchRules();
@@ -51,18 +56,35 @@ const AutoRefreshButtonComponent = ({
setIsRefreshOn(refreshOn);
closePopover();
},
- [reFetchRules, setIsRefreshOn]
+ [reFetchRules, setIsRefreshOn, closePopover]
);
- const handleGetRefreshSettingsPopoverContent = useCallback(
- (closePopover: () => void) => (
+ return (
+
+ {isRefreshOn ? 'On' : 'Off'}
+
+ }
+ >
- ),
- [isRefreshOn, handleAutoRefreshSwitch, isDisabled]
- );
-
- return (
- setIsPopoverOpen(false)}
- button={
- setIsPopoverOpen(!isPopoverOpen)}
- disabled={isDisabled}
- css={css`
- margin-left: 10px;
- `}
- >
- {isRefreshOn ? 'On' : 'Off'}
-
- }
- >
- {handleGetRefreshSettingsPopoverContent(() => setIsPopoverOpen(false))}
);
};
From aa45152a4e787f36014675b864fcc0fce7bd6758 Mon Sep 17 00:00:00 2001
From: Marco Antonio Ghiani
Date: Fri, 11 Aug 2023 14:24:06 +0200
Subject: [PATCH 10/46] [FTR] Implement browser network condition utils
(#163633)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## 📓 Summary
The PR implements some utilities into the `browser` service to allow
controlling the network conditions during the execution of a functional
test.
### `getNetworkConditions`
Returns the current network simulation options. If none conditions are
previously set, it returns `undefined`
**N.B.**: _if the testing environment is not a Chromium browser, it
throws an error that can be easily caught to manually skip the test or
handle a fallback scenario._
```ts
it('should display a loading skeleton while loading', async function () {
// Skip the test in case network condition utils are not available
try {
const networkConditions = await browser.getNetworkConditions(); // undefined
await browser.setNetworkConditions('SLOW_3G');
const networkConditions = await browser.getNetworkConditions();
// {
// offline: false,
// latency: 2000,
// download_throughput: 50000,
// upload_throughput: 50000,
// }
} catch (error) {
this.skip();
}
});
```
### `setNetworkConditions`
Set the desired network conditions.
It supports different presets that match the [network profiles provided
by Chrome
debugger](https://github.com/ChromeDevTools/devtools-frontend/blob/da276a3faec9769cb55e442f0db77ebdce5cd178/front_end/core/sdk/NetworkManager.ts#L363-L393):
- `NO_THROTTLING`
- `FAST_3G`
- `SLOW_3G`
- `OFFLINE`
- `CLOUD_USER` (pre-existing)
It also accepts ad-hoc options to configure more specifically the
network conditions.
**N.B.**: _if the testing environment is not a Chromium browser, it
throws an error that can be easily caught to manually skip the test or
handle a fallback scenario._
```ts
it('should display a loading skeleton while loading', async function () {
// Skip the test in case network condition utils are not available
try {
await browser.setNetworkConditions('NO_THROTTLING');
await browser.setNetworkConditions('FAST_3G');
await browser.setNetworkConditions('SLOW_3G');
await browser.setNetworkConditions('OFFLINE');
await browser.setNetworkConditions('CLOUD_USER');
await browser.setNetworkConditions({
offline: false,
latency: 5, // Additional latency (ms).
download_throughput: 500 * 1024, // Maximal aggregated download throughput.
upload_throughput: 500 * 1024, // Maximal aggregated upload throughput.
});
} catch (error) {
this.skip();
}
});
```
### restoreNetworkConditions
Restore the original network conditions, setting to `NO_THROTTLING`.
The native implementation of `deleteNetworkConditions` exposed by
selenium is unofficial and didn't consistently work, the recommended
approach by the google dev tools team is to restore the connection
setting the no throttling profile.
**N.B.**: _if the testing environment is not a Chromium browser, it
throws an error that can be easily caught to manually skip the test or
handle a fallback scenario._
```ts
it('should display a loading skeleton while loading', async function () {
// Skip the test in case network condition utils are not available
try {
await browser.setNetworkConditions('SLOW_3G'); // Slow down network conditions
// Do your assertions
await browser.restoreNetworkConditions(); // Restore network conditions
} catch (error) {
this.skip();
}
});
```
Co-authored-by: Marco Antonio Ghiani
Co-authored-by: Dzmitry Lemechko
---
.../from_the_browser/loaded_kibana.ts | 2 +-
test/functional/services/common/browser.ts | 75 +++++++++++++++++--
.../services/remote/network_profiles.ts | 45 +++++++++--
test/functional/services/remote/webdriver.ts | 24 ++----
4 files changed, 117 insertions(+), 29 deletions(-)
diff --git a/test/analytics/tests/instrumented_events/from_the_browser/loaded_kibana.ts b/test/analytics/tests/instrumented_events/from_the_browser/loaded_kibana.ts
index e4ac2346b5893..02e1e7656bf78 100644
--- a/test/analytics/tests/instrumented_events/from_the_browser/loaded_kibana.ts
+++ b/test/analytics/tests/instrumented_events/from_the_browser/loaded_kibana.ts
@@ -62,7 +62,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
expect(event.properties.value4).to.be.a('number');
expect(event.properties.value5).to.be.a('number');
- if (browser.isChromium) {
+ if (browser.isChromium()) {
// Kibana Loaded memory
expect(meta).to.have.property('jsHeapSizeLimit');
expect(meta.jsHeapSizeLimit).to.be.a('number');
diff --git a/test/functional/services/common/browser.ts b/test/functional/services/common/browser.ts
index 393f093d54189..fd46e5ac1448b 100644
--- a/test/functional/services/common/browser.ts
+++ b/test/functional/services/common/browser.ts
@@ -7,8 +7,9 @@
*/
import { setTimeout as setTimeoutAsync } from 'timers/promises';
-import { cloneDeepWith } from 'lodash';
+import { cloneDeepWith, isString } from 'lodash';
import { Key, Origin, WebDriver } from 'selenium-webdriver';
+import { Driver as ChromiumWebDriver } from 'selenium-webdriver/chrome';
import { modifyUrl } from '@kbn/std';
import sharp from 'sharp';
@@ -16,6 +17,7 @@ import { NoSuchSessionError } from 'selenium-webdriver/lib/error';
import { WebElementWrapper } from '../lib/web_element_wrapper';
import { FtrProviderContext, FtrService } from '../../ftr_provider_context';
import { Browsers } from '../remote/browsers';
+import { NetworkOptions, NetworkProfile, NETWORK_PROFILES } from '../remote/network_profiles';
export type Browser = BrowserService;
@@ -25,19 +27,20 @@ class BrowserService extends FtrService {
*/
public readonly keys = Key;
public readonly isFirefox: boolean;
- public readonly isChromium: boolean;
private readonly log = this.ctx.getService('log');
constructor(
ctx: FtrProviderContext,
public readonly browserType: string,
- private readonly driver: WebDriver
+ protected readonly driver: WebDriver | ChromiumWebDriver
) {
super(ctx);
this.isFirefox = this.browserType === Browsers.Firefox;
- this.isChromium =
- this.browserType === Browsers.Chrome || this.browserType === Browsers.ChromiumEdge;
+ }
+
+ public isChromium(): this is { driver: ChromiumWebDriver } {
+ return this.driver instanceof ChromiumWebDriver;
}
/**
@@ -661,6 +664,68 @@ class BrowserService extends FtrService {
}
}
}
+
+ /**
+ * Get the network simulation for chromium browsers if available.
+ * https://www.selenium.dev/selenium/docs/api/javascript/module/selenium-webdriver/chrome_exports_Driver.html#getNetworkConditions
+ *
+ * @return {Promise}
+ */
+ public async getNetworkConditions() {
+ if (this.isChromium()) {
+ return this.driver.getNetworkConditions().catch(() => undefined); // Return undefined instead of throwing if no conditions are set.
+ } else {
+ const message =
+ 'WebDriver does not support the .getNetworkConditions method.\nProbably the browser in used is not chromium based.';
+ this.log.error(message);
+ throw new Error(message);
+ }
+ }
+
+ /**
+ * Delete the network simulation for chromium browsers if available.
+ *
+ * @return {Promise}
+ */
+ public async restoreNetworkConditions() {
+ this.log.debug('Restore network conditions simulation.');
+ return this.setNetworkConditions('NO_THROTTLING');
+ }
+
+ /**
+ * Set the network conditions for chromium browsers if available.
+ *
+ * __Sample Usage:__
+ *
+ * browser.setNetworkConditions('FAST_3G')
+ * browser.setNetworkConditions('SLOW_3G')
+ * browser.setNetworkConditions('OFFLINE')
+ * browser.setNetworkConditions({
+ * offline: false,
+ * latency: 5, // Additional latency (ms).
+ * download_throughput: 500 * 1024, // Maximal aggregated download throughput.
+ * upload_throughput: 500 * 1024, // Maximal aggregated upload throughput.
+ * });
+ *
+ * https://www.selenium.dev/selenium/docs/api/javascript/module/selenium-webdriver/chrome_exports_Driver.html#setNetworkConditions
+ *
+ * @return {Promise}
+ */
+ public async setNetworkConditions(profileOrOptions: NetworkProfile | NetworkOptions) {
+ const networkOptions = isString(profileOrOptions)
+ ? NETWORK_PROFILES[profileOrOptions]
+ : profileOrOptions;
+
+ if (this.isChromium()) {
+ this.log.debug(`Set network conditions with profile "${profileOrOptions}".`);
+ return this.driver.setNetworkConditions(networkOptions);
+ } else {
+ const message =
+ 'WebDriver does not support the .setNetworkCondition method.\nProbably the browser in used is not chromium based.';
+ this.log.error(message);
+ throw new Error(message);
+ }
+ }
}
export async function BrowserProvider(ctx: FtrProviderContext) {
diff --git a/test/functional/services/remote/network_profiles.ts b/test/functional/services/remote/network_profiles.ts
index cb4076686270c..29e4a0feeaace 100644
--- a/test/functional/services/remote/network_profiles.ts
+++ b/test/functional/services/remote/network_profiles.ts
@@ -6,10 +6,13 @@
* Side Public License, v 1.
*/
-interface NetworkOptions {
- DOWNLOAD: number;
- UPLOAD: number;
- LATENCY: number;
+export type NetworkProfile = 'NO_THROTTLING' | 'FAST_3G' | 'SLOW_3G' | 'OFFLINE' | 'CLOUD_USER';
+
+export interface NetworkOptions {
+ offline: boolean;
+ latency: number;
+ download_throughput: number;
+ upload_throughput: number;
}
const sec = 10 ** 3;
@@ -17,6 +20,36 @@ const MBps = 10 ** 6 / 8; // megabyte per second (MB/s) (can be abbreviated as M
// Selenium uses B/s (bytes) for network throttling
// Download (B/s) Upload (B/s) Latency (ms)
-export const NETWORK_PROFILES: { [key: string]: NetworkOptions } = {
- CLOUD_USER: { DOWNLOAD: 6 * MBps, UPLOAD: 6 * MBps, LATENCY: 0.1 * sec },
+
+export const NETWORK_PROFILES: Record = {
+ NO_THROTTLING: {
+ offline: false,
+ latency: 0,
+ download_throughput: -1,
+ upload_throughput: -1,
+ },
+ FAST_3G: {
+ offline: false,
+ latency: 0.56 * sec,
+ download_throughput: 1.44 * MBps,
+ upload_throughput: 0.7 * MBps,
+ },
+ SLOW_3G: {
+ offline: false,
+ latency: 2 * sec,
+ download_throughput: 0.4 * MBps,
+ upload_throughput: 0.4 * MBps,
+ },
+ OFFLINE: {
+ offline: true,
+ latency: 0,
+ download_throughput: 0,
+ upload_throughput: 0,
+ },
+ CLOUD_USER: {
+ offline: false,
+ latency: 0.1 * sec,
+ download_throughput: 6 * MBps,
+ upload_throughput: 6 * MBps,
+ },
};
diff --git a/test/functional/services/remote/webdriver.ts b/test/functional/services/remote/webdriver.ts
index 1486d02656d12..702f674b3c10d 100644
--- a/test/functional/services/remote/webdriver.ts
+++ b/test/functional/services/remote/webdriver.ts
@@ -30,7 +30,7 @@ import { createStdoutSocket } from './create_stdout_stream';
import { preventParallelCalls } from './prevent_parallel_calls';
import { Browsers } from './browsers';
-import { NETWORK_PROFILES } from './network_profiles';
+import { NetworkProfile, NETWORK_PROFILES } from './network_profiles';
const throttleOption: string = process.env.TEST_THROTTLE_NETWORK as string;
const headlessBrowser: string = process.env.TEST_BROWSER_HEADLESS as string;
@@ -300,22 +300,17 @@ async function attemptToCreateCommand(
const { session, consoleLog$ } = await buildDriverInstance();
if (throttleOption === '1' && browserType === 'chrome') {
- const { KBN_NETWORK_TEST_PROFILE = 'CLOUD_USER' } = process.env;
+ const KBN_NETWORK_TEST_PROFILE = (process.env.KBN_NETWORK_TEST_PROFILE ??
+ 'CLOUD_USER') as NetworkProfile;
const profile =
- KBN_NETWORK_TEST_PROFILE in Object.keys(NETWORK_PROFILES)
- ? KBN_NETWORK_TEST_PROFILE
- : 'CLOUD_USER';
+ KBN_NETWORK_TEST_PROFILE in NETWORK_PROFILES ? KBN_NETWORK_TEST_PROFILE : 'CLOUD_USER';
- const {
- DOWNLOAD: downloadThroughput,
- UPLOAD: uploadThroughput,
- LATENCY: latency,
- } = NETWORK_PROFILES[`${profile}`];
+ const networkProfileOptions = NETWORK_PROFILES[profile];
// Only chrome supports this option.
log.debug(
- `NETWORK THROTTLED with profile ${profile}: ${downloadThroughput} B/s down, ${uploadThroughput} B/s up, ${latency} ms latency.`
+ `NETWORK THROTTLED with profile ${profile}: ${networkProfileOptions.download_throughput} B/s down, ${networkProfileOptions.upload_throughput} B/s up, ${networkProfileOptions.latency} ms latency.`
);
if (noCache) {
@@ -326,12 +321,7 @@ async function attemptToCreateCommand(
}
// @ts-expect-error
- session.setNetworkConditions({
- offline: false,
- latency,
- download_throughput: downloadThroughput,
- upload_throughput: uploadThroughput,
- });
+ session.setNetworkConditions(networkProfileOptions);
}
if (attemptId !== attemptCounter) {
From 9bc2150c789fef4f8ddf5c3ee329a971e4e0c8cb Mon Sep 17 00:00:00 2001
From: amyjtechwriter <61687663+amyjtechwriter@users.noreply.github.com>
Date: Fri, 11 Aug 2023 14:03:10 +0100
Subject: [PATCH 11/46] [DOCS] Adds the release notes for the 8.9.1 release.
(#163578)
## Summary
Adds the release notes for the 8.9.1 release.
Closes:#163565
---
docs/CHANGELOG.asciidoc | 48 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/docs/CHANGELOG.asciidoc b/docs/CHANGELOG.asciidoc
index 1e58e8a9e6135..5da373c8d9a51 100644
--- a/docs/CHANGELOG.asciidoc
+++ b/docs/CHANGELOG.asciidoc
@@ -10,6 +10,7 @@
Review important information about the {kib} 8.x releases.
+* <>
* <>
* <>
* <>
@@ -45,6 +46,53 @@ Review important information about the {kib} 8.x releases.
* <>
--
+[[release-notes-8.9.1]]
+== {kib} 8.9.1
+
+coming::[8.9.1]
+
+Review the following information about the {kib} 8.9.1 release.
+
+[float]
+[[breaking-changes-8.9.1]]
+=== Breaking changes
+
+Breaking changes can prevent your application from optimal operation and performance.
+Before you upgrade to 8.9.0, review the breaking changes, then mitigate the impact to your application.
+
+There are no breaking changes in the {kib} 8.9.1 release.
+
+To review the breaking changes in the previous release, check {kibana-ref-all}/8.9/release-notes-8.9.0.html#breaking-changes-8.9.0[8.9.0].
+
+[float]
+[[fixes-v8.9.1]]
+=== Bug Fixes
+APM::
+* Fixes flame graph rendering on the transaction detail page ({kibana-pull}162968[#162968]).
+* Check if documents are missing `span.name` ({kibana-pull}162899[#162899]).
+* Fixes transaction action menu for Trace Explorer and dependency operations ({kibana-pull}162213[#162213]).
+Canvas::
+* Fixes embeddables not rendering in Canvas ({kibana-pull}163013[#163013]).
+Discover::
+* Fixes grid styles to enable better content wrapping ({kibana-pull}162325[#162325]).
+* Fixes search sessions using temporary data views ({kibana-pull}161029[#161029]).
+* Make share links and search session information shorter for temporary data views ({kibana-pull}161180[#161180]).
+Elastic Security::
+For the Elastic Security 8.9.1 release information, refer to {security-guide}/release-notes.html[_Elastic Security Solution Release Notes_].
+Fleet::
+* Fixes for query error on Agents list in the UI ({kibana-pull}162816[#162816]).
+* Remove duplicate path being pushed to package archive ({kibana-pull}162724[#162724]).
+Management::
+* Resolves potential errors present in v8.9.0 with data views that contain field filters that have been edited ({kibana-pull}162860[#162860]).
+Uptime::
+* Fixes Monitor not found 404 message display ({kibana-pull}163501[#163501]).
+
+[float]
+[[enhancement-v8.9.1]]
+=== Enhancements
+Discover::
+* Set legend width to extra large and enable text wrapping in legend labels ({kibana-pull}163009[#163009]).
+
[[release-notes-8.9.0]]
== {kib} 8.9.0
From a86c016219bb9e6c9dd4eacd5db6f485a166dee5 Mon Sep 17 00:00:00 2001
From: Philippe Oberti
Date: Fri, 11 Aug 2023 15:18:12 +0200
Subject: [PATCH 12/46] [Security Solution] expandable flyout - replace feature
flag with advanced settings toggle (#161614)
---
.../server/collectors/management/schema.ts | 4 +
.../server/collectors/management/types.ts | 1 +
src/plugins/telemetry/schema/oss_plugins.json | 6 +
.../security_solution/common/constants.ts | 8 +-
.../common/experimental_features.ts | 4 -
.../detection_alerts/cti_enrichments.cy.ts | 2 +
.../e2e/detection_alerts/enrichments.cy.ts | 2 +
.../e2e/explore/guided_onboarding/tour.cy.ts | 2 +
.../alerts/alerts_details.cy.ts | 5 +
...etails_left_panel_analyzer_graph_tab.cy.ts | 50 +-
..._details_left_panel_correlations_tab.cy.ts | 84 ++-
...lert_details_left_panel_entities_tab.cy.ts | 54 +-
...details_left_panel_investigation_tab.cy.ts | 40 +-
...rt_details_left_panel_prevalence_tab.cy.ts | 92 ++-
...lert_details_left_panel_response_tab.cy.ts | 34 +-
..._details_left_panel_session_view_tab.cy.ts | 54 +-
...s_left_panel_threat_intelligence_tab.cy.ts | 48 +-
...t_details_preview_panel_rule_preview.cy.ts | 101 ++--
.../alert_details_right_panel.cy.ts | 308 +++++-----
.../alert_details_right_panel_json_tab.cy.ts | 38 +-
...ert_details_right_panel_overview_tab.cy.ts | 541 +++++++++---------
.../alert_details_right_panel_table_tab.cy.ts | 76 ++-
.../alert_details_url_sync.cy.ts | 54 +-
.../alerts/investigate_in_timeline.cy.ts | 2 +
.../api_calls/kibana_advanced_settings.ts | 5 +
.../control_columns/row_action/index.tsx | 5 +-
.../alerts/alert_details_redirect.test.tsx | 2 +-
.../pages/alerts/alert_details_redirect.tsx | 10 +-
.../endpoint/automated_response_actions.cy.ts | 3 +-
.../cypress/e2e/endpoint/isolate.cy.ts | 3 +-
.../no_license.cy.ts | 2 +
.../automated_response_actions/results.cy.ts | 3 +
.../cypress/e2e/mocked_data/isolate.cy.ts | 3 +-
.../public/management/cypress/tasks/common.ts | 20 +
.../security_solution/server/ui_settings.ts | 17 +
.../apps/endpoint/responder.ts | 6 +
36 files changed, 852 insertions(+), 837 deletions(-)
diff --git a/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts b/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts
index 84079703affc9..27fef2a017824 100644
--- a/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts
+++ b/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts
@@ -110,6 +110,10 @@ export const stackManagementSchema: MakeSchemaFrom = {
type: 'boolean',
_meta: { description: 'Non-default value of setting.' },
},
+ 'securitySolution:enableExpandableFlyout': {
+ type: 'boolean',
+ _meta: { description: 'Non-default value of setting.' },
+ },
'securitySolution:enableCcsWarning': {
type: 'boolean',
_meta: { description: 'Non-default value of setting.' },
diff --git a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts
index a48a3905c8705..81f7b0eb957f1 100644
--- a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts
+++ b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts
@@ -63,6 +63,7 @@ export interface UsageStats {
'securitySolution:defaultAnomalyScore': number;
'securitySolution:refreshIntervalDefaults': string;
'securitySolution:enableNewsFeed': boolean;
+ 'securitySolution:enableExpandableFlyout': boolean;
'securitySolution:enableCcsWarning': boolean;
'search:includeFrozen': boolean;
'courier:maxConcurrentShardRequests': number;
diff --git a/src/plugins/telemetry/schema/oss_plugins.json b/src/plugins/telemetry/schema/oss_plugins.json
index 52a54eb0335b1..00d8a96a59e0e 100644
--- a/src/plugins/telemetry/schema/oss_plugins.json
+++ b/src/plugins/telemetry/schema/oss_plugins.json
@@ -9207,6 +9207,12 @@
"description": "Non-default value of setting."
}
},
+ "securitySolution:enableExpandableFlyout": {
+ "type": "boolean",
+ "_meta": {
+ "description": "Non-default value of setting."
+ }
+ },
"securitySolution:enableCcsWarning": {
"type": "boolean",
"_meta": {
diff --git a/x-pack/plugins/security_solution/common/constants.ts b/x-pack/plugins/security_solution/common/constants.ts
index 60f6e597306b1..47c7cb7b39f70 100644
--- a/x-pack/plugins/security_solution/common/constants.ts
+++ b/x-pack/plugins/security_solution/common/constants.ts
@@ -163,6 +163,9 @@ export const DEFAULT_INDEX_PATTERN = [...INCLUDE_INDEX_PATTERN, ...EXCLUDE_ELAST
/** This Kibana Advanced Setting enables the `Security news` feed widget */
export const ENABLE_NEWS_FEED_SETTING = 'securitySolution:enableNewsFeed' as const;
+/** This Kibana Advanced Setting allows users to enable/disable the Expandable Flyout */
+export const ENABLE_EXPANDABLE_FLYOUT_SETTING = 'securitySolution:enableExpandableFlyout' as const;
+
/** This Kibana Advanced Setting enables the warnings for CCS read permissions */
export const ENABLE_CCS_READ_WARNING_SETTING = 'securitySolution:enableCcsWarning' as const;
@@ -210,7 +213,6 @@ export const UPDATE_OR_CREATE_LEGACY_ACTIONS = '/internal/api/detection/legacy/n
/**
* Exceptions management routes
*/
-
export const SHARED_EXCEPTION_LIST_URL = `/api${EXCEPTIONS_PATH}/shared` as const;
/**
@@ -322,12 +324,12 @@ export const ALERTS_AS_DATA_FIND_URL = `${ALERTS_AS_DATA_URL}/find` as const;
*/
export const UNAUTHENTICATED_USER = 'Unauthenticated' as const;
-/*
+/**
Licensing requirements
*/
export const MINIMUM_ML_LICENSE = 'platinum' as const;
-/*
+/**
Machine Learning constants
*/
export const ML_GROUP_ID = 'security' as const;
diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts
index b2e1cae53d97e..449092e86130a 100644
--- a/x-pack/plugins/security_solution/common/experimental_features.ts
+++ b/x-pack/plugins/security_solution/common/experimental_features.ts
@@ -76,10 +76,6 @@ export const allowedExperimentalValues = Object.freeze({
*/
alertsPageChartsEnabled: true,
alertTypeEnabled: false,
- /**
- * Enables the new security flyout over the current alert details flyout
- */
- securityFlyoutEnabled: false,
/*
* Enables new Set of filters on the Alerts page.
diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/cti_enrichments.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/cti_enrichments.cy.ts
index fc424eb192e05..0a626f2fff8d4 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/cti_enrichments.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/cti_enrichments.cy.ts
@@ -5,6 +5,7 @@
* 2.0.
*/
+import { disableExpandableFlyout } from '../../tasks/api_calls/kibana_advanced_settings';
import { getNewThreatIndicatorRule, indicatorRuleMatchingDoc } from '../../objects/rule';
import { cleanKibana } from '../../tasks/common';
import { login, visitWithoutDateRange } from '../../tasks/login';
@@ -34,6 +35,7 @@ describe('CTI Enrichment', () => {
cy.task('esArchiverLoad', 'suspicious_source_event');
login();
createRule({ ...getNewThreatIndicatorRule(), rule_id: 'rule_testing', enabled: true });
+ disableExpandableFlyout();
});
after(() => {
diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/enrichments.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/enrichments.cy.ts
index 2eacd9ece4865..95481b23174f1 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/enrichments.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/enrichments.cy.ts
@@ -24,6 +24,7 @@ import {
scrollAlertTableColumnIntoView,
closeAlertFlyout,
} from '../../tasks/alerts';
+import { disableExpandableFlyout } from '../../tasks/api_calls/kibana_advanced_settings';
import { login, visit } from '../../tasks/login';
@@ -41,6 +42,7 @@ describe('Enrichment', () => {
describe('Custom query rule', () => {
beforeEach(() => {
+ disableExpandableFlyout();
cy.task('esArchiverLoad', 'risk_hosts');
deleteAlertsAndRules();
createRule(getNewRule({ rule_id: 'rule1' }));
diff --git a/x-pack/plugins/security_solution/cypress/e2e/explore/guided_onboarding/tour.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/explore/guided_onboarding/tour.cy.ts
index 33799309fd3a6..1c180857c00b9 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/explore/guided_onboarding/tour.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/explore/guided_onboarding/tour.cy.ts
@@ -5,6 +5,7 @@
* 2.0.
*/
+import { disableExpandableFlyout } from '../../../tasks/api_calls/kibana_advanced_settings';
import { navigateFromHeaderTo } from '../../../tasks/security_header';
import { ALERTS, TIMELINES } from '../../../screens/security_header';
import { closeAlertFlyout, expandFirstAlert } from '../../../tasks/alerts';
@@ -36,6 +37,7 @@ describe('Guided onboarding tour', () => {
});
beforeEach(() => {
login();
+ disableExpandableFlyout();
startAlertsCasesTour();
visit(ALERTS_URL);
waitForAlertsToPopulate();
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/alerts_details.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/alerts_details.cy.ts
index 7c2ec7a31e12a..7f5e0cde93b10 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/alerts_details.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/alerts_details.cy.ts
@@ -6,6 +6,7 @@
*/
import type { DataTableModel } from '@kbn/securitysolution-data-table';
+import { disableExpandableFlyout } from '../../../tasks/api_calls/kibana_advanced_settings';
import {
ALERT_FLYOUT,
CELL_TEXT,
@@ -39,6 +40,7 @@ describe('Alert details flyout', () => {
before(() => {
cleanKibana();
login();
+ disableExpandableFlyout();
createRule(getNewRule());
visitWithoutDateRange(ALERTS_URL);
waitForAlertsToPopulate();
@@ -64,6 +66,7 @@ describe('Alert details flyout', () => {
beforeEach(() => {
login();
+ disableExpandableFlyout();
visitWithoutDateRange(ALERTS_URL);
waitForAlertsToPopulate();
expandFirstAlert();
@@ -128,6 +131,7 @@ describe('Alert details flyout', () => {
beforeEach(() => {
login();
+ disableExpandableFlyout();
visit(ALERTS_URL);
waitForAlertsToPopulate();
expandFirstAlert();
@@ -173,6 +177,7 @@ describe('Alert details flyout', () => {
beforeEach(() => {
login();
+ disableExpandableFlyout();
visit(ALERTS_URL);
waitForAlertsToPopulate();
expandFirstAlert();
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_analyzer_graph_tab.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_analyzer_graph_tab.cy.ts
index 43531feb67d73..573286b921d56 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_analyzer_graph_tab.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_analyzer_graph_tab.cy.ts
@@ -24,34 +24,30 @@ import { getNewRule } from '../../../../objects/rule';
import { ALERTS_URL } from '../../../../urls/navigation';
import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule';
-describe(
- 'Alert details expandable flyout left panel analyzer graph',
- { env: { ftrConfig: { enableExperimental: ['securityFlyoutEnabled'] } } },
- () => {
- beforeEach(() => {
- cleanKibana();
- login();
- createRule(getNewRule());
- visit(ALERTS_URL);
- waitForAlertsToPopulate();
- expandFirstAlertExpandableFlyout();
- expandDocumentDetailsExpandableFlyoutLeftSection();
- openGraphAnalyzerTab();
- });
+describe('Alert details expandable flyout left panel analyzer graph', () => {
+ beforeEach(() => {
+ cleanKibana();
+ login();
+ createRule(getNewRule());
+ visit(ALERTS_URL);
+ waitForAlertsToPopulate();
+ expandFirstAlertExpandableFlyout();
+ expandDocumentDetailsExpandableFlyoutLeftSection();
+ openGraphAnalyzerTab();
+ });
- it('should display analyzer graph and node list under visualize', () => {
- cy.get(DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB)
- .should('be.visible')
- .and('have.text', 'Visualize');
+ it('should display analyzer graph and node list under visualize', () => {
+ cy.get(DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB)
+ .should('be.visible')
+ .and('have.text', 'Visualize');
- cy.get(DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB_BUTTON_GROUP).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB_BUTTON_GROUP).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB_GRAPH_ANALYZER_BUTTON)
- .should('be.visible')
- .and('have.text', 'Analyzer Graph');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB_GRAPH_ANALYZER_BUTTON)
+ .should('be.visible')
+ .and('have.text', 'Analyzer Graph');
- cy.get(DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB_GRAPH_ANALYZER_CONTENT).should('be.visible');
- cy.get(ANALYZER_NODE).first().should('be.visible');
- });
- }
-);
+ cy.get(DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB_GRAPH_ANALYZER_CONTENT).should('be.visible');
+ cy.get(ANALYZER_NODE).first().should('be.visible');
+ });
+});
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_correlations_tab.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_correlations_tab.cy.ts
index da6dccc082c7f..0b02939f5ca4f 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_correlations_tab.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_correlations_tab.cy.ts
@@ -34,60 +34,54 @@ import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule';
import { login, visit } from '../../../../tasks/login';
import { ALERTS_URL } from '../../../../urls/navigation';
-describe(
- 'Expandable flyout left panel correlations',
- { env: { ftrConfig: { enableExperimental: ['securityFlyoutEnabled'] } } },
- () => {
- beforeEach(() => {
- cleanKibana();
- login();
- createRule(getNewRule());
- visit(ALERTS_URL);
- waitForAlertsToPopulate();
- expandFirstAlertExpandableFlyout();
- expandDocumentDetailsExpandableFlyoutLeftSection();
- createNewCaseFromExpandableFlyout();
- openInsightsTab();
- openCorrelationsTab();
- });
+describe('Expandable flyout left panel correlations', () => {
+ beforeEach(() => {
+ cleanKibana();
+ login();
+ createRule(getNewRule());
+ visit(ALERTS_URL);
+ waitForAlertsToPopulate();
+ expandFirstAlertExpandableFlyout();
+ expandDocumentDetailsExpandableFlyoutLeftSection();
+ createNewCaseFromExpandableFlyout();
+ openInsightsTab();
+ openCorrelationsTab();
+ });
- it('should render correlations details correctly', () => {
- cy.log('link the alert to a new case');
+ it('should render correlations details correctly', () => {
+ cy.log('link the alert to a new case');
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB).scrollIntoView();
- cy.log('should render the Insights header');
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB)
- .should('be.visible')
- .and('have.text', 'Insights');
+ cy.log('should render the Insights header');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB).should('be.visible').and('have.text', 'Insights');
- cy.log('should render the inner tab switch');
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_BUTTON_GROUP).should('be.visible');
+ cy.log('should render the inner tab switch');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_BUTTON_GROUP).should('be.visible');
- cy.log('should render correlations tab activator / button');
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_CORRELATIONS_BUTTON)
- .should('be.visible')
- .and('have.text', 'Correlations');
+ cy.log('should render correlations tab activator / button');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_CORRELATIONS_BUTTON)
+ .should('be.visible')
+ .and('have.text', 'Correlations');
- cy.log('should render all the correlations sections');
+ cy.log('should render all the correlations sections');
- cy.get(CORRELATIONS_ANCESTRY_SECTION)
- .should('be.visible')
- .and('have.text', '1 alert related by ancestry');
+ cy.get(CORRELATIONS_ANCESTRY_SECTION)
+ .should('be.visible')
+ .and('have.text', '1 alert related by ancestry');
- cy.get(CORRELATIONS_SOURCE_SECTION)
- .should('be.visible')
- .and('have.text', '0 alerts related by source event');
+ cy.get(CORRELATIONS_SOURCE_SECTION)
+ .should('be.visible')
+ .and('have.text', '0 alerts related by source event');
- cy.get(CORRELATIONS_SESSION_SECTION)
- .should('be.visible')
- .and('have.text', '1 alert related by session');
+ cy.get(CORRELATIONS_SESSION_SECTION)
+ .should('be.visible')
+ .and('have.text', '1 alert related by session');
- cy.get(CORRELATIONS_CASES_SECTION).should('be.visible').and('have.text', '1 related case');
+ cy.get(CORRELATIONS_CASES_SECTION).should('be.visible').and('have.text', '1 related case');
- expandCorrelationsSection(CORRELATIONS_ANCESTRY_SECTION);
+ expandCorrelationsSection(CORRELATIONS_ANCESTRY_SECTION);
- cy.get(CORRELATIONS_ANCESTRY_TABLE).should('be.visible');
- });
- }
-);
+ cy.get(CORRELATIONS_ANCESTRY_TABLE).should('be.visible');
+ });
+});
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_entities_tab.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_entities_tab.cy.ts
index f48611f12af09..a680f783af336 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_entities_tab.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_entities_tab.cy.ts
@@ -25,38 +25,32 @@ import { getNewRule } from '../../../../objects/rule';
import { ALERTS_URL } from '../../../../urls/navigation';
import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule';
-describe(
- 'Alert details expandable flyout left panel entities',
- { env: { ftrConfig: { enableExperimental: ['securityFlyoutEnabled'] } } },
- () => {
- beforeEach(() => {
- cleanKibana();
- login();
- createRule(getNewRule());
- visit(ALERTS_URL);
- waitForAlertsToPopulate();
- expandFirstAlertExpandableFlyout();
- expandDocumentDetailsExpandableFlyoutLeftSection();
- openInsightsTab();
- openEntitiesTab();
- });
+describe('Alert details expandable flyout left panel entities', () => {
+ beforeEach(() => {
+ cleanKibana();
+ login();
+ createRule(getNewRule());
+ visit(ALERTS_URL);
+ waitForAlertsToPopulate();
+ expandFirstAlertExpandableFlyout();
+ expandDocumentDetailsExpandableFlyoutLeftSection();
+ openInsightsTab();
+ openEntitiesTab();
+ });
- it('should display analyzer graph and node list under Insights Entities', () => {
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB)
- .should('be.visible')
- .and('have.text', 'Insights');
+ it('should display analyzer graph and node list under Insights Entities', () => {
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB).should('be.visible').and('have.text', 'Insights');
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_BUTTON_GROUP).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_BUTTON_GROUP).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_BUTTON)
- .should('be.visible')
- .and('have.text', 'Entities');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_BUTTON)
+ .should('be.visible')
+ .and('have.text', 'Entities');
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_HOST_DETAILS).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_HOST_DETAILS).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_HOST_DETAILS).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_HOST_DETAILS).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_USER_DETAILS).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_USER_DETAILS).should('be.visible');
- });
- }
-);
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_USER_DETAILS).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_USER_DETAILS).should('be.visible');
+ });
+});
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_investigation_tab.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_investigation_tab.cy.ts
index 62d4932a017b8..833d591344f57 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_investigation_tab.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_investigation_tab.cy.ts
@@ -19,27 +19,23 @@ import { getNewRule } from '../../../../objects/rule';
import { ALERTS_URL } from '../../../../urls/navigation';
import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule';
-describe(
- 'Alert details expandable flyout left panel investigation',
- { env: { ftrConfig: { enableExperimental: ['securityFlyoutEnabled'] } } },
- () => {
- beforeEach(() => {
- cleanKibana();
- login();
- createRule(getNewRule());
- visit(ALERTS_URL);
- waitForAlertsToPopulate();
- expandFirstAlertExpandableFlyout();
- expandDocumentDetailsExpandableFlyoutLeftSection();
- openInvestigationTab();
- });
+describe('Alert details expandable flyout left panel investigation', () => {
+ beforeEach(() => {
+ cleanKibana();
+ login();
+ createRule(getNewRule());
+ visit(ALERTS_URL);
+ waitForAlertsToPopulate();
+ expandFirstAlertExpandableFlyout();
+ expandDocumentDetailsExpandableFlyoutLeftSection();
+ openInvestigationTab();
+ });
- it('should display investigation guide', () => {
- cy.get(DOCUMENT_DETAILS_FLYOUT_INVESTIGATION_TAB)
- .should('be.visible')
- .and('have.text', 'Investigation');
+ it('should display investigation guide', () => {
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INVESTIGATION_TAB)
+ .should('be.visible')
+ .and('have.text', 'Investigation');
- cy.get(DOCUMENT_DETAILS_FLYOUT_INVESTIGATION_TAB_CONTENT).should('be.visible');
- });
- }
-);
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INVESTIGATION_TAB_CONTENT).should('be.visible');
+ });
+});
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_prevalence_tab.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_prevalence_tab.cy.ts
index 3cfe58f22893c..ab06e9fea187e 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_prevalence_tab.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_prevalence_tab.cy.ts
@@ -30,56 +30,50 @@ import { getNewRule } from '../../../../objects/rule';
import { ALERTS_URL } from '../../../../urls/navigation';
import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule';
-describe(
- 'Alert details expandable flyout left panel prevalence',
- { env: { ftrConfig: { enableExperimental: ['securityFlyoutEnabled'] } } },
- () => {
- beforeEach(() => {
- cleanKibana();
- login();
- createRule(getNewRule());
- visit(ALERTS_URL);
- waitForAlertsToPopulate();
- expandFirstAlertExpandableFlyout();
- expandDocumentDetailsExpandableFlyoutLeftSection();
- openInsightsTab();
- openPrevalenceTab();
- });
+describe('Alert details expandable flyout left panel prevalence', () => {
+ beforeEach(() => {
+ cleanKibana();
+ login();
+ createRule(getNewRule());
+ visit(ALERTS_URL);
+ waitForAlertsToPopulate();
+ expandFirstAlertExpandableFlyout();
+ expandDocumentDetailsExpandableFlyoutLeftSection();
+ openInsightsTab();
+ openPrevalenceTab();
+ });
- it('should display prevalence tab', () => {
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB)
- .should('be.visible')
- .and('have.text', 'Insights');
+ it('should display prevalence tab', () => {
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB).should('be.visible').and('have.text', 'Insights');
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_BUTTON_GROUP).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_BUTTON_GROUP).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_BUTTON)
- .should('be.visible')
- .and('have.text', 'Prevalence');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_BUTTON)
+ .should('be.visible')
+ .and('have.text', 'Prevalence');
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_TYPE_CELL)
- .should('contain.text', 'host.name')
- .and('contain.text', 'user.name');
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_NAME_CELL)
- .should('contain.text', 'siem-kibana')
- .and('contain.text', 'test');
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_ALERT_COUNT_CELL).should(
- 'contain.text',
- 2
- );
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_DOC_COUNT_CELL).should(
- 'contain.text',
- 0
- );
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_HOST_PREVALENCE_CELL).should(
- 'contain.text',
- 100
- );
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_USER_PREVALENCE_CELL).should(
- 'contain.text',
- 100
- );
- });
- }
-);
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_TYPE_CELL)
+ .should('contain.text', 'host.name')
+ .and('contain.text', 'user.name');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_NAME_CELL)
+ .should('contain.text', 'siem-kibana')
+ .and('contain.text', 'test');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_ALERT_COUNT_CELL).should(
+ 'contain.text',
+ 2
+ );
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_DOC_COUNT_CELL).should(
+ 'contain.text',
+ 0
+ );
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_HOST_PREVALENCE_CELL).should(
+ 'contain.text',
+ 100
+ );
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_USER_PREVALENCE_CELL).should(
+ 'contain.text',
+ 100
+ );
+ });
+});
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_response_tab.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_response_tab.cy.ts
index 19b9eac037a4c..19ed92dbff60f 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_response_tab.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_response_tab.cy.ts
@@ -16,23 +16,19 @@ import { getNewRule } from '../../../../objects/rule';
import { ALERTS_URL } from '../../../../urls/navigation';
import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule';
-describe(
- 'Alert details expandable flyout left panel investigation',
- { env: { ftrConfig: { enableExperimental: ['securityFlyoutEnabled'] } } },
- () => {
- beforeEach(() => {
- cleanKibana();
- login();
- createRule(getNewRule());
- visit(ALERTS_URL);
- waitForAlertsToPopulate();
- expandFirstAlertExpandableFlyout();
- expandDocumentDetailsExpandableFlyoutLeftSection();
- openResponseTab();
- });
+describe('Alert details expandable flyout left panel investigation', () => {
+ beforeEach(() => {
+ cleanKibana();
+ login();
+ createRule(getNewRule());
+ visit(ALERTS_URL);
+ waitForAlertsToPopulate();
+ expandFirstAlertExpandableFlyout();
+ expandDocumentDetailsExpandableFlyoutLeftSection();
+ openResponseTab();
+ });
- it('should display empty response message', () => {
- cy.get(DOCUMENT_DETAILS_FLYOUT_RESPONSE_EMPTY).should('be.visible');
- });
- }
-);
+ it('should display empty response message', () => {
+ cy.get(DOCUMENT_DETAILS_FLYOUT_RESPONSE_EMPTY).should('be.visible');
+ });
+});
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_session_view_tab.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_session_view_tab.cy.ts
index 762b5cf307b4f..afc3ac1b0b918 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_session_view_tab.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_session_view_tab.cy.ts
@@ -22,36 +22,32 @@ import { getNewRule } from '../../../../objects/rule';
import { ALERTS_URL } from '../../../../urls/navigation';
import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule';
-describe(
- 'Alert details expandable flyout left panel session view',
- { env: { ftrConfig: { enableExperimental: ['securityFlyoutEnabled'] } } },
- () => {
- beforeEach(() => {
- cleanKibana();
- login();
- createRule(getNewRule());
- visit(ALERTS_URL);
- waitForAlertsToPopulate();
- expandFirstAlertExpandableFlyout();
- expandDocumentDetailsExpandableFlyoutLeftSection();
- });
+describe('Alert details expandable flyout left panel session view', () => {
+ beforeEach(() => {
+ cleanKibana();
+ login();
+ createRule(getNewRule());
+ visit(ALERTS_URL);
+ waitForAlertsToPopulate();
+ expandFirstAlertExpandableFlyout();
+ expandDocumentDetailsExpandableFlyoutLeftSection();
+ });
- it('should display session view under visualize', () => {
- cy.get(DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB)
- .should('be.visible')
- .and('have.text', 'Visualize');
+ it('should display session view under visualize', () => {
+ cy.get(DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB)
+ .should('be.visible')
+ .and('have.text', 'Visualize');
- cy.get(DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB_BUTTON_GROUP).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB_BUTTON_GROUP).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB_SESSION_VIEW_BUTTON)
- .should('be.visible')
- .and('have.text', 'Session View');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB_SESSION_VIEW_BUTTON)
+ .should('be.visible')
+ .and('have.text', 'Session View');
- // TODO ideally we would have a test for the session view component instead
- cy.get(DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB_SESSION_VIEW_ERROR)
- .should('be.visible')
- .and('contain.text', 'Unable to display session view')
- .and('contain.text', 'There was an error displaying session view');
- });
- }
-);
+ // TODO ideally we would have a test for the session view component instead
+ cy.get(DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB_SESSION_VIEW_ERROR)
+ .should('be.visible')
+ .and('contain.text', 'Unable to display session view')
+ .and('contain.text', 'There was an error displaying session view');
+ });
+});
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_threat_intelligence_tab.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_threat_intelligence_tab.cy.ts
index d79c59ed71440..c5cd168836179 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_threat_intelligence_tab.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_threat_intelligence_tab.cy.ts
@@ -22,34 +22,28 @@ import {
} from '../../../../screens/expandable_flyout/alert_details_left_panel';
import { DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_THREAT_INTELLIGENCE_BUTTON } from '../../../../screens/expandable_flyout/alert_details_left_panel_threat_intelligence_tab';
-describe(
- 'Expandable flyout left panel threat intelligence',
- { env: { ftrConfig: { enableExperimental: ['securityFlyoutEnabled'] } } },
- () => {
- beforeEach(() => {
- cleanKibana();
- login();
- createRule(getNewRule());
- visit(ALERTS_URL);
- waitForAlertsToPopulate();
- expandFirstAlertExpandableFlyout();
- expandDocumentDetailsExpandableFlyoutLeftSection();
- openInsightsTab();
- openThreatIntelligenceTab();
- });
+describe('Expandable flyout left panel threat intelligence', () => {
+ beforeEach(() => {
+ cleanKibana();
+ login();
+ createRule(getNewRule());
+ visit(ALERTS_URL);
+ waitForAlertsToPopulate();
+ expandFirstAlertExpandableFlyout();
+ expandDocumentDetailsExpandableFlyoutLeftSection();
+ openInsightsTab();
+ openThreatIntelligenceTab();
+ });
- it('should serialize its state to url', () => {
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB)
- .should('be.visible')
- .and('have.text', 'Insights');
+ it('should serialize its state to url', () => {
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB).should('be.visible').and('have.text', 'Insights');
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_BUTTON_GROUP).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_BUTTON_GROUP).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_THREAT_INTELLIGENCE_BUTTON)
- .should('be.visible')
- .and('have.text', 'Threat Intelligence');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_THREAT_INTELLIGENCE_BUTTON)
+ .should('be.visible')
+ .and('have.text', 'Threat Intelligence');
- cy.get(INDICATOR_MATCH_ENRICHMENT_SECTION).should('be.visible');
- });
- }
-);
+ cy.get(INDICATOR_MATCH_ENRICHMENT_SECTION).should('be.visible');
+ });
+});
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_preview_panel_rule_preview.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_preview_panel_rule_preview.cy.ts
index 116162983f0b2..cc48e4568d908 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_preview_panel_rule_preview.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_preview_panel_rule_preview.cy.ts
@@ -34,68 +34,63 @@ import { getNewRule } from '../../../../objects/rule';
import { ALERTS_URL } from '../../../../urls/navigation';
import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule';
-describe(
- 'Alert details expandable flyout rule preview panel',
- { env: { ftrConfig: { enableExperimental: ['securityFlyoutEnabled'] } } },
- () => {
- const rule = getNewRule();
+describe('Alert details expandable flyout rule preview panel', () => {
+ const rule = getNewRule();
- beforeEach(() => {
- cleanKibana();
- login();
- createRule(rule);
- visit(ALERTS_URL);
- waitForAlertsToPopulate();
- expandFirstAlertExpandableFlyout();
- clickRuleSummaryButton();
- });
+ beforeEach(() => {
+ cleanKibana();
+ login();
+ createRule(rule);
+ visit(ALERTS_URL);
+ waitForAlertsToPopulate();
+ expandFirstAlertExpandableFlyout();
+ clickRuleSummaryButton();
+ });
+
+ describe('rule preview', () => {
+ it('should display rule preview and its sub sections', () => {
+ cy.log('rule preview panel');
- describe('rule preview', () => {
- it('should display rule preview and its sub sections', () => {
- cy.log('rule preview panel');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_SECTION).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_HEADER).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_BODY).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_SECTION).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_HEADER).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_BODY).should('be.visible');
+ cy.log('title');
- cy.log('title');
- cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_TITLE).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_TITLE).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_CREATED_BY).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_UPDATED_BY).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_TITLE).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_TITLE).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_CREATED_BY).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_UPDATED_BY).should('be.visible');
- cy.log('about');
+ cy.log('about');
- cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_ABOUT_SECTION_HEADER)
- .should('be.visible')
- .and('contain.text', 'About');
- cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_ABOUT_SECTION_CONTENT).should('be.visible');
- toggleRulePreviewAboutSection();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_ABOUT_SECTION_HEADER)
+ .should('be.visible')
+ .and('contain.text', 'About');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_ABOUT_SECTION_CONTENT).should('be.visible');
+ toggleRulePreviewAboutSection();
- cy.log('definition');
+ cy.log('definition');
- toggleRulePreviewDefinitionSection();
- cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_DEFINITION_SECTION_HEADER)
- .should('be.visible')
- .and('contain.text', 'Definition');
- cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_DEFINITION_SECTION_CONTENT).should(
- 'be.visible'
- );
- toggleRulePreviewDefinitionSection();
+ toggleRulePreviewDefinitionSection();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_DEFINITION_SECTION_HEADER)
+ .should('be.visible')
+ .and('contain.text', 'Definition');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_DEFINITION_SECTION_CONTENT).should('be.visible');
+ toggleRulePreviewDefinitionSection();
- cy.log('schedule');
+ cy.log('schedule');
- toggleRulePreviewScheduleSection();
- cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_SCHEDULE_SECTION_HEADER)
- .should('be.visible')
- .and('contain.text', 'Schedule');
- cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_SCHEDULE_SECTION_CONTENT).should('be.visible');
- toggleRulePreviewScheduleSection();
+ toggleRulePreviewScheduleSection();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_SCHEDULE_SECTION_HEADER)
+ .should('be.visible')
+ .and('contain.text', 'Schedule');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_SCHEDULE_SECTION_CONTENT).should('be.visible');
+ toggleRulePreviewScheduleSection();
- cy.log('footer');
- cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_FOOTER).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_FOOTER).should('be.visible');
- });
+ cy.log('footer');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_FOOTER).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_FOOTER).should('be.visible');
});
- }
-);
+ });
+});
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel.cy.ts
index 11fc62c7f68f7..a166a72148fd3 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel.cy.ts
@@ -65,173 +65,167 @@ import { getNewRule } from '../../../../objects/rule';
import { ALERTS_URL } from '../../../../urls/navigation';
import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule';
-describe(
- 'Alert details expandable flyout right panel',
- { env: { ftrConfig: { enableExperimental: ['securityFlyoutEnabled'] } } },
- () => {
- const rule = getNewRule();
-
- beforeEach(() => {
- cleanKibana();
- login();
- createRule(rule);
- visit(ALERTS_URL);
- waitForAlertsToPopulate();
- });
-
- it('should display header and footer basics', () => {
- expandFirstAlertExpandableFlyout();
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_TITLE).should('be.visible').and('have.text', rule.name);
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_CHAT_BUTTON).should('be.visible');
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_STATUS).should('be.visible');
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_RISK_SCORE).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_RISK_SCORE_VALUE)
- .should('be.visible')
- .and('have.text', rule.risk_score);
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_SEVERITY).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_SEVERITY_VALUE)
- .should('be.visible')
- .and('have.text', upperFirst(rule.severity));
-
- cy.log('Verify all 3 tabs are visible');
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB)
- .should('be.visible')
- .and('have.text', 'Overview');
- cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB).should('be.visible').and('have.text', 'Table');
- cy.get(DOCUMENT_DETAILS_FLYOUT_JSON_TAB).should('be.visible').and('have.text', 'JSON');
-
- cy.log('Verify the expand/collapse button is visible and functionality works');
-
- expandDocumentDetailsExpandableFlyoutLeftSection();
- cy.get(DOCUMENT_DETAILS_FLYOUT_COLLAPSE_DETAILS_BUTTON)
- .should('be.visible')
- .and('have.text', 'Collapse details');
-
- collapseDocumentDetailsExpandableFlyoutLeftSection();
- cy.get(DOCUMENT_DETAILS_FLYOUT_EXPAND_DETAILS_BUTTON)
- .should('be.visible')
- .and('have.text', 'Expand details');
-
- cy.log('Verify the take action button is visible on all tabs');
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_TAKE_ACTION_BUTTON).should('be.visible');
-
- openTableTab();
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_TAKE_ACTION_BUTTON).should('be.visible');
-
- openJsonTab();
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_TAKE_ACTION_BUTTON).should('be.visible');
- });
-
- // TODO this will change when add to existing case is improved
- // https://github.com/elastic/security-team/issues/6298
- it('should add to existing case', () => {
- navigateToCasesPage();
- createNewCaseFromCases();
-
- cy.get(CASE_DETAILS_PAGE_TITLE).should('be.visible').and('have.text', 'case');
- navigateToAlertsPage();
- expandFirstAlertExpandableFlyout();
- openTakeActionButtonAndSelectItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_EXISTING_CASE);
-
- cy.get(EXISTING_CASE_SELECT_BUTTON).should('be.visible').contains('Select').click();
- cy.get(VIEW_CASE_TOASTER_LINK).should('be.visible').and('contain.text', 'View case');
- });
-
- // TODO this will change when add to new case is improved
- // https://github.com/elastic/security-team/issues/6298
- it('should add to new case', () => {
- expandFirstAlertExpandableFlyout();
- openTakeActionButtonAndSelectItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_NEW_CASE);
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_NEW_CASE_NAME_INPUT).type('case');
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_NEW_CASE_DESCRIPTION_INPUT).type(
- 'case description'
- );
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_NEW_CASE_CREATE_BUTTON).click();
-
- cy.get(VIEW_CASE_TOASTER_LINK).should('be.visible').and('contain.text', 'View case');
- });
-
- it('should mark as acknowledged', () => {
- cy.get(ALERT_CHECKBOX).should('have.length', 2);
-
- expandFirstAlertExpandableFlyout();
- openTakeActionButtonAndSelectItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_MARK_AS_ACKNOWLEDGED);
+describe('Alert details expandable flyout right panel', () => {
+ const rule = getNewRule();
- // TODO figure out how to verify the toasts pops up
- // cy.get(KIBANA_TOAST)
- // .should('be.visible')
- // .and('have.text', 'Successfully marked 1 alert as acknowledged.');
- cy.get(ALERT_CHECKBOX).should('have.length', 1);
- });
+ beforeEach(() => {
+ cleanKibana();
+ login();
+ createRule(rule);
+ visit(ALERTS_URL);
+ waitForAlertsToPopulate();
+ });
- it('should mark as closed', () => {
- cy.get(ALERT_CHECKBOX).should('have.length', 2);
+ it('should display header and footer basics', () => {
+ expandFirstAlertExpandableFlyout();
- expandFirstAlertExpandableFlyout();
- openTakeActionButtonAndSelectItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_MARK_AS_CLOSED);
+ cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_TITLE).should('be.visible').and('have.text', rule.name);
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_CHAT_BUTTON).should('be.visible');
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_STATUS).should('be.visible');
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_RISK_SCORE).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_RISK_SCORE_VALUE)
+ .should('be.visible')
+ .and('have.text', rule.risk_score);
- // TODO figure out how to verify the toasts pops up
- // cy.get(KIBANA_TOAST).should('be.visible').and('have.text', 'Successfully closed 1 alert.');
- cy.get(ALERT_CHECKBOX).should('have.length', 1);
- });
+ cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_SEVERITY).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_SEVERITY_VALUE)
+ .should('be.visible')
+ .and('have.text', upperFirst(rule.severity));
- // these actions are now grouped together as we're not really testing their functionality but just the existence of the option in the dropdown
- it('should test other action within take action dropdown', () => {
- expandFirstAlertExpandableFlyout();
+ cy.log('Verify all 3 tabs are visible');
- cy.log('should add endpoint exception');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB).should('be.visible').and('have.text', 'Overview');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB).should('be.visible').and('have.text', 'Table');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_JSON_TAB).should('be.visible').and('have.text', 'JSON');
+
+ cy.log('Verify the expand/collapse button is visible and functionality works');
+
+ expandDocumentDetailsExpandableFlyoutLeftSection();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_COLLAPSE_DETAILS_BUTTON)
+ .should('be.visible')
+ .and('have.text', 'Collapse details');
- // TODO figure out why this option is disabled in Cypress but not running the app locally
- // https://github.com/elastic/security-team/issues/6300
- openTakeActionButton();
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_ENDPOINT_EXCEPTION).should('be.disabled');
+ collapseDocumentDetailsExpandableFlyoutLeftSection();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_EXPAND_DETAILS_BUTTON)
+ .should('be.visible')
+ .and('have.text', 'Expand details');
+
+ cy.log('Verify the take action button is visible on all tabs');
- cy.log('should add rule exception');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_TAKE_ACTION_BUTTON).should('be.visible');
- // TODO this isn't fully testing the add rule exception yet
- // https://github.com/elastic/security-team/issues/6301
- selectTakeActionItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_RULE_EXCEPTION);
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_RULE_EXCEPTION_FLYOUT_HEADER).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_RULE_EXCEPTION_FLYOUT_CANCEL_BUTTON)
- .should('be.visible')
- .click();
+ openTableTab();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_TAKE_ACTION_BUTTON).should('be.visible');
- // cy.log('should isolate host');
+ openJsonTab();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_TAKE_ACTION_BUTTON).should('be.visible');
+ });
+
+ // TODO this will change when add to existing case is improved
+ // https://github.com/elastic/security-team/issues/6298
+ it('should add to existing case', () => {
+ navigateToCasesPage();
+ createNewCaseFromCases();
+
+ cy.get(CASE_DETAILS_PAGE_TITLE).should('be.visible').and('have.text', 'case');
+ navigateToAlertsPage();
+ expandFirstAlertExpandableFlyout();
+ openTakeActionButtonAndSelectItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_EXISTING_CASE);
+
+ cy.get(EXISTING_CASE_SELECT_BUTTON).should('be.visible').contains('Select').click();
+ cy.get(VIEW_CASE_TOASTER_LINK).should('be.visible').and('contain.text', 'View case');
+ });
+
+ // TODO this will change when add to new case is improved
+ // https://github.com/elastic/security-team/issues/6298
+ it('should add to new case', () => {
+ expandFirstAlertExpandableFlyout();
+ openTakeActionButtonAndSelectItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_NEW_CASE);
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_NEW_CASE_NAME_INPUT).type('case');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_NEW_CASE_DESCRIPTION_INPUT).type(
+ 'case description'
+ );
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_NEW_CASE_CREATE_BUTTON).click();
+
+ cy.get(VIEW_CASE_TOASTER_LINK).should('be.visible').and('contain.text', 'View case');
+ });
+
+ it('should mark as acknowledged', () => {
+ cy.get(ALERT_CHECKBOX).should('have.length', 2);
+
+ expandFirstAlertExpandableFlyout();
+ openTakeActionButtonAndSelectItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_MARK_AS_ACKNOWLEDGED);
+
+ // TODO figure out how to verify the toasts pops up
+ // cy.get(KIBANA_TOAST)
+ // .should('be.visible')
+ // .and('have.text', 'Successfully marked 1 alert as acknowledged.');
+ cy.get(ALERT_CHECKBOX).should('have.length', 1);
+ });
- // TODO figure out why isolate host isn't showing up in the dropdown
- // https://github.com/elastic/security-team/issues/6302
- // openTakeActionButton();
- // cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ISOLATE_HOST).should('be.visible');
+ it('should mark as closed', () => {
+ cy.get(ALERT_CHECKBOX).should('have.length', 2);
- cy.log('should respond');
+ expandFirstAlertExpandableFlyout();
+ openTakeActionButtonAndSelectItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_MARK_AS_CLOSED);
- // TODO this will change when respond is improved
- // https://github.com/elastic/security-team/issues/6303
- openTakeActionButton();
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_RESPOND).should('be.disabled');
-
- cy.log('should investigate in timeline');
-
- selectTakeActionItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_INVESTIGATE_IN_TIMELINE);
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_INVESTIGATE_IN_TIMELINE_SECTION)
- .first()
- .within(() =>
- cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_INVESTIGATE_IN_TIMELINE_ENTRY).should('be.visible')
- );
- });
- }
-);
+ // TODO figure out how to verify the toasts pops up
+ // cy.get(KIBANA_TOAST).should('be.visible').and('have.text', 'Successfully closed 1 alert.');
+ cy.get(ALERT_CHECKBOX).should('have.length', 1);
+ });
+
+ // these actions are now grouped together as we're not really testing their functionality but just the existence of the option in the dropdown
+ it('should test other action within take action dropdown', () => {
+ expandFirstAlertExpandableFlyout();
+
+ cy.log('should add endpoint exception');
+
+ // TODO figure out why this option is disabled in Cypress but not running the app locally
+ // https://github.com/elastic/security-team/issues/6300
+ openTakeActionButton();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_ENDPOINT_EXCEPTION).should('be.disabled');
+
+ cy.log('should add rule exception');
+
+ // TODO this isn't fully testing the add rule exception yet
+ // https://github.com/elastic/security-team/issues/6301
+ selectTakeActionItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_RULE_EXCEPTION);
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_RULE_EXCEPTION_FLYOUT_HEADER).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_RULE_EXCEPTION_FLYOUT_CANCEL_BUTTON)
+ .should('be.visible')
+ .click();
+
+ // cy.log('should isolate host');
+
+ // TODO figure out why isolate host isn't showing up in the dropdown
+ // https://github.com/elastic/security-team/issues/6302
+ // openTakeActionButton();
+ // cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ISOLATE_HOST).should('be.visible');
+
+ cy.log('should respond');
+
+ // TODO this will change when respond is improved
+ // https://github.com/elastic/security-team/issues/6303
+ openTakeActionButton();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_RESPOND).should('be.disabled');
+
+ cy.log('should investigate in timeline');
+
+ selectTakeActionItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_INVESTIGATE_IN_TIMELINE);
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_INVESTIGATE_IN_TIMELINE_SECTION)
+ .first()
+ .within(() =>
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_INVESTIGATE_IN_TIMELINE_ENTRY).should('be.visible')
+ );
+ });
+});
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_json_tab.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_json_tab.cy.ts
index 7bd86e509ac18..5a1c9703ae83d 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_json_tab.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_json_tab.cy.ts
@@ -16,25 +16,21 @@ import { getNewRule } from '../../../../objects/rule';
import { ALERTS_URL } from '../../../../urls/navigation';
import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule';
-describe(
- 'Alert details expandable flyout right panel json tab',
- { env: { ftrConfig: { enableExperimental: ['securityFlyoutEnabled'] } } },
- () => {
- beforeEach(() => {
- cleanKibana();
- login();
- createRule(getNewRule());
- visit(ALERTS_URL);
- waitForAlertsToPopulate();
- expandFirstAlertExpandableFlyout();
- openJsonTab();
- });
+describe('Alert details expandable flyout right panel json tab', () => {
+ beforeEach(() => {
+ cleanKibana();
+ login();
+ createRule(getNewRule());
+ visit(ALERTS_URL);
+ waitForAlertsToPopulate();
+ expandFirstAlertExpandableFlyout();
+ openJsonTab();
+ });
- it('should display the json component', () => {
- // the json component is rendered within a dom element with overflow, so Cypress isn't finding it
- // this next line is a hack that vertically scrolls down to ensure Cypress finds it
- scrollWithinDocumentDetailsExpandableFlyoutRightSection(0, 7000);
- cy.get(DOCUMENT_DETAILS_FLYOUT_JSON_TAB_CONTENT).should('be.visible');
- });
- }
-);
+ it('should display the json component', () => {
+ // the json component is rendered within a dom element with overflow, so Cypress isn't finding it
+ // this next line is a hack that vertically scrolls down to ensure Cypress finds it
+ scrollWithinDocumentDetailsExpandableFlyoutRightSection(0, 7000);
+ cy.get(DOCUMENT_DETAILS_FLYOUT_JSON_TAB_CONTENT).should('be.visible');
+ });
+});
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts
index 9dc5dccbddcc3..ec8328cbc961f 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts
@@ -69,292 +69,287 @@ import {
DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_USER_DETAILS,
} from '../../../../screens/expandable_flyout/alert_details_left_panel_entities_tab';
-describe(
- 'Alert details expandable flyout right panel overview tab',
- { env: { ftrConfig: { enableExperimental: ['securityFlyoutEnabled'] } } },
- () => {
- const rule = getNewRule();
-
- beforeEach(() => {
- cleanKibana();
- login();
- createRule(rule);
- visit(ALERTS_URL);
- waitForAlertsToPopulate();
- expandFirstAlertExpandableFlyout();
+describe('Alert details expandable flyout right panel overview tab', () => {
+ const rule = getNewRule();
+
+ beforeEach(() => {
+ cleanKibana();
+ login();
+ createRule(rule);
+ visit(ALERTS_URL);
+ waitForAlertsToPopulate();
+ expandFirstAlertExpandableFlyout();
+ });
+
+ describe('about section', () => {
+ it('should display about section', () => {
+ cy.log('header and content');
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ABOUT_SECTION_HEADER)
+ .should('be.visible')
+ .and('have.text', 'About');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ABOUT_SECTION_CONTENT).should('be.visible');
+
+ cy.log('description');
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_TITLE)
+ .should('be.visible')
+ .and('contain.text', 'Rule description');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_TITLE)
+ .should('be.visible')
+ .within(() => {
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_OPEN_RULE_PREVIEW_BUTTON)
+ .should('be.visible')
+ .and('have.text', 'Rule summary');
+ });
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_DETAILS)
+ .should('be.visible')
+ .and('have.text', rule.description);
+
+ cy.log('reason');
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_REASON_TITLE)
+ .should('be.visible')
+ .and('have.text', 'Alert reason');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_REASON_DETAILS)
+ .should('be.visible')
+ .and('contain.text', rule.name);
+
+ cy.log('mitre attack');
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_MITRE_ATTACK_TITLE)
+ .should('be.visible')
+ // @ts-ignore
+ .and('contain.text', rule.threat[0].framework);
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_MITRE_ATTACK_DETAILS)
+ .should('be.visible')
+ // @ts-ignore
+ .and('contain.text', rule.threat[0].technique[0].name)
+ // @ts-ignore
+ .and('contain.text', rule.threat[0].tactic.name);
});
+ });
- describe('about section', () => {
- it('should display about section', () => {
- cy.log('header and content');
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ABOUT_SECTION_HEADER)
- .should('be.visible')
- .and('have.text', 'About');
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ABOUT_SECTION_CONTENT).should('be.visible');
-
- cy.log('description');
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_TITLE)
- .should('be.visible')
- .and('contain.text', 'Rule description');
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_TITLE)
- .should('be.visible')
- .within(() => {
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_OPEN_RULE_PREVIEW_BUTTON)
- .should('be.visible')
- .and('have.text', 'Rule summary');
- });
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_DETAILS)
- .should('be.visible')
- .and('have.text', rule.description);
-
- cy.log('reason');
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_REASON_TITLE)
- .should('be.visible')
- .and('have.text', 'Alert reason');
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_REASON_DETAILS)
- .should('be.visible')
- .and('contain.text', rule.name);
-
- cy.log('mitre attack');
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_MITRE_ATTACK_TITLE)
- .should('be.visible')
- // @ts-ignore
- .and('contain.text', rule.threat[0].framework);
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_MITRE_ATTACK_DETAILS)
- .should('be.visible')
- // @ts-ignore
- .and('contain.text', rule.threat[0].technique[0].name)
- // @ts-ignore
- .and('contain.text', rule.threat[0].tactic.name);
- });
+ describe('visualizations section', () => {
+ it('should display analyzer and session previews', () => {
+ toggleOverviewTabAboutSection();
+ toggleOverviewTabVisualizationsSection();
+
+ cy.log('analyzer graph preview');
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ANALYZER_TREE).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ANALYZER_TREE).should('be.visible');
+
+ cy.log('session view preview');
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_SESSION_PREVIEW).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_SESSION_PREVIEW).should('be.visible');
});
+ });
+
+ describe('investigation section', () => {
+ it('should display investigation section', () => {
+ toggleOverviewTabAboutSection();
+ toggleOverviewTabInvestigationSection();
+
+ cy.log('header and content');
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INVESTIGATION_SECTION_HEADER)
+ .should('be.visible')
+ .and('have.text', 'Investigation');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INVESTIGATION_SECTION_CONTENT).should(
+ 'be.visible'
+ );
+
+ cy.log('investigation guide button');
- describe('visualizations section', () => {
- it('should display analyzer and session previews', () => {
- toggleOverviewTabAboutSection();
- toggleOverviewTabVisualizationsSection();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INVESTIGATION_GUIDE_BUTTON)
+ .should('be.visible')
+ .and('have.text', 'Investigation guide');
- cy.log('analyzer graph preview');
+ cy.log('should navigate to left Investigation tab');
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ANALYZER_TREE).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ANALYZER_TREE).should('be.visible');
+ clickInvestigationGuideButton();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INVESTIGATION_TAB_CONTENT).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INVESTIGATION_TAB_CONTENT).should('be.visible');
- cy.log('session view preview');
+ cy.log('highlighted fields');
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_HEADER_TITLE)
+ .should('be.visible')
+ .and('have.text', 'Highlighted fields');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_DETAILS).should('be.visible');
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_TABLE_FIELD_CELL)
+ .should('be.visible')
+ .and('contain.text', 'host.name');
+ const hostNameCell =
+ DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_TABLE_VALUE_CELL('siem-kibana');
+ cy.get(hostNameCell).should('be.visible').and('have.text', 'siem-kibana');
+
+ cy.get(hostNameCell).click();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_HOST_DETAILS).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_HOST_DETAILS).should('be.visible');
+
+ collapseDocumentDetailsExpandableFlyoutLeftSection();
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_TABLE_FIELD_CELL)
+ .should('be.visible')
+ .and('contain.text', 'user.name');
+ const userNameCell =
+ DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_TABLE_VALUE_CELL('test');
+ cy.get(userNameCell).should('be.visible').and('have.text', 'test');
+
+ cy.get(userNameCell).click();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_USER_DETAILS).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_USER_DETAILS).should('be.visible');
+ });
+ });
+
+ describe('insights section', () => {
+ it('should display entities section', () => {
+ toggleOverviewTabAboutSection();
+ toggleOverviewTabInsightsSection();
+
+ cy.log('header and content');
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITIES_HEADER).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITIES_HEADER)
+ .should('be.visible')
+ .and('have.text', 'Entities');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITIES_CONTENT).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITY_PANEL_HEADER).should(
+ 'be.visible'
+ );
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITY_PANEL_CONTENT).should(
+ 'be.visible'
+ );
+
+ cy.log('should navigate to left panel Entities tab');
+
+ clickEntitiesViewAllButton();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_CONTENT).should('be.visible');
+ });
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_SESSION_PREVIEW).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_SESSION_PREVIEW).should('be.visible');
- });
+ // TODO: skipping this due to flakiness
+ it.skip('should display threat intelligence section', () => {
+ toggleOverviewTabAboutSection();
+ toggleOverviewTabInsightsSection();
+
+ cy.log('header and content');
+
+ cy.get(
+ DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_HEADER
+ ).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_HEADER)
+ .should('be.visible')
+ .and('have.text', 'Threat Intelligence');
+ cy.get(
+ DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_CONTENT
+ ).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_CONTENT)
+ .should('be.visible')
+ .within(() => {
+ // threat match detected
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_VALUES)
+ .eq(0)
+ .should('be.visible')
+ .and('have.text', '0 threat match detected'); // TODO work on getting proper IoC data to get proper data here
+
+ // field with threat enrichement
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_VALUES)
+ .eq(1)
+ .should('be.visible')
+ .and('have.text', '0 field enriched with threat intelligence'); // TODO work on getting proper IoC data to get proper data here
+ });
+
+ cy.log('should navigate to left panel Threat Intelligence tab');
+
+ clickThreatIntelligenceViewAllButton();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_CONTENT).should('be.visible'); // TODO update when we can navigate to Threat Intelligence sub tab directly
});
- describe('investigation section', () => {
- it('should display investigation section', () => {
- toggleOverviewTabAboutSection();
- toggleOverviewTabInvestigationSection();
-
- cy.log('header and content');
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INVESTIGATION_SECTION_HEADER)
- .should('be.visible')
- .and('have.text', 'Investigation');
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INVESTIGATION_SECTION_CONTENT).should(
- 'be.visible'
- );
-
- cy.log('investigation guide button');
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INVESTIGATION_GUIDE_BUTTON)
- .should('be.visible')
- .and('have.text', 'Investigation guide');
-
- cy.log('should navigate to left Investigation tab');
-
- clickInvestigationGuideButton();
- cy.get(DOCUMENT_DETAILS_FLYOUT_INVESTIGATION_TAB_CONTENT).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_INVESTIGATION_TAB_CONTENT).should('be.visible');
-
- cy.log('highlighted fields');
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_HEADER_TITLE)
- .should('be.visible')
- .and('have.text', 'Highlighted fields');
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_DETAILS).should(
- 'be.visible'
- );
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_TABLE_FIELD_CELL)
- .should('be.visible')
- .and('contain.text', 'host.name');
- const hostNameCell =
- DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_TABLE_VALUE_CELL('siem-kibana');
- cy.get(hostNameCell).should('be.visible').and('have.text', 'siem-kibana');
-
- cy.get(hostNameCell).click();
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_HOST_DETAILS).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_HOST_DETAILS).should('be.visible');
-
- collapseDocumentDetailsExpandableFlyoutLeftSection();
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_TABLE_FIELD_CELL)
- .should('be.visible')
- .and('contain.text', 'user.name');
- const userNameCell =
- DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_TABLE_VALUE_CELL('test');
- cy.get(userNameCell).should('be.visible').and('have.text', 'test');
-
- cy.get(userNameCell).click();
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_USER_DETAILS).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_USER_DETAILS).should('be.visible');
- });
+ // TODO: skipping this due to flakiness
+ it.skip('should display correlations section', () => {
+ cy.log('link the alert to a new case');
+
+ createNewCaseFromExpandableFlyout();
+
+ toggleOverviewTabAboutSection();
+ toggleOverviewTabInsightsSection();
+
+ cy.log('header and content');
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_HEADER).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_HEADER)
+ .should('be.visible')
+ .and('have.text', 'Correlations');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_CONTENT).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_CONTENT)
+ .should('be.visible')
+ .within(() => {
+ // TODO the order in which these appear is not deterministic currently, hence this can cause flakiness
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VALUES)
+ .eq(0)
+ .should('be.visible')
+ .and('have.text', '1 alert related by ancestry');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VALUES)
+ .eq(1)
+ .should('be.visible')
+ .and('have.text', '1 related case');
+ // cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VALUES)
+ // .eq(2)
+ // .should('be.visible')
+ // .and('have.text', '1 alert related by the same source event'); // TODO work on getting proper data to display some same source data here
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VALUES)
+ .eq(2)
+ .should('be.visible')
+ .and('have.text', '1 alert related by session');
+ });
+
+ cy.log('should navigate to left panel Correlations tab');
+
+ clickCorrelationsViewAllButton();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_CONTENT).should('be.visible'); // TODO update when we can navigate to Correlations sub tab directly
});
- describe('insights section', () => {
- it('should display entities section', () => {
- toggleOverviewTabAboutSection();
- toggleOverviewTabInsightsSection();
-
- cy.log('header and content');
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITIES_HEADER).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITIES_HEADER)
- .should('be.visible')
- .and('have.text', 'Entities');
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITIES_CONTENT).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITY_PANEL_HEADER).should(
- 'be.visible'
- );
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITY_PANEL_CONTENT).should(
- 'be.visible'
- );
-
- cy.log('should navigate to left panel Entities tab');
-
- clickEntitiesViewAllButton();
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_CONTENT).should('be.visible');
- });
-
- it('should display threat intelligence section', () => {
- toggleOverviewTabAboutSection();
- toggleOverviewTabInsightsSection();
-
- cy.log('header and content');
-
- cy.get(
- DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_HEADER
- ).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_HEADER)
- .should('be.visible')
- .and('have.text', 'Threat Intelligence');
- cy.get(
- DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_CONTENT
- ).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_CONTENT)
- .should('be.visible')
- .within(() => {
- // threat match detected
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_VALUES)
- .eq(0)
- .should('be.visible')
- .and('have.text', '0 threat match detected'); // TODO work on getting proper IoC data to get proper data here
-
- // field with threat enrichement
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_VALUES)
- .eq(1)
- .should('be.visible')
- .and('have.text', '0 field enriched with threat intelligence'); // TODO work on getting proper IoC data to get proper data here
- });
-
- cy.log('should navigate to left panel Threat Intelligence tab');
-
- clickThreatIntelligenceViewAllButton();
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_CONTENT).should('be.visible'); // TODO update when we can navigate to Threat Intelligence sub tab directly
- });
-
- // TODO: skipping this due to flakiness
- it.skip('should display correlations section', () => {
- cy.log('link the alert to a new case');
-
- createNewCaseFromExpandableFlyout();
-
- toggleOverviewTabAboutSection();
- toggleOverviewTabInsightsSection();
-
- cy.log('header and content');
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_HEADER).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_HEADER)
- .should('be.visible')
- .and('have.text', 'Correlations');
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_CONTENT).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_CONTENT)
- .should('be.visible')
- .within(() => {
- // TODO the order in which these appear is not deterministic currently, hence this can cause flakiness
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VALUES)
- .eq(0)
- .should('be.visible')
- .and('have.text', '1 alert related by ancestry');
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VALUES)
- .eq(1)
- .should('be.visible')
- .and('have.text', '1 related case');
- // cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VALUES)
- // .eq(2)
- // .should('be.visible')
- // .and('have.text', '1 alert related by the same source event'); // TODO work on getting proper data to display some same source data here
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VALUES)
- .eq(2)
- .should('be.visible')
- .and('have.text', '1 alert related by session');
- });
-
- cy.log('should navigate to left panel Correlations tab');
-
- clickCorrelationsViewAllButton();
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_CONTENT).should('be.visible'); // TODO update when we can navigate to Correlations sub tab directly
- });
-
- // TODO work on getting proper data to make the prevalence section work here
- // we need to generate enough data to have at least one field with prevalence
- it.skip('should display prevalence section', () => {
- toggleOverviewTabAboutSection();
- toggleOverviewTabInsightsSection();
-
- cy.log('header and content');
-
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_HEADER).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_HEADER)
- .should('be.visible')
- .and('have.text', 'Prevalence');
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_CONTENT).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_CONTENT)
- .should('be.visible')
- .within(() => {
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_VALUES)
- .should('be.visible')
- .and('have.text', 'is uncommon');
- });
-
- cy.log('should navigate to left panel Prevalence tab');
-
- clickPrevalenceViewAllButton();
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_CONTENT).should('be.visible'); // TODO update when we can navigate to Prevalence sub tab directly
- });
+ // TODO work on getting proper data to make the prevalence section work here
+ // we need to generate enough data to have at least one field with prevalence
+ it.skip('should display prevalence section', () => {
+ toggleOverviewTabAboutSection();
+ toggleOverviewTabInsightsSection();
+
+ cy.log('header and content');
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_HEADER).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_HEADER)
+ .should('be.visible')
+ .and('have.text', 'Prevalence');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_CONTENT).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_CONTENT)
+ .should('be.visible')
+ .within(() => {
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_VALUES)
+ .should('be.visible')
+ .and('have.text', 'is uncommon');
+ });
+
+ cy.log('should navigate to left panel Prevalence tab');
+
+ clickPrevalenceViewAllButton();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_CONTENT).should('be.visible'); // TODO update when we can navigate to Prevalence sub tab directly
});
+ });
- describe('response section', () => {
- it('should display empty message', () => {
- toggleOverviewTabAboutSection();
- toggleOverviewTabResponseSection();
+ describe('response section', () => {
+ it('should display empty message', () => {
+ toggleOverviewTabAboutSection();
+ toggleOverviewTabResponseSection();
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_RESPONSE_SECTION_EMPTY_RESPONSE).should(
- 'be.visible'
- );
- });
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_RESPONSE_SECTION_EMPTY_RESPONSE).should(
+ 'be.visible'
+ );
});
- }
-);
+ });
+});
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_table_tab.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_table_tab.cy.ts
index 9e30ba52b3cdd..ff89e16a02b03 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_table_tab.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_table_tab.cy.ts
@@ -31,52 +31,48 @@ import { getNewRule } from '../../../../objects/rule';
import { ALERTS_URL } from '../../../../urls/navigation';
import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule';
-describe(
- 'Alert details expandable flyout right panel table tab',
- { env: { ftrConfig: { enableExperimental: ['securityFlyoutEnabled'] } } },
- () => {
- beforeEach(() => {
- cleanKibana();
- login();
- createRule(getNewRule());
- visit(ALERTS_URL);
- waitForAlertsToPopulate();
- expandFirstAlertExpandableFlyout();
- openTableTab();
- });
+describe('Alert details expandable flyout right panel table tab', () => {
+ beforeEach(() => {
+ cleanKibana();
+ login();
+ createRule(getNewRule());
+ visit(ALERTS_URL);
+ waitForAlertsToPopulate();
+ expandFirstAlertExpandableFlyout();
+ openTableTab();
+ });
- it('should display and filter the table', () => {
- cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_TIMESTAMP_ROW).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_ID_ROW).should('be.visible');
- filterTableTabTable('timestamp');
- cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_TIMESTAMP_ROW).should('be.visible');
- clearFilterTableTabTable();
- });
+ it('should display and filter the table', () => {
+ cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_TIMESTAMP_ROW).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_ID_ROW).should('be.visible');
+ filterTableTabTable('timestamp');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_TIMESTAMP_ROW).should('be.visible');
+ clearFilterTableTabTable();
+ });
- it('should test cell actions', () => {
- cy.log('cell actions filter in');
+ it('should test cell actions', () => {
+ cy.log('cell actions filter in');
- filterInTableTabTable();
- cy.get(FILTER_BADGE).first().should('contain.text', '@timestamp:');
- removeKqlFilter();
+ filterInTableTabTable();
+ cy.get(FILTER_BADGE).first().should('contain.text', '@timestamp:');
+ removeKqlFilter();
- cy.log('cell actions filter out');
+ cy.log('cell actions filter out');
- filterOutTableTabTable();
- cy.get(FILTER_BADGE).first().should('contain.text', 'NOT @timestamp:');
- removeKqlFilter();
+ filterOutTableTabTable();
+ cy.get(FILTER_BADGE).first().should('contain.text', 'NOT @timestamp:');
+ removeKqlFilter();
- cy.log('cell actions add to timeline');
+ cy.log('cell actions add to timeline');
- addToTimelineTableTabTable();
- openActiveTimeline();
- cy.get(PROVIDER_BADGE).first().should('contain.text', '@timestamp');
- closeTimeline();
+ addToTimelineTableTabTable();
+ openActiveTimeline();
+ cy.get(PROVIDER_BADGE).first().should('contain.text', '@timestamp');
+ closeTimeline();
- cy.log('cell actions copy to clipboard');
+ cy.log('cell actions copy to clipboard');
- copyToClipboardTableTabTable();
- cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_ROW_CELL_COPY_TO_CLIPBOARD).should('be.visible');
- });
- }
-);
+ copyToClipboardTableTabTable();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_ROW_CELL_COPY_TO_CLIPBOARD).should('be.visible');
+ });
+});
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_url_sync.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_url_sync.cy.ts
index fa268bfdfa341..e926e93e63301 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_url_sync.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_url_sync.cy.ts
@@ -15,43 +15,39 @@ import { closeFlyout } from '../../../../tasks/expandable_flyout/alert_details_r
import { expandFirstAlertExpandableFlyout } from '../../../../tasks/expandable_flyout/common';
import { DOCUMENT_DETAILS_FLYOUT_HEADER_TITLE } from '../../../../screens/expandable_flyout/alert_details_right_panel';
-describe(
- 'Expandable flyout state sync',
- { env: { ftrConfig: { enableExperimental: ['securityFlyoutEnabled'] } } },
- () => {
- const rule = getNewRule();
+describe('Expandable flyout state sync', () => {
+ const rule = getNewRule();
- beforeEach(() => {
- cleanKibana();
- login();
- createRule(rule);
- visit(ALERTS_URL);
- waitForAlertsToPopulate();
- });
+ beforeEach(() => {
+ cleanKibana();
+ login();
+ createRule(rule);
+ visit(ALERTS_URL);
+ waitForAlertsToPopulate();
+ });
- it('should test flyout url sync', () => {
- cy.url().should('not.include', 'eventFlyout');
+ it('should test flyout url sync', () => {
+ cy.url().should('not.include', 'eventFlyout');
- expandFirstAlertExpandableFlyout();
+ expandFirstAlertExpandableFlyout();
- cy.log('should serialize its state to url');
+ cy.log('should serialize its state to url');
- cy.url().should('include', 'eventFlyout');
- cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_TITLE).should('be.visible').and('have.text', rule.name);
+ cy.url().should('include', 'eventFlyout');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_TITLE).should('be.visible').and('have.text', rule.name);
- cy.log('should reopen the flyout after browser refresh');
+ cy.log('should reopen the flyout after browser refresh');
- cy.reload();
- waitForAlertsToPopulate();
+ cy.reload();
+ waitForAlertsToPopulate();
- cy.url().should('include', 'eventFlyout');
- cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_TITLE).should('be.visible').and('have.text', rule.name);
+ cy.url().should('include', 'eventFlyout');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_TITLE).should('be.visible').and('have.text', rule.name);
- cy.log('should clear the url state when flyout is closed');
+ cy.log('should clear the url state when flyout is closed');
- closeFlyout();
+ closeFlyout();
- cy.url().should('not.include', 'eventFlyout');
- });
- }
-);
+ cy.url().should('not.include', 'eventFlyout');
+ });
+});
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/investigate_in_timeline.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/investigate_in_timeline.cy.ts
index 5a8c382bdf4af..5ef959899178a 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/investigate_in_timeline.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/investigate_in_timeline.cy.ts
@@ -5,6 +5,7 @@
* 2.0.
*/
+import { disableExpandableFlyout } from '../../../tasks/api_calls/kibana_advanced_settings';
import { getNewRule } from '../../../objects/rule';
import { PROVIDER_BADGE, QUERY_TAB_BUTTON, TIMELINE_TITLE } from '../../../screens/timeline';
import { FILTER_BADGE } from '../../../screens/alerts';
@@ -53,6 +54,7 @@ describe('Investigate in timeline', () => {
describe('From alerts details flyout', () => {
beforeEach(() => {
login();
+ disableExpandableFlyout();
visit(ALERTS_URL);
waitForAlertsToPopulate();
expandFirstAlert();
diff --git a/x-pack/plugins/security_solution/cypress/tasks/api_calls/kibana_advanced_settings.ts b/x-pack/plugins/security_solution/cypress/tasks/api_calls/kibana_advanced_settings.ts
index 0cadb50d72fe1..6256539beca1d 100644
--- a/x-pack/plugins/security_solution/cypress/tasks/api_calls/kibana_advanced_settings.ts
+++ b/x-pack/plugins/security_solution/cypress/tasks/api_calls/kibana_advanced_settings.ts
@@ -27,3 +27,8 @@ export const enableRelatedIntegrations = () => {
export const disableRelatedIntegrations = () => {
kibanaSettings(relatedIntegrationsBody(false));
};
+
+export const disableExpandableFlyout = () => {
+ const body = { changes: { 'securitySolution:enableExpandableFlyout': false } };
+ kibanaSettings(body);
+};
diff --git a/x-pack/plugins/security_solution/public/common/components/control_columns/row_action/index.tsx b/x-pack/plugins/security_solution/public/common/components/control_columns/row_action/index.tsx
index cd226d4347af6..2e9493dc6ff42 100644
--- a/x-pack/plugins/security_solution/public/common/components/control_columns/row_action/index.tsx
+++ b/x-pack/plugins/security_solution/public/common/components/control_columns/row_action/index.tsx
@@ -10,6 +10,8 @@ import React, { useCallback, useMemo } from 'react';
import { useDispatch } from 'react-redux';
import { useExpandableFlyoutContext } from '@kbn/expandable-flyout';
import { dataTableActions } from '@kbn/securitysolution-data-table';
+import { useUiSetting$ } from '@kbn/kibana-react-plugin/public';
+import { ENABLE_EXPANDABLE_FLYOUT_SETTING } from '../../../../../common/constants';
import { RightPanelKey } from '../../../../flyout/right';
import type {
SetEventsDeleted,
@@ -21,7 +23,6 @@ import { getMappedNonEcsValue } from '../../../../timelines/components/timeline/
import type { TimelineItem, TimelineNonEcsData } from '../../../../../common/search_strategy';
import type { ColumnHeaderOptions, OnRowSelected } from '../../../../../common/types/timeline';
-import { useIsExperimentalFeatureEnabled } from '../../../hooks/use_experimental_features';
type Props = EuiDataGridCellValueElementProps & {
columnHeaders: ColumnHeaderOptions[];
@@ -70,7 +71,7 @@ const RowActionComponent = ({
const { openFlyout } = useExpandableFlyoutContext();
const dispatch = useDispatch();
- const isSecurityFlyoutEnabled = useIsExperimentalFeatureEnabled('securityFlyoutEnabled');
+ const [isSecurityFlyoutEnabled] = useUiSetting$(ENABLE_EXPANDABLE_FLYOUT_SETTING);
const columnValues = useMemo(
() =>
diff --git a/x-pack/plugins/security_solution/public/detections/pages/alerts/alert_details_redirect.test.tsx b/x-pack/plugins/security_solution/public/detections/pages/alerts/alert_details_redirect.test.tsx
index 620f562a7bf5a..94a96a0958725 100644
--- a/x-pack/plugins/security_solution/public/detections/pages/alerts/alert_details_redirect.test.tsx
+++ b/x-pack/plugins/security_solution/public/detections/pages/alerts/alert_details_redirect.test.tsx
@@ -156,7 +156,7 @@ describe('AlertDetailsRedirect', () => {
const [{ search, pathname }] = historyMock.replace.mock.lastCall;
- expect(search as string).toMatch(/eventFlyout.*right/);
+ expect(search as string).toMatch(/eventFlyout.*/);
expect(pathname).toEqual(ALERTS_PATH);
});
});
diff --git a/x-pack/plugins/security_solution/public/detections/pages/alerts/alert_details_redirect.tsx b/x-pack/plugins/security_solution/public/detections/pages/alerts/alert_details_redirect.tsx
index 0786b4cdf3824..41516d06942ff 100644
--- a/x-pack/plugins/security_solution/public/detections/pages/alerts/alert_details_redirect.tsx
+++ b/x-pack/plugins/security_solution/public/detections/pages/alerts/alert_details_redirect.tsx
@@ -12,12 +12,16 @@ import { Redirect, useLocation, useParams } from 'react-router-dom';
import moment from 'moment';
import { encode } from '@kbn/rison';
import { ALERT_WORKFLOW_STATUS } from '@kbn/rule-data-utils';
+import { useUiSetting$ } from '@kbn/kibana-react-plugin/public';
import type { FilterItemObj } from '../../../common/components/filter_group/types';
-import { ALERTS_PATH, DEFAULT_ALERTS_INDEX } from '../../../../common/constants';
+import {
+ ALERTS_PATH,
+ DEFAULT_ALERTS_INDEX,
+ ENABLE_EXPANDABLE_FLYOUT_SETTING,
+} from '../../../../common/constants';
import { URL_PARAM_KEY } from '../../../common/hooks/use_url_state';
import { inputsSelectors } from '../../../common/store';
import { formatPageFilterSearchParam } from '../../../../common/utils/format_page_filter_search_param';
-import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features';
import { resolveFlyoutParams } from './utils';
import { FLYOUT_URL_PARAM } from '../../../flyout/shared/hooks/url/use_sync_flyout_state_with_url';
@@ -70,7 +74,7 @@ export const AlertDetailsRedirect = () => {
const currentFlyoutParams = searchParams.get(FLYOUT_URL_PARAM);
- const isSecurityFlyoutEnabled = useIsExperimentalFeatureEnabled('securityFlyoutEnabled');
+ const [isSecurityFlyoutEnabled] = useUiSetting$(ENABLE_EXPANDABLE_FLYOUT_SETTING);
const urlParams = new URLSearchParams({
[URL_PARAM_KEY.appQuery]: kqlAppQuery,
diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/automated_response_actions.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/automated_response_actions.cy.ts
index a62e877f018e4..5bb5021a3229c 100644
--- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/automated_response_actions.cy.ts
+++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/automated_response_actions.cy.ts
@@ -11,7 +11,7 @@ import { closeAllToasts } from '../../tasks/toasts';
import { toggleRuleOffAndOn, visitRuleAlerts } from '../../tasks/isolate';
import { cleanupRule, loadRule } from '../../tasks/api_fixtures';
import { login } from '../../tasks/login';
-import { loadPage } from '../../tasks/common';
+import { disableExpandableFlyoutAdvancedSettings, loadPage } from '../../tasks/common';
import type { IndexedFleetEndpointPolicyResponse } from '../../../../../common/endpoint/data_loaders/index_fleet_endpoint_policy';
import { createAgentPolicyTask, getEndpointIntegrationVersion } from '../../tasks/fleet';
import { changeAlertsFilter } from '../../tasks/alerts';
@@ -60,6 +60,7 @@ describe('Automated Response Actions', () => {
beforeEach(() => {
login();
+ disableExpandableFlyoutAdvancedSettings();
});
describe('From alerts', () => {
diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/isolate.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/isolate.cy.ts
index ff4adacc9b73f..5ec6ed11c80a4 100644
--- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/isolate.cy.ts
+++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/isolate.cy.ts
@@ -23,7 +23,7 @@ import {
} from '../../tasks/isolate';
import { cleanupCase, cleanupRule, loadCase, loadRule } from '../../tasks/api_fixtures';
import { login } from '../../tasks/login';
-import { loadPage } from '../../tasks/common';
+import { disableExpandableFlyoutAdvancedSettings, loadPage } from '../../tasks/common';
import type { IndexedFleetEndpointPolicyResponse } from '../../../../../common/endpoint/data_loaders/index_fleet_endpoint_policy';
import { createAgentPolicyTask, getEndpointIntegrationVersion } from '../../tasks/fleet';
import type { CreateAndEnrollEndpointHostResponse } from '../../../../../scripts/endpoint/common/endpoint_host_services';
@@ -72,6 +72,7 @@ describe('Isolate command', () => {
beforeEach(() => {
login();
+ disableExpandableFlyoutAdvancedSettings();
});
describe('From manage', () => {
diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/automated_response_actions/no_license.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/automated_response_actions/no_license.cy.ts
index 4d830c959399a..3ef371b1c847b 100644
--- a/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/automated_response_actions/no_license.cy.ts
+++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/automated_response_actions/no_license.cy.ts
@@ -6,6 +6,7 @@
*/
import { generateRandomStringName } from '@kbn/osquery-plugin/cypress/tasks/integrations';
+import { disableExpandableFlyoutAdvancedSettings } from '../../../tasks/common';
import { APP_ALERTS_PATH } from '../../../../../../common/constants';
import { closeAllToasts } from '../../../tasks/toasts';
import { fillUpNewRule } from '../../../tasks/response_actions';
@@ -39,6 +40,7 @@ describe('No License', { env: { ftrConfig: { license: 'basic' } } }, () => {
const [endpointAgentId, endpointHostname] = generateRandomStringName(2);
before(() => {
login();
+ disableExpandableFlyoutAdvancedSettings();
indexEndpointRuleAlerts({
endpointAgentId,
endpointHostname,
diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/automated_response_actions/results.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/automated_response_actions/results.cy.ts
index bb3be124418f8..f0cac7527c19e 100644
--- a/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/automated_response_actions/results.cy.ts
+++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/automated_response_actions/results.cy.ts
@@ -6,6 +6,7 @@
*/
import { generateRandomStringName } from '@kbn/osquery-plugin/cypress/tasks/integrations';
+import { disableExpandableFlyoutAdvancedSettings } from '../../../tasks/common';
import { APP_ALERTS_PATH } from '../../../../../../common/constants';
import { closeAllToasts } from '../../../tasks/toasts';
import { indexEndpointHosts } from '../../../tasks/index_endpoint_hosts';
@@ -52,6 +53,7 @@ describe('Results', () => {
describe('see results when has RBAC', () => {
before(() => {
login(ROLE.endpoint_response_actions_access);
+ disableExpandableFlyoutAdvancedSettings();
});
it('see endpoint action', () => {
@@ -67,6 +69,7 @@ describe('Results', () => {
describe('do not see results results when does not have RBAC', () => {
before(() => {
login(ROLE.endpoint_response_actions_no_access);
+ disableExpandableFlyoutAdvancedSettings();
});
it('show the permission denied callout', () => {
diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/isolate.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/isolate.cy.ts
index f633fd25abdcc..8e3811c93ee0e 100644
--- a/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/isolate.cy.ts
+++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/isolate.cy.ts
@@ -24,7 +24,7 @@ import type { ReturnTypeFromChainable } from '../../types';
import { addAlertsToCase } from '../../tasks/add_alerts_to_case';
import { APP_ALERTS_PATH, APP_CASES_PATH, APP_PATH } from '../../../../../common/constants';
import { login } from '../../tasks/login';
-import { loadPage } from '../../tasks/common';
+import { disableExpandableFlyoutAdvancedSettings, loadPage } from '../../tasks/common';
import { indexNewCase } from '../../tasks/index_new_case';
import { indexEndpointHosts } from '../../tasks/index_endpoint_hosts';
import { indexEndpointRuleAlerts } from '../../tasks/index_endpoint_rule_alerts';
@@ -95,6 +95,7 @@ describe('Isolate command', () => {
let hostname: string;
before(() => {
+ disableExpandableFlyoutAdvancedSettings();
indexEndpointHosts({ withResponseActions: false, isolation: false }).then(
(indexEndpoints) => {
endpointData = indexEndpoints;
diff --git a/x-pack/plugins/security_solution/public/management/cypress/tasks/common.ts b/x-pack/plugins/security_solution/public/management/cypress/tasks/common.ts
index fb879fa5244b0..38866ec5b5d29 100644
--- a/x-pack/plugins/security_solution/public/management/cypress/tasks/common.ts
+++ b/x-pack/plugins/security_solution/public/management/cypress/tasks/common.ts
@@ -34,3 +34,23 @@ export const request = ({
headers: { ...COMMON_API_HEADERS, ...headers },
...options,
});
+
+const API_HEADERS = Object.freeze({ 'kbn-xsrf': 'cypress' });
+export const rootRequest = (
+ options: Partial
+): Cypress.Chainable> =>
+ cy.request({
+ auth: API_AUTH,
+ headers: API_HEADERS,
+ ...options,
+ });
+
+export const disableExpandableFlyoutAdvancedSettings = () => {
+ const body = { changes: { 'securitySolution:enableExpandableFlyout': false } };
+ rootRequest({
+ method: 'POST',
+ url: 'internal/kibana/settings',
+ body,
+ headers: { 'kbn-xsrf': 'cypress-creds' },
+ });
+};
diff --git a/x-pack/plugins/security_solution/server/ui_settings.ts b/x-pack/plugins/security_solution/server/ui_settings.ts
index f5ff542a7833f..6a41844e9e032 100644
--- a/x-pack/plugins/security_solution/server/ui_settings.ts
+++ b/x-pack/plugins/security_solution/server/ui_settings.ts
@@ -36,6 +36,7 @@ import {
EXTENDED_RULE_EXECUTION_LOGGING_MIN_LEVEL_SETTING,
DEFAULT_ALERT_TAGS_KEY,
DEFAULT_ALERT_TAGS_VALUE,
+ ENABLE_EXPANDABLE_FLYOUT_SETTING,
} from '../common/constants';
import type { ExperimentalFeatures } from '../common/experimental_features';
import { LogLevelSetting } from '../common/api/detection_engine/rule_monitoring';
@@ -163,6 +164,22 @@ export const initUiSettings = (
requiresPageReload: true,
schema: schema.boolean(),
},
+ [ENABLE_EXPANDABLE_FLYOUT_SETTING]: {
+ name: i18n.translate('xpack.securitySolution.uiSettings.enableExpandableFlyoutLabel', {
+ defaultMessage: 'Expandable flyout',
+ }),
+ value: true,
+ description: i18n.translate(
+ 'xpack.securitySolution.uiSettings.enableExpandableFlyoutDescription',
+ {
+ defaultMessage: 'Enables the expandable flyout
',
+ }
+ ),
+ type: 'boolean',
+ category: [APP_ID],
+ requiresPageReload: true,
+ schema: schema.boolean(),
+ },
[DEFAULT_RULES_TABLE_REFRESH_SETTING]: {
name: i18n.translate('xpack.securitySolution.uiSettings.rulesTableRefresh', {
defaultMessage: 'Rules auto refresh',
diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/responder.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/responder.ts
index 586b07261e76c..dc2183d6f0fee 100644
--- a/x-pack/test/security_solution_endpoint/apps/endpoint/responder.ts
+++ b/x-pack/test/security_solution_endpoint/apps/endpoint/responder.ts
@@ -197,6 +197,12 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
let indexedAlerts: IndexedEndpointRuleAlerts;
before(async () => {
+ await getService('kibanaServer').request({
+ path: `internal/kibana/settings`,
+ method: 'POST',
+ body: { changes: { 'securitySolution:enableExpandableFlyout': false } },
+ });
+
indexedAlerts = await detectionsTestService.loadEndpointRuleAlerts(endpointAgentId);
await detectionsTestService.waitForAlerts(
From 2ba659d09102e48385422df26e692b44ba426978 Mon Sep 17 00:00:00 2001
From: Juan Pablo Djeredjian
Date: Fri, 11 Aug 2023 15:30:40 +0200
Subject: [PATCH 13/46] =?UTF-8?q?[Security=20Solution]=20Fix=20flaky=20tes?=
=?UTF-8?q?t:=20x-pack/test/detection=5Fengine=5Fapi=5Fintegration/securit?=
=?UTF-8?q?y=5Fand=5Fspaces/update=5Fprebuilt=5Frules=5Fpackage/update=5Fp?=
=?UTF-8?q?rebuilt=5Frules=5Fpackage=C2=B7ts=20-=20update=5Fprebuilt=5Frul?=
=?UTF-8?q?es=5Fpackage=20should=20allow=20user=20to=20install=20prebuilt?=
=?UTF-8?q?=20rules=20from=20scratch,=20then=20install=20new=20rules=20and?=
=?UTF-8?q?=20upgrade=20existing=20rules=20from=20the=20new=20package=20(#?=
=?UTF-8?q?163241)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Fixes: https://github.com/elastic/kibana/issues/162658
## Summary
- Fixes flaky test:
`x-pack/test/detection_engine_api_integration/security_and_spaces/update_prebuilt_rules_package/update_prebuilt_rules_package·ts`
- Test title: `update_prebuilt_rules_package should allow user to
install prebuilt rules from scratch, then install new rules and upgrade
existing rules from the new package`
## Passing flaky test runner
300 runs:
https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/2799
## Root cause and what this PR does
- On initial investigation, the flaky test runner was executed for this
test with 300 iterations and all of them succeeded. This gives us great
confidence that the test is not actually flaky.
- Further investigation showed that @kibanamachine reported this tests
as failing when running the CI for two backport PRs to `8.9`:
-
https://buildkite.com/elastic/kibana-on-merge/builds/33282#0189987d-3a80-49c2-8332-3105ec3c2109
-
https://buildkite.com/elastic/kibana-on-merge/builds/33444#0189b1fa-4bc4-4422-9ce9-5c9a24f11ad5
- These flakiness was caused **by a race condition** between the writing
of rules into indeces, and them being made available for reading. This
is a known issue, already and solved for other integration test, by
manually refreshing ES's indeces.
- In order to reduce the probability of flakiness in a similar scenario,
this PR adds code to refresh the indices after each rule installation or
upgrade during the test.
## Refactor
- Moves the refreshing of the indexes within the utility function that
write to indexes:
- `installPrebuiltRules`
- `upgradePrebuiltRules`
- `installPrebuiltRulesAndTimelines` (legacy, but still used)
- `installPrebuiltRulesFleetPackage`
- Creates 2 new utils:
- `installPrebuiltRulesPackageByVersion`, which installs
`security_detection_engine` package via Fleet API, with its version
passed in as param
- `getInstalledRules`, reusable function to fetch all installed rules
-
---------
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
---
.../basic/tests/coverage_overview.ts | 2 +-
.../install_latest_bundled_prebuilt_rules.ts | 18 ++--
.../prerelease_packages.ts | 12 +--
.../install_large_prebuilt_rules_package.ts | 4 +-
.../prebuilt_rules/fleet_integration.ts | 27 +-----
.../get_prebuilt_rules_status.ts | 40 ++++-----
.../get_prebuilt_timelines_status.ts | 2 +-
.../install_and_upgrade_prebuilt_rules.ts | 88 +++++++++----------
.../update_prebuilt_rules_package.ts | 61 ++++++-------
.../prebuilt_rules/get_installed_rules.ts | 30 +++++++
.../install_fleet_package_by_url.ts | 50 +++++++++++
.../install_mock_prebuilt_rules.ts | 2 +-
.../prebuilt_rules/install_prebuilt_rules.ts | 15 ++++
.../install_prebuilt_rules_and_timelines.ts | 15 ++++
.../install_prebuilt_rules_fleet_package.ts | 20 +++++
.../prebuilt_rules/upgrade_prebuilt_rules.ts | 16 ++++
16 files changed, 249 insertions(+), 153 deletions(-)
create mode 100644 x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/get_installed_rules.ts
create mode 100644 x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_fleet_package_by_url.ts
diff --git a/x-pack/test/detection_engine_api_integration/basic/tests/coverage_overview.ts b/x-pack/test/detection_engine_api_integration/basic/tests/coverage_overview.ts
index d7427a24657fa..d5e827d545a68 100644
--- a/x-pack/test/detection_engine_api_integration/basic/tests/coverage_overview.ts
+++ b/x-pack/test/detection_engine_api_integration/basic/tests/coverage_overview.ts
@@ -351,7 +351,7 @@ export default ({ getService }: FtrProviderContext): void => {
threat: generateThreatArray(1),
}),
]);
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
const expectedRule = await createRule(supertest, log, {
...getSimpleRule('rule-1'),
diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/bundled_prebuilt_rules_package/install_latest_bundled_prebuilt_rules.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/bundled_prebuilt_rules_package/install_latest_bundled_prebuilt_rules.ts
index 97717f00773d9..d9f710ba6afcf 100644
--- a/x-pack/test/detection_engine_api_integration/security_and_spaces/bundled_prebuilt_rules_package/install_latest_bundled_prebuilt_rules.ts
+++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/bundled_prebuilt_rules_package/install_latest_bundled_prebuilt_rules.ts
@@ -15,6 +15,7 @@ import { ALL_SAVED_OBJECT_INDICES } from '@kbn/core-saved-objects-server';
import { FtrProviderContext } from '../../common/ftr_provider_context';
import { deleteAllPrebuiltRuleAssets, deleteAllRules } from '../../utils';
import { getPrebuiltRulesStatus } from '../../utils/prebuilt_rules/get_prebuilt_rules_status';
+import { installPrebuiltRulesPackageByVersion } from '../../utils/prebuilt_rules/install_fleet_package_by_url';
// eslint-disable-next-line import/no-default-export
export default ({ getService }: FtrProviderContext): void => {
@@ -55,18 +56,17 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusBeforePackageInstallation.stats.num_prebuilt_rules_to_install).toBe(0);
expect(statusBeforePackageInstallation.stats.num_prebuilt_rules_to_upgrade).toBe(0);
- const EPM_URL = `/api/fleet/epm/packages/security_detection_engine/99.0.0`;
-
- const bundledInstallResponse = await supertest
- .post(EPM_URL)
- .set('kbn-xsrf', 'xxxx')
- .type('application/json')
- .send({ force: true })
- .expect(200);
+ const bundledInstallResponse = await installPrebuiltRulesPackageByVersion(
+ es,
+ supertest,
+ '99.0.0'
+ );
// As opposed to "registry"
- expect(bundledInstallResponse.body._meta.install_source).toBe('bundled');
+ expect(bundledInstallResponse._meta.install_source).toBe('bundled');
+ // Refresh ES indices to avoid race conditions between write and reading of indeces
+ // See implementation utility function at x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_prebuilt_rules_fleet_package.ts
await es.indices.refresh({ index: ALL_SAVED_OBJECT_INDICES });
// Verify that status is updated after package installation
diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/bundled_prebuilt_rules_package/prerelease_packages.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/bundled_prebuilt_rules_package/prerelease_packages.ts
index b1c32bf0e245e..fd69e3128c3e7 100644
--- a/x-pack/test/detection_engine_api_integration/security_and_spaces/bundled_prebuilt_rules_package/prerelease_packages.ts
+++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/bundled_prebuilt_rules_package/prerelease_packages.ts
@@ -4,11 +4,10 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
-import { ALL_SAVED_OBJECT_INDICES } from '@kbn/core-saved-objects-server';
-import { DETECTION_ENGINE_RULES_URL_FIND } from '@kbn/security-solution-plugin/common/constants';
import expect from 'expect';
import { FtrProviderContext } from '../../common/ftr_provider_context';
import { deleteAllPrebuiltRuleAssets, deleteAllRules } from '../../utils';
+import { getInstalledRules } from '../../utils/prebuilt_rules/get_installed_rules';
import { getPrebuiltRulesStatus } from '../../utils/prebuilt_rules/get_prebuilt_rules_status';
import { installPrebuiltRules } from '../../utils/prebuilt_rules/install_prebuilt_rules';
@@ -38,8 +37,7 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusBeforePackageInstallation.stats.num_prebuilt_rules_to_install).toBe(0);
expect(statusBeforePackageInstallation.stats.num_prebuilt_rules_to_upgrade).toBe(0);
- await installPrebuiltRules(supertest);
- await es.indices.refresh({ index: ALL_SAVED_OBJECT_INDICES });
+ await installPrebuiltRules(es, supertest);
// Verify that status is updated after package installation
const statusAfterPackageInstallation = await getPrebuiltRulesStatus(supertest);
@@ -48,11 +46,7 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusAfterPackageInstallation.stats.num_prebuilt_rules_to_upgrade).toBe(0);
// Get installed rules
- const { body: rulesResponse } = await supertest
- .get(DETECTION_ENGINE_RULES_URL_FIND)
- .set('kbn-xsrf', 'true')
- .send()
- .expect(200);
+ const rulesResponse = await getInstalledRules(supertest);
// Assert that installed rules are from package 99.0.0 and not from prerelease (beta) package
expect(rulesResponse.data.length).toBe(1);
diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/large_prebuilt_rules_package/install_large_prebuilt_rules_package.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/large_prebuilt_rules_package/install_large_prebuilt_rules_package.ts
index 9dd5e695c3772..c047413bdb90a 100644
--- a/x-pack/test/detection_engine_api_integration/security_and_spaces/large_prebuilt_rules_package/install_large_prebuilt_rules_package.ts
+++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/large_prebuilt_rules_package/install_large_prebuilt_rules_package.ts
@@ -5,7 +5,6 @@
* 2.0.
*/
import expect from 'expect';
-import { ALL_SAVED_OBJECT_INDICES } from '@kbn/core-saved-objects-server';
import { FtrProviderContext } from '../../common/ftr_provider_context';
import { deleteAllRules, getPrebuiltRulesAndTimelinesStatus } from '../../utils';
import { deleteAllPrebuiltRuleAssets } from '../../utils/prebuilt_rules/delete_all_prebuilt_rule_assets';
@@ -36,8 +35,7 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusBeforePackageInstallation.rules_not_updated).toBe(0);
// Install the package with 15000 prebuilt historical version of rules rules and 750 unique rules
- await installPrebuiltRulesAndTimelines(supertest);
- await es.indices.refresh({ index: ALL_SAVED_OBJECT_INDICES });
+ await installPrebuiltRulesAndTimelines(es, supertest);
// Verify that status is updated after package installation
const statusAfterPackageInstallation = await getPrebuiltRulesAndTimelinesStatus(supertest);
diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/prebuilt_rules/fleet_integration.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/prebuilt_rules/fleet_integration.ts
index e48530ad16513..1433cb7cac2ff 100644
--- a/x-pack/test/detection_engine_api_integration/security_and_spaces/prebuilt_rules/fleet_integration.ts
+++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/prebuilt_rules/fleet_integration.ts
@@ -5,7 +5,6 @@
* 2.0.
*/
import expect from 'expect';
-import { ALL_SAVED_OBJECT_INDICES } from '@kbn/core-saved-objects-server';
import { FtrProviderContext } from '../../common/ftr_provider_context';
import {
deleteAllRules,
@@ -43,24 +42,11 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusBeforePackageInstallation.rules_not_updated).toBe(0);
await installPrebuiltRulesFleetPackage({
+ es,
supertest,
overrideExistingPackage: true,
});
- // Before we proceed, we need to refresh saved object indices. This comment will explain why.
- // At the previous step we installed the Fleet package with prebuilt detection rules.
- // Prebuilt rules are assets that Fleet indexes as saved objects of a certain type.
- // Fleet does this via a savedObjectsClient.import() call with explicit `refresh: false`.
- // So, despite of the fact that the endpoint waits until the prebuilt rule assets will be
- // successfully indexed, it doesn't wait until they become "visible" for subsequent read
- // operations. Which is what we do next: we read these SOs in getPrebuiltRulesAndTimelinesStatus().
- // Now, the time left until the next refresh can be anything from 0 to the default value, and
- // it depends on the time when savedObjectsClient.import() call happens relative to the time of
- // the next refresh. Also, probably the refresh time can be delayed when ES is under load?
- // Anyway, here we have a race condition between a write and subsequent read operation, and to
- // fix it deterministically we have to refresh saved object indices and wait until it's done.
- await es.indices.refresh({ index: ALL_SAVED_OBJECT_INDICES });
-
// Verify that status is updated after package installation
const statusAfterPackageInstallation = await getPrebuiltRulesAndTimelinesStatus(supertest);
expect(statusAfterPackageInstallation.rules_installed).toBe(0);
@@ -68,19 +54,10 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusAfterPackageInstallation.rules_not_updated).toBe(0);
// Verify that all previously not installed rules were installed
- const response = await installPrebuiltRulesAndTimelines(supertest);
+ const response = await installPrebuiltRulesAndTimelines(es, supertest);
expect(response.rules_installed).toBe(statusAfterPackageInstallation.rules_not_installed);
expect(response.rules_updated).toBe(0);
- // Similar to the previous refresh, we need to do it again between the two operations:
- // - previous write operation: install prebuilt rules and timelines
- // - subsequent read operation: get prebuilt rules and timelines status
- // You may ask why? I'm not sure, probably because the write operation can install the Fleet
- // package under certain circumstances, and it all works with `refresh: false` again.
- // Anyway, there were flaky runs failing specifically at one of the next assertions,
- // which means some kind of the same race condition we have here too.
- await es.indices.refresh({ index: ALL_SAVED_OBJECT_INDICES });
-
// Verify that status is updated after rules installation
const statusAfterRuleInstallation = await getPrebuiltRulesAndTimelinesStatus(supertest);
expect(statusAfterRuleInstallation.rules_installed).toBe(response.rules_installed);
diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/prebuilt_rules/get_prebuilt_rules_status.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/prebuilt_rules/get_prebuilt_rules_status.ts
index ee5730cee39a8..ae43e3bdd5098 100644
--- a/x-pack/test/detection_engine_api_integration/security_and_spaces/prebuilt_rules/get_prebuilt_rules_status.ts
+++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/prebuilt_rules/get_prebuilt_rules_status.ts
@@ -82,7 +82,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should return the number of installed prebuilt rules after installing them', async () => {
await createPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRules(supertest);
+ await installPrebuiltRules(es, supertest);
const { stats } = await getPrebuiltRulesStatus(supertest);
expect(stats).toMatchObject({
@@ -95,7 +95,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should notify the user again that a rule is available for install after it is deleted', async () => {
await createPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRules(supertest);
+ await installPrebuiltRules(es, supertest);
await deleteRule(supertest, 'rule-1');
const { stats } = await getPrebuiltRulesStatus(supertest);
@@ -110,7 +110,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should return available rule updates', async () => {
const ruleAssetSavedObjects = getRuleAssetSavedObjects();
await createPrebuiltRuleAssetSavedObjects(es, ruleAssetSavedObjects);
- await installPrebuiltRules(supertest);
+ await installPrebuiltRules(es, supertest);
// Clear previous rule assets
await deleteAllPrebuiltRuleAssets(es);
@@ -130,7 +130,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should not return any available update if rule has been successfully upgraded', async () => {
const ruleAssetSavedObjects = getRuleAssetSavedObjects();
await createPrebuiltRuleAssetSavedObjects(es, ruleAssetSavedObjects);
- await installPrebuiltRules(supertest);
+ await installPrebuiltRules(es, supertest);
// Clear previous rule assets
await deleteAllPrebuiltRuleAssets(es);
@@ -138,7 +138,7 @@ export default ({ getService }: FtrProviderContext): void => {
ruleAssetSavedObjects[0]['security-rule'].version += 1;
await createPrebuiltRuleAssetSavedObjects(es, ruleAssetSavedObjects);
// Upgrade all rules
- await upgradePrebuiltRules(supertest);
+ await upgradePrebuiltRules(es, supertest);
const { stats } = await getPrebuiltRulesStatus(supertest);
expect(stats).toMatchObject({
@@ -152,7 +152,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should not return any updates if none are available', async () => {
const ruleAssetSavedObjects = getRuleAssetSavedObjects();
await createPrebuiltRuleAssetSavedObjects(es, ruleAssetSavedObjects);
- await installPrebuiltRules(supertest);
+ await installPrebuiltRules(es, supertest);
// Clear previous rule assets
await deleteAllPrebuiltRuleAssets(es);
@@ -193,7 +193,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should return the number of installed prebuilt rules after installing them', async () => {
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRules(supertest);
+ await installPrebuiltRules(es, supertest);
const { stats } = await getPrebuiltRulesStatus(supertest);
expect(stats).toMatchObject({
@@ -206,7 +206,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should notify the user again that a rule is available for install after it is deleted', async () => {
await createPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRules(supertest);
+ await installPrebuiltRules(es, supertest);
await deleteRule(supertest, 'rule-1');
const { stats } = await getPrebuiltRulesStatus(supertest);
@@ -220,7 +220,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should return available rule updates when previous historical versions available', async () => {
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRules(supertest);
+ await installPrebuiltRules(es, supertest);
// Add a new version of one of the installed rules
await createHistoricalPrebuiltRuleAssetSavedObjects(es, [
@@ -238,7 +238,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should return available rule updates when previous historical versions unavailable', async () => {
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRules(supertest);
+ await installPrebuiltRules(es, supertest);
// Delete the previous versions of rule assets
await deleteAllPrebuiltRuleAssets(es);
@@ -261,7 +261,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should not return available rule updates after rule has been upgraded', async () => {
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRules(supertest);
+ await installPrebuiltRules(es, supertest);
// Delete the previous versions of rule assets
await deleteAllPrebuiltRuleAssets(es);
@@ -272,7 +272,7 @@ export default ({ getService }: FtrProviderContext): void => {
]);
// Upgrade the rule
- await upgradePrebuiltRules(supertest);
+ await upgradePrebuiltRules(es, supertest);
const { stats } = await getPrebuiltRulesStatus(supertest);
expect(stats).toMatchObject({
@@ -339,7 +339,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should return the number of installed prebuilt rules after installing them', async () => {
await createPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
const body = await getPrebuiltRulesAndTimelinesStatus(supertest);
expect(body).toMatchObject({
@@ -352,7 +352,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should notify the user again that a rule is available for install after it is deleted', async () => {
await createPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
await deleteRule(supertest, 'rule-1');
const body = await getPrebuiltRulesAndTimelinesStatus(supertest);
@@ -367,7 +367,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should return available rule updates', async () => {
const ruleAssetSavedObjects = getRuleAssetSavedObjects();
await createPrebuiltRuleAssetSavedObjects(es, ruleAssetSavedObjects);
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
// Clear previous rule assets
await deleteAllPrebuiltRuleAssets(es);
@@ -387,7 +387,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should not return any updates if none are available', async () => {
const ruleAssetSavedObjects = getRuleAssetSavedObjects();
await createPrebuiltRuleAssetSavedObjects(es, ruleAssetSavedObjects);
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
// Clear previous rule assets
await deleteAllPrebuiltRuleAssets(es);
@@ -428,7 +428,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should return the number of installed prebuilt rules after installing them', async () => {
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
const body = await getPrebuiltRulesAndTimelinesStatus(supertest);
expect(body).toMatchObject({
@@ -441,7 +441,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should notify the user again that a rule is available for install after it is deleted', async () => {
await createPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
await deleteRule(supertest, 'rule-1');
const body = await getPrebuiltRulesAndTimelinesStatus(supertest);
@@ -455,7 +455,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should return available rule updates when previous historical versions available', async () => {
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
// Add a new version of one of the installed rules
await createHistoricalPrebuiltRuleAssetSavedObjects(es, [
@@ -473,7 +473,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should return available rule updates when previous historical versions unavailable', async () => {
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
// Delete the previous versions of rule assets
await deleteAllPrebuiltRuleAssets(es);
diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/prebuilt_rules/get_prebuilt_timelines_status.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/prebuilt_rules/get_prebuilt_timelines_status.ts
index 04275afe20dc9..05b34ffa98ed7 100644
--- a/x-pack/test/detection_engine_api_integration/security_and_spaces/prebuilt_rules/get_prebuilt_timelines_status.ts
+++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/prebuilt_rules/get_prebuilt_timelines_status.ts
@@ -35,7 +35,7 @@ export default ({ getService }: FtrProviderContext): void => {
});
it('should return the number of installed timeline templates after installing them', async () => {
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
const body = await getPrebuiltRulesAndTimelinesStatus(supertest);
expect(body).toMatchObject({
diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/prebuilt_rules/install_and_upgrade_prebuilt_rules.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/prebuilt_rules/install_and_upgrade_prebuilt_rules.ts
index c36b81f93cf7c..85af64415c95e 100644
--- a/x-pack/test/detection_engine_api_integration/security_and_spaces/prebuilt_rules/install_and_upgrade_prebuilt_rules.ts
+++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/prebuilt_rules/install_and_upgrade_prebuilt_rules.ts
@@ -6,7 +6,6 @@
*/
import expect from 'expect';
-import { DETECTION_ENGINE_RULES_URL_FIND } from '@kbn/security-solution-plugin/common/constants';
import { FtrProviderContext } from '../../common/ftr_provider_context';
import {
deleteAllRules,
@@ -24,6 +23,7 @@ import { installPrebuiltRulesAndTimelines } from '../../utils/prebuilt_rules/ins
import { installPrebuiltRules } from '../../utils/prebuilt_rules/install_prebuilt_rules';
import { getPrebuiltRulesStatus } from '../../utils/prebuilt_rules/get_prebuilt_rules_status';
import { upgradePrebuiltRules } from '../../utils/prebuilt_rules/upgrade_prebuilt_rules';
+import { getInstalledRules } from '../../utils/prebuilt_rules/get_installed_rules';
// eslint-disable-next-line import/no-default-export
export default ({ getService }: FtrProviderContext): void => {
@@ -50,7 +50,7 @@ export default ({ getService }: FtrProviderContext): void => {
describe('using legacy endpoint', () => {
it('should install prebuilt rules', async () => {
await createPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- const body = await installPrebuiltRulesAndTimelines(supertest);
+ const body = await installPrebuiltRulesAndTimelines(es, supertest);
expect(body.rules_installed).toBe(RULES_COUNT);
expect(body.rules_updated).toBe(0);
@@ -58,14 +58,10 @@ export default ({ getService }: FtrProviderContext): void => {
it('should install correct prebuilt rule versions', async () => {
await createPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
// Get installed rules
- const { body: rulesResponse } = await supertest
- .get(DETECTION_ENGINE_RULES_URL_FIND)
- .set('kbn-xsrf', 'true')
- .send()
- .expect(200);
+ const rulesResponse = await getInstalledRules(supertest);
// Check that all prebuilt rules were actually installed and their versions match the latest
expect(rulesResponse.total).toBe(RULES_COUNT);
@@ -82,7 +78,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should install missing prebuilt rules', async () => {
// Install all prebuilt detection rules
await createPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
// Delete one of the installed rules
await deleteRule(supertest, 'rule-1');
@@ -92,7 +88,7 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusResponse.rules_not_installed).toBe(1);
// Call the install prebuilt rules again and check that the missing rule was installed
- const response = await installPrebuiltRulesAndTimelines(supertest);
+ const response = await installPrebuiltRulesAndTimelines(es, supertest);
expect(response.rules_installed).toBe(1);
expect(response.rules_updated).toBe(0);
});
@@ -101,7 +97,7 @@ export default ({ getService }: FtrProviderContext): void => {
// Install all prebuilt detection rules
const ruleAssetSavedObjects = getRuleAssetSavedObjects();
await createPrebuiltRuleAssetSavedObjects(es, ruleAssetSavedObjects);
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
// Clear previous rule assets
await deleteAllPrebuiltRuleAssets(es);
@@ -114,7 +110,7 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusResponse.rules_not_updated).toBe(1);
// Call the install prebuilt rules again and check that the outdated rule was updated
- const response = await installPrebuiltRulesAndTimelines(supertest);
+ const response = await installPrebuiltRulesAndTimelines(es, supertest);
expect(response.rules_installed).toBe(0);
expect(response.rules_updated).toBe(1);
});
@@ -122,7 +118,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should not install prebuilt rules if they are up to date', async () => {
// Install all prebuilt detection rules
await createPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
// Check that all prebuilt rules were installed
const statusResponse = await getPrebuiltRulesAndTimelinesStatus(supertest);
@@ -130,7 +126,7 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusResponse.rules_not_updated).toBe(0);
// Call the install prebuilt rules again and check that no rules were installed
- const response = await installPrebuiltRulesAndTimelines(supertest);
+ const response = await installPrebuiltRulesAndTimelines(es, supertest);
expect(response.rules_installed).toBe(0);
expect(response.rules_updated).toBe(0);
});
@@ -139,7 +135,7 @@ export default ({ getService }: FtrProviderContext): void => {
describe('using current endpoint', () => {
it('should install prebuilt rules', async () => {
await createPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- const body = await installPrebuiltRules(supertest);
+ const body = await installPrebuiltRules(es, supertest);
expect(body.summary.succeeded).toBe(RULES_COUNT);
expect(body.summary.failed).toBe(0);
@@ -148,7 +144,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should install correct prebuilt rule versions', async () => {
await createPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- const body = await installPrebuiltRules(supertest);
+ const body = await installPrebuiltRules(es, supertest);
// Check that all prebuilt rules were actually installed and their versions match the latest
expect(body.results.created).toEqual(
@@ -164,7 +160,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should install missing prebuilt rules', async () => {
// Install all prebuilt detection rules
await createPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRules(supertest);
+ await installPrebuiltRules(es, supertest);
// Delete one of the installed rules
await deleteRule(supertest, 'rule-1');
@@ -174,7 +170,7 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusResponse.stats.num_prebuilt_rules_to_install).toBe(1);
// Call the install prebuilt rules again and check that the missing rule was installed
- const response = await installPrebuiltRules(supertest);
+ const response = await installPrebuiltRules(es, supertest);
expect(response.summary.succeeded).toBe(1);
});
@@ -182,7 +178,7 @@ export default ({ getService }: FtrProviderContext): void => {
// Install all prebuilt detection rules
const ruleAssetSavedObjects = getRuleAssetSavedObjects();
await createPrebuiltRuleAssetSavedObjects(es, ruleAssetSavedObjects);
- await installPrebuiltRules(supertest);
+ await installPrebuiltRules(es, supertest);
// Clear previous rule assets
await deleteAllPrebuiltRuleAssets(es);
@@ -196,7 +192,7 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusResponse.stats.num_prebuilt_rules_to_upgrade).toBe(1);
// Call the install prebuilt rules again and check that the outdated rule was updated
- const response = await upgradePrebuiltRules(supertest);
+ const response = await upgradePrebuiltRules(es, supertest);
expect(response.summary.succeeded).toBe(1);
expect(response.summary.skipped).toBe(0);
});
@@ -204,7 +200,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should not install prebuilt rules if they are up to date', async () => {
// Install all prebuilt detection rules
await createPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRules(supertest);
+ await installPrebuiltRules(es, supertest);
// Check that all prebuilt rules were installed
const statusResponse = await getPrebuiltRulesStatus(supertest);
@@ -212,12 +208,12 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusResponse.stats.num_prebuilt_rules_to_upgrade).toBe(0);
// Call the install prebuilt rules again and check that no rules were installed
- const installResponse = await installPrebuiltRules(supertest);
+ const installResponse = await installPrebuiltRules(es, supertest);
expect(installResponse.summary.succeeded).toBe(0);
expect(installResponse.summary.skipped).toBe(0);
// Call the upgrade prebuilt rules endpoint and check that no rules were updated
- const upgradeResponse = await upgradePrebuiltRules(supertest);
+ const upgradeResponse = await upgradePrebuiltRules(es, supertest);
expect(upgradeResponse.summary.succeeded).toBe(0);
expect(upgradeResponse.summary.skipped).toBe(0);
});
@@ -237,7 +233,7 @@ export default ({ getService }: FtrProviderContext): void => {
describe('using legacy endpoint', () => {
it('should install prebuilt rules', async () => {
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- const body = await installPrebuiltRulesAndTimelines(supertest);
+ const body = await installPrebuiltRulesAndTimelines(es, supertest);
expect(body.rules_installed).toBe(RULES_COUNT);
expect(body.rules_updated).toBe(0);
@@ -245,14 +241,10 @@ export default ({ getService }: FtrProviderContext): void => {
it('should install correct prebuilt rule versions', async () => {
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
// Get installed rules
- const { body: rulesResponse } = await supertest
- .get(DETECTION_ENGINE_RULES_URL_FIND)
- .set('kbn-xsrf', 'true')
- .send()
- .expect(200);
+ const rulesResponse = await getInstalledRules(supertest);
// Check that all prebuilt rules were actually installed and their versions match the latest
expect(rulesResponse.total).toBe(RULES_COUNT);
@@ -267,14 +259,14 @@ export default ({ getService }: FtrProviderContext): void => {
it('should not install prebuilt rules if they are up to date', async () => {
// Install all prebuilt detection rules
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
// Check that all prebuilt rules were installed
const statusResponse = await getPrebuiltRulesAndTimelinesStatus(supertest);
expect(statusResponse.rules_not_installed).toBe(0);
// Call the install prebuilt rules again and check that no rules were installed
- const response = await installPrebuiltRulesAndTimelines(supertest);
+ const response = await installPrebuiltRulesAndTimelines(es, supertest);
expect(response.rules_installed).toBe(0);
expect(response.rules_updated).toBe(0);
});
@@ -282,7 +274,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should install missing prebuilt rules', async () => {
// Install all prebuilt detection rules
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
// Delete one of the installed rules
await deleteRule(supertest, 'rule-1');
@@ -292,7 +284,7 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusResponse.rules_not_installed).toBe(1);
// Call the install prebuilt rules endpoint again and check that the missing rule was installed
- const response = await installPrebuiltRulesAndTimelines(supertest);
+ const response = await installPrebuiltRulesAndTimelines(es, supertest);
expect(response.rules_installed).toBe(1);
expect(response.rules_updated).toBe(0);
});
@@ -300,7 +292,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should update outdated prebuilt rules when previous historical versions available', async () => {
// Install all prebuilt detection rules
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
// Add a new version of one of the installed rules
await createHistoricalPrebuiltRuleAssetSavedObjects(es, [
@@ -312,7 +304,7 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusResponse.rules_not_updated).toBe(1);
// Call the install prebuilt rules again and check that the outdated rule was updated
- const response = await installPrebuiltRulesAndTimelines(supertest);
+ const response = await installPrebuiltRulesAndTimelines(es, supertest);
expect(response.rules_installed).toBe(0);
expect(response.rules_updated).toBe(1);
@@ -324,7 +316,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should update outdated prebuilt rules when previous historical versions unavailable', async () => {
// Install all prebuilt detection rules
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRulesAndTimelines(supertest);
+ await installPrebuiltRulesAndTimelines(es, supertest);
// Clear previous rule assets
await deleteAllPrebuiltRuleAssets(es);
@@ -340,7 +332,7 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusResponse.rules_not_installed).toBe(0);
// Call the install prebuilt rules again and check that the outdated rule was updated
- const response = await installPrebuiltRulesAndTimelines(supertest);
+ const response = await installPrebuiltRulesAndTimelines(es, supertest);
expect(response.rules_installed).toBe(0);
expect(response.rules_updated).toBe(1);
@@ -353,14 +345,14 @@ export default ({ getService }: FtrProviderContext): void => {
describe('using current endpoint', () => {
it('should install prebuilt rules', async () => {
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- const body = await installPrebuiltRules(supertest);
+ const body = await installPrebuiltRules(es, supertest);
expect(body.summary.succeeded).toBe(RULES_COUNT);
});
it('should install correct prebuilt rule versions', async () => {
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- const response = await installPrebuiltRules(supertest);
+ const response = await installPrebuiltRules(es, supertest);
// Check that all prebuilt rules were actually installed and their versions match the latest
expect(response.summary.succeeded).toBe(RULES_COUNT);
@@ -375,14 +367,14 @@ export default ({ getService }: FtrProviderContext): void => {
it('should not install prebuilt rules if they are up to date', async () => {
// Install all prebuilt detection rules
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRules(supertest);
+ await installPrebuiltRules(es, supertest);
// Check that all prebuilt rules were installed
const statusResponse = await getPrebuiltRulesStatus(supertest);
expect(statusResponse.stats.num_prebuilt_rules_to_install).toBe(0);
// Call the install prebuilt rules again and check that no rules were installed
- const response = await installPrebuiltRules(supertest);
+ const response = await installPrebuiltRules(es, supertest);
expect(response.summary.succeeded).toBe(0);
expect(response.summary.total).toBe(0);
});
@@ -390,7 +382,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should install missing prebuilt rules', async () => {
// Install all prebuilt detection rules
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRules(supertest);
+ await installPrebuiltRules(es, supertest);
// Delete one of the installed rules
await deleteRule(supertest, 'rule-1');
@@ -400,7 +392,7 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusResponse.stats.num_prebuilt_rules_to_install).toBe(1);
// Call the install prebuilt rules endpoint again and check that the missing rule was installed
- const response = await installPrebuiltRules(supertest);
+ const response = await installPrebuiltRules(es, supertest);
expect(response.summary.succeeded).toBe(1);
expect(response.summary.total).toBe(1);
});
@@ -408,7 +400,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should update outdated prebuilt rules when previous historical versions available', async () => {
// Install all prebuilt detection rules
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRules(supertest);
+ await installPrebuiltRules(es, supertest);
// Add a new version of one of the installed rules
await createHistoricalPrebuiltRuleAssetSavedObjects(es, [
@@ -420,7 +412,7 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusResponse.stats.num_prebuilt_rules_to_upgrade).toBe(1);
// Call the upgrade prebuilt rules endpoint and check that the outdated rule was updated
- const response = await upgradePrebuiltRules(supertest);
+ const response = await upgradePrebuiltRules(es, supertest);
expect(response.summary.succeeded).toBe(1);
expect(response.summary.total).toBe(1);
@@ -432,7 +424,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should update outdated prebuilt rules when previous historical versions unavailable', async () => {
// Install all prebuilt detection rules
await createHistoricalPrebuiltRuleAssetSavedObjects(es, getRuleAssetSavedObjects());
- await installPrebuiltRules(supertest);
+ await installPrebuiltRules(es, supertest);
// Clear previous rule assets
await deleteAllPrebuiltRuleAssets(es);
@@ -448,7 +440,7 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusResponse.stats.num_prebuilt_rules_to_install).toBe(0);
// Call the upgrade prebuilt rules endpoint and check that the outdated rule was updated
- const response = await upgradePrebuiltRules(supertest);
+ const response = await upgradePrebuiltRules(es, supertest);
expect(response.summary.succeeded).toBe(1);
expect(response.summary.total).toBe(1);
diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/update_prebuilt_rules_package/update_prebuilt_rules_package.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/update_prebuilt_rules_package/update_prebuilt_rules_package.ts
index 0e25999a37e9b..1d7939e83f9ab 100644
--- a/x-pack/test/detection_engine_api_integration/security_and_spaces/update_prebuilt_rules_package/update_prebuilt_rules_package.ts
+++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/update_prebuilt_rules_package/update_prebuilt_rules_package.ts
@@ -13,7 +13,6 @@ import { REPO_ROOT } from '@kbn/repo-info';
import JSON5 from 'json5';
import expect from 'expect';
import { PackageSpecManifest } from '@kbn/fleet-plugin/common';
-import { DETECTION_ENGINE_RULES_URL_FIND } from '@kbn/security-solution-plugin/common/constants';
import { FtrProviderContext } from '../../common/ftr_provider_context';
import {
deleteAllPrebuiltRuleAssets,
@@ -24,6 +23,8 @@ import {
} from '../../utils';
import { reviewPrebuiltRulesToInstall } from '../../utils/prebuilt_rules/review_install_prebuilt_rules';
import { reviewPrebuiltRulesToUpgrade } from '../../utils/prebuilt_rules/review_upgrade_prebuilt_rules';
+import { installPrebuiltRulesPackageByVersion } from '../../utils/prebuilt_rules/install_fleet_package_by_url';
+import { getInstalledRules } from '../../utils/prebuilt_rules/get_installed_rules';
// eslint-disable-next-line import/no-default-export
export default ({ getService }: FtrProviderContext): void => {
@@ -103,17 +104,14 @@ export default ({ getService }: FtrProviderContext): void => {
expect(statusBeforePackageInstallation.stats.num_prebuilt_rules_to_upgrade).toBe(0);
expect(statusBeforePackageInstallation.stats.num_prebuilt_rules_total_in_package).toBe(0);
- const EPM_URL_FOR_PREVIOUS_VERSION = `/api/fleet/epm/packages/security_detection_engine/${previousVersion}`;
-
- const installPreviousPackageResponse = await supertest
- .post(EPM_URL_FOR_PREVIOUS_VERSION)
- .set('kbn-xsrf', 'xxxx')
- .type('application/json')
- .send({ force: true })
- .expect(200);
+ const installPreviousPackageResponse = await installPrebuiltRulesPackageByVersion(
+ es,
+ supertest,
+ previousVersion
+ );
- expect(installPreviousPackageResponse.body._meta.install_source).toBe('registry');
- expect(installPreviousPackageResponse.body.items.length).toBeGreaterThan(0);
+ expect(installPreviousPackageResponse._meta.install_source).toBe('registry');
+ expect(installPreviousPackageResponse.items.length).toBeGreaterThan(0);
// Verify that status is updated after the installation of package "N-1"
const statusAfterPackageInstallation = await getPrebuiltRulesStatus(supertest);
@@ -132,7 +130,8 @@ export default ({ getService }: FtrProviderContext): void => {
// Verify that the _perform endpoint returns the same number of installed rules as the status endpoint
// and the _review endpoint
- const installPrebuiltRulesResponse = await installPrebuiltRules(supertest);
+ const installPrebuiltRulesResponse = await installPrebuiltRules(es, supertest);
+
expect(installPrebuiltRulesResponse.summary.succeeded).toBe(
statusAfterPackageInstallation.stats.num_prebuilt_rules_to_install
);
@@ -141,11 +140,7 @@ export default ({ getService }: FtrProviderContext): void => {
);
// Get installed rules
- const { body: rulesResponse } = await supertest
- .get(`${DETECTION_ENGINE_RULES_URL_FIND}?per_page=10000`)
- .set('kbn-xsrf', 'true')
- .send()
- .expect(200);
+ const rulesResponse = await getInstalledRules(supertest);
// Check that all prebuilt rules were actually installed
expect(rulesResponse.total).toBe(installPrebuiltRulesResponse.summary.succeeded);
@@ -160,16 +155,13 @@ export default ({ getService }: FtrProviderContext): void => {
);
// PART 2: Now install the lastest (current) package, defined in fleet_packages.json
- const EPM_URL_FOR_CURRENT_VERSION = `/api/fleet/epm/packages/security_detection_engine/${currentVersion}`;
-
- const installLatestPackageResponse = await supertest
- .post(EPM_URL_FOR_CURRENT_VERSION)
- .set('kbn-xsrf', 'xxxx')
- .type('application/json')
- .send({ force: true })
- .expect(200);
- expect(installLatestPackageResponse.body.items.length).toBeGreaterThanOrEqual(0);
+ const installLatestPackageResponse = await installPrebuiltRulesPackageByVersion(
+ es,
+ supertest,
+ currentVersion
+ );
+ expect(installLatestPackageResponse.items.length).toBeGreaterThanOrEqual(0);
// Verify status after intallation of the latest package
const statusAfterLatestPackageInstallation = await getPrebuiltRulesStatus(supertest);
@@ -196,8 +188,10 @@ export default ({ getService }: FtrProviderContext): void => {
// Install available rules and verify that the _perform endpoint returns the same number of
// installed rules as the status endpoint and the _review endpoint
const installPrebuiltRulesResponseAfterLatestPackageInstallation = await installPrebuiltRules(
+ es,
supertest
);
+
expect(installPrebuiltRulesResponseAfterLatestPackageInstallation.summary.succeeded).toBe(
statusAfterLatestPackageInstallation.stats.num_prebuilt_rules_to_install
);
@@ -208,11 +202,7 @@ export default ({ getService }: FtrProviderContext): void => {
);
// Get installed rules
- const { body: rulesResponseAfterPackageUpdate } = await supertest
- .get(`${DETECTION_ENGINE_RULES_URL_FIND}?per_page=10000`)
- .set('kbn-xsrf', 'true')
- .send()
- .expect(200);
+ const rulesResponseAfterPackageUpdate = await getInstalledRules(supertest);
// Check that the expected new prebuilt rules from the latest package were actually installed
expect(
@@ -239,8 +229,10 @@ export default ({ getService }: FtrProviderContext): void => {
// Call the upgrade _perform endpoint and verify that the number of upgraded rules is the same as the one
// returned by the _review endpoint and the status endpoint
const upgradePrebuiltRulesResponseAfterLatestPackageInstallation = await upgradePrebuiltRules(
+ es,
supertest
);
+
expect(upgradePrebuiltRulesResponseAfterLatestPackageInstallation.summary.succeeded).toEqual(
statusAfterLatestPackageInstallation.stats.num_prebuilt_rules_to_upgrade
);
@@ -249,11 +241,8 @@ export default ({ getService }: FtrProviderContext): void => {
);
// Get installed rules
- const { body: rulesResponseAfterPackageUpdateAndRuleUpgrades } = await supertest
- .get(`${DETECTION_ENGINE_RULES_URL_FIND}?per_page=10000`)
- .set('kbn-xsrf', 'true')
- .send()
- .expect(200);
+
+ const rulesResponseAfterPackageUpdateAndRuleUpgrades = await getInstalledRules(supertest);
// Check that the expected new prebuilt rules from the latest package were actually installed
expect(
diff --git a/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/get_installed_rules.ts b/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/get_installed_rules.ts
new file mode 100644
index 0000000000000..85eaee80ed3e8
--- /dev/null
+++ b/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/get_installed_rules.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 SuperTest from 'supertest';
+import { DETECTION_ENGINE_RULES_URL_FIND } from '@kbn/security-solution-plugin/common/constants';
+import { FindRulesResponse } from '@kbn/security-solution-plugin/common/api/detection_engine';
+
+/**
+ * Get all installed security rules (both prebuilt + custom)
+ *
+ * @param es Elasticsearch client
+ * @param supertest SuperTest instance
+ * @param version Semver version of the `security_detection_engine` package to install
+ * @returns Fleet install package response
+ */
+
+export const getInstalledRules = async (
+ supertest: SuperTest.SuperTest
+): Promise => {
+ const { body: rulesResponse } = await supertest
+ .get(`${DETECTION_ENGINE_RULES_URL_FIND}?per_page=10000`)
+ .set('kbn-xsrf', 'true')
+ .send()
+ .expect(200);
+
+ return rulesResponse;
+};
diff --git a/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_fleet_package_by_url.ts b/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_fleet_package_by_url.ts
new file mode 100644
index 0000000000000..802626881b8e6
--- /dev/null
+++ b/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_fleet_package_by_url.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 { Client } from '@elastic/elasticsearch';
+import type SuperTest from 'supertest';
+import { ALL_SAVED_OBJECT_INDICES } from '@kbn/core-saved-objects-server';
+import { InstallPackageResponse } from '@kbn/fleet-plugin/common/types';
+
+/**
+ * Installs prebuilt rules package `security_detection_engine` by version.
+ *
+ * @param es Elasticsearch client
+ * @param supertest SuperTest instance
+ * @param version Semver version of the `security_detection_engine` package to install
+ * @returns Fleet install package response
+ */
+
+export const installPrebuiltRulesPackageByVersion = async (
+ es: Client,
+ supertest: SuperTest.SuperTest,
+ version: string
+): Promise => {
+ const fleetResponse = await supertest
+ .post(`/api/fleet/epm/packages/security_detection_engine/${version}`)
+ .set('kbn-xsrf', 'xxxx')
+ .type('application/json')
+ .send({ force: true })
+ .expect(200);
+
+ // Before we proceed, we need to refresh saved object indices.
+ // At the previous step we installed the Fleet package with prebuilt detection rules.
+ // Prebuilt rules are assets that Fleet indexes as saved objects of a certain type.
+ // Fleet does this via a savedObjectsClient.import() call with explicit `refresh: false`.
+ // So, despite of the fact that the endpoint waits until the prebuilt rule assets will be
+ // successfully indexed, it doesn't wait until they become "visible" for subsequent read
+ // operations.
+ // And this is usually what we do next in integration tests: we read these SOs with utility
+ // function such as getPrebuiltRulesAndTimelinesStatus().
+ // Now, the time left until the next refresh can be anything from 0 to the default value, and
+ // it depends on the time when savedObjectsClient.import() call happens relative to the time of
+ // the next refresh. Also, probably the refresh time can be delayed when ES is under load?
+ // Anyway, this can cause race condition between a write and subsequent read operation, and to
+ // fix it deterministically we have to refresh saved object indices and wait until it's done.
+ await es.indices.refresh({ index: ALL_SAVED_OBJECT_INDICES });
+
+ return fleetResponse.body as InstallPackageResponse;
+};
diff --git a/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_mock_prebuilt_rules.ts b/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_mock_prebuilt_rules.ts
index 6f9726ae6a194..0e15f416e1238 100644
--- a/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_mock_prebuilt_rules.ts
+++ b/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_mock_prebuilt_rules.ts
@@ -24,5 +24,5 @@ export const installMockPrebuiltRules = async (
): Promise => {
// Ensure there are prebuilt rule saved objects before installing rules
await createPrebuiltRuleAssetSavedObjects(es);
- return installPrebuiltRulesAndTimelines(supertest);
+ return installPrebuiltRulesAndTimelines(es, supertest);
};
diff --git a/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_prebuilt_rules.ts b/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_prebuilt_rules.ts
index c11ccb7b37abd..f05ea093cfc5d 100644
--- a/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_prebuilt_rules.ts
+++ b/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_prebuilt_rules.ts
@@ -10,7 +10,9 @@ import {
RuleVersionSpecifier,
PerformRuleInstallationResponseBody,
} from '@kbn/security-solution-plugin/common/api/detection_engine/prebuilt_rules';
+import type { Client } from '@elastic/elasticsearch';
import type SuperTest from 'supertest';
+import { ALL_SAVED_OBJECT_INDICES } from '@kbn/core-saved-objects-server';
/**
* Installs available prebuilt rules in Kibana. Rules are
@@ -27,6 +29,7 @@ import type SuperTest from 'supertest';
* @returns Install prebuilt rules response
*/
export const installPrebuiltRules = async (
+ es: Client,
supertest: SuperTest.SuperTest,
rules?: RuleVersionSpecifier[]
): Promise => {
@@ -42,5 +45,17 @@ export const installPrebuiltRules = async (
.send(payload)
.expect(200);
+ // Before we proceed, we need to refresh saved object indices.
+ // At the previous step we installed the prebuilt detection rules SO of type 'security-rule'.
+ // The savedObjectsClient does this with a call with explicit `refresh: false`.
+ // So, despite of the fact that the endpoint waits until the prebuilt rule will be
+ // successfully indexed, it doesn't wait until they become "visible" for subsequent read
+ // operations.
+ // And this is usually what we do next in integration tests: we read these SOs with utility
+ // function such as getPrebuiltRulesAndTimelinesStatus().
+ // This can cause race conditions between a write and subsequent read operation, and to
+ // fix it deterministically we have to refresh saved object indices and wait until it's done.
+ await es.indices.refresh({ index: ALL_SAVED_OBJECT_INDICES });
+
return response.body;
};
diff --git a/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_prebuilt_rules_and_timelines.ts b/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_prebuilt_rules_and_timelines.ts
index 7954e2b47bbac..fdf87a94391c9 100644
--- a/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_prebuilt_rules_and_timelines.ts
+++ b/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_prebuilt_rules_and_timelines.ts
@@ -9,7 +9,9 @@ import {
InstallPrebuiltRulesAndTimelinesResponse,
PREBUILT_RULES_URL,
} from '@kbn/security-solution-plugin/common/api/detection_engine/prebuilt_rules';
+import type { Client } from '@elastic/elasticsearch';
import type SuperTest from 'supertest';
+import { ALL_SAVED_OBJECT_INDICES } from '@kbn/core-saved-objects-server';
/**
* (LEGACY)
@@ -28,6 +30,7 @@ import type SuperTest from 'supertest';
* @returns Install prebuilt rules response
*/
export const installPrebuiltRulesAndTimelines = async (
+ es: Client,
supertest: SuperTest.SuperTest
): Promise => {
const response = await supertest
@@ -36,5 +39,17 @@ export const installPrebuiltRulesAndTimelines = async (
.send()
.expect(200);
+ // Before we proceed, we need to refresh saved object indices.
+ // At the previous step we installed the prebuilt detection rules SO of type 'security-rule'.
+ // The savedObjectsClient does this with a call with explicit `refresh: false`.
+ // So, despite of the fact that the endpoint waits until the prebuilt rule will be
+ // successfully indexed, it doesn't wait until they become "visible" for subsequent read
+ // operations.
+ // And this is usually what we do next in integration tests: we read these SOs with utility
+ // function such as getPrebuiltRulesAndTimelinesStatus().
+ // This can cause race condition between a write and subsequent read operation, and to
+ // fix it deterministically we have to refresh saved object indices and wait until it's done.
+ await es.indices.refresh({ index: ALL_SAVED_OBJECT_INDICES });
+
return response.body;
};
diff --git a/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_prebuilt_rules_fleet_package.ts b/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_prebuilt_rules_fleet_package.ts
index 30435caa5a7c3..cc899ecc1dccc 100644
--- a/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_prebuilt_rules_fleet_package.ts
+++ b/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/install_prebuilt_rules_fleet_package.ts
@@ -5,7 +5,9 @@
* 2.0.
*/
+import { ALL_SAVED_OBJECT_INDICES } from '@kbn/core-saved-objects-server';
import { epmRouteService } from '@kbn/fleet-plugin/common';
+import type { Client } from '@elastic/elasticsearch';
import type SuperTest from 'supertest';
/**
@@ -17,10 +19,12 @@ import type SuperTest from 'supertest';
* @param overrideExistingPackage Whether or not to force the install
*/
export const installPrebuiltRulesFleetPackage = async ({
+ es,
supertest,
version,
overrideExistingPackage,
}: {
+ es: Client;
supertest: SuperTest.SuperTest;
version?: string;
overrideExistingPackage: boolean;
@@ -46,6 +50,22 @@ export const installPrebuiltRulesFleetPackage = async ({
})
.expect(200);
}
+
+ // Before we proceed, we need to refresh saved object indices.
+ // At the previous step we installed the Fleet package with prebuilt detection rules.
+ // Prebuilt rules are assets that Fleet indexes as saved objects of a certain type.
+ // Fleet does this via a savedObjectsClient.import() call with explicit `refresh: false`.
+ // So, despite of the fact that the endpoint waits until the prebuilt rule assets will be
+ // successfully indexed, it doesn't wait until they become "visible" for subsequent read
+ // operations.
+ // And this is usually what we do next in integration tests: we read these SOs with utility
+ // function such as getPrebuiltRulesAndTimelinesStatus().
+ // Now, the time left until the next refresh can be anything from 0 to the default value, and
+ // it depends on the time when savedObjectsClient.import() call happens relative to the time of
+ // the next refresh. Also, probably the refresh time can be delayed when ES is under load?
+ // Anyway, this can cause race condition between a write and subsequent read operation, and to
+ // fix it deterministically we have to refresh saved object indices and wait until it's done.
+ await es.indices.refresh({ index: ALL_SAVED_OBJECT_INDICES });
};
/**
diff --git a/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/upgrade_prebuilt_rules.ts b/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/upgrade_prebuilt_rules.ts
index bb3299cb5dd9e..d9ea277fb1421 100644
--- a/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/upgrade_prebuilt_rules.ts
+++ b/x-pack/test/detection_engine_api_integration/utils/prebuilt_rules/upgrade_prebuilt_rules.ts
@@ -10,7 +10,9 @@ import {
RuleVersionSpecifier,
PerformRuleUpgradeResponseBody,
} from '@kbn/security-solution-plugin/common/api/detection_engine/prebuilt_rules';
+import type { Client } from '@elastic/elasticsearch';
import type SuperTest from 'supertest';
+import { ALL_SAVED_OBJECT_INDICES } from '@kbn/core-saved-objects-server';
/**
* Upgrades available prebuilt rules in Kibana.
@@ -23,6 +25,7 @@ import type SuperTest from 'supertest';
* @returns Upgrade prebuilt rules response
*/
export const upgradePrebuiltRules = async (
+ es: Client,
supertest: SuperTest.SuperTest,
rules?: RuleVersionSpecifier[]
): Promise => {
@@ -38,5 +41,18 @@ export const upgradePrebuiltRules = async (
.send(payload)
.expect(200);
+ // Before we proceed, we need to refresh saved object indices.
+ // At the previous step we upgraded the prebuilt rules, which, under the hoods, installs new versions
+ // of the prebuilt detection rules SO of type 'security-rule'.
+ // The savedObjectsClient does this with a call with explicit `refresh: false`.
+ // So, despite of the fact that the endpoint waits until the prebuilt rule will be
+ // successfully indexed, it doesn't wait until they become "visible" for subsequent read
+ // operations.
+ // And this is usually what we do next in integration tests: we read these SOs with utility
+ // function such as getPrebuiltRulesAndTimelinesStatus().
+ // This can cause race conditions between a write and subsequent read operation, and to
+ // fix it deterministically we have to refresh saved object indices and wait until it's done.
+ await es.indices.refresh({ index: ALL_SAVED_OBJECT_INDICES });
+
return response.body;
};
From 27c394c936991ce11c5cc1fdf7184c8fc4bdcd88 Mon Sep 17 00:00:00 2001
From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com>
Date: Fri, 11 Aug 2023 09:32:25 -0400
Subject: [PATCH 14/46] [Security Solution][Endpoint] Add API checks to
Endpoint Policy create/update for checking `endpointPolicyProtections` is
enabled (#163429)
## Summary
- Adds checks to both the Policy Create and Policy Update APIs (Fleet
API extension points) and turns off all protections if
`endpointPolicyProtections` appFeature is disabled
- Adds migration of policies to the Plugin `start()` that will check if
`endpointPolicyProtections` is disabled and updates all existing
policies (if necessary) to disable protections.
---
.../models/policy_config_helpers.test.ts | 93 +++++++++--
.../endpoint/models/policy_config_helpers.ts | 100 +++++++++++-
.../common/endpoint/types/utility_types.ts | 12 ++
.../endpoint/endpoint_app_context_services.ts | 9 +-
.../turn_off_policy_protections.test.ts | 145 ++++++++++++++++++
.../migrations/turn_off_policy_protections.ts | 107 +++++++++++++
.../server/endpoint/mocks.ts | 6 +-
.../fleet/endpoint_fleet_services_factory.ts | 10 ++
.../create_internal_readonly_so_client.ts | 21 +--
.../utils/create_internal_so_client.ts | 27 ++++
.../fleet_integration.test.ts | 69 ++++++++-
.../fleet_integration/fleet_integration.ts | 48 ++++--
.../handlers/create_default_policy.test.ts | 40 ++++-
.../handlers/create_default_policy.ts | 26 +++-
.../server/lib/app_features/app_features.ts | 2 +-
.../server/lib/app_features/mocks.ts | 38 +++++
.../security_solution/server/plugin.ts | 33 ++--
17 files changed, 715 insertions(+), 71 deletions(-)
create mode 100644 x-pack/plugins/security_solution/common/endpoint/types/utility_types.ts
create mode 100644 x-pack/plugins/security_solution/server/endpoint/migrations/turn_off_policy_protections.test.ts
create mode 100644 x-pack/plugins/security_solution/server/endpoint/migrations/turn_off_policy_protections.ts
create mode 100644 x-pack/plugins/security_solution/server/endpoint/utils/create_internal_so_client.ts
create mode 100644 x-pack/plugins/security_solution/server/lib/app_features/mocks.ts
diff --git a/x-pack/plugins/security_solution/common/endpoint/models/policy_config_helpers.test.ts b/x-pack/plugins/security_solution/common/endpoint/models/policy_config_helpers.test.ts
index 1b01d477f1995..fe3fd8c2ebd6a 100644
--- a/x-pack/plugins/security_solution/common/endpoint/models/policy_config_helpers.test.ts
+++ b/x-pack/plugins/security_solution/common/endpoint/models/policy_config_helpers.test.ts
@@ -6,14 +6,19 @@
*/
import type { PolicyConfig } from '../types';
-import { ProtectionModes } from '../types';
+import { PolicyOperatingSystem, ProtectionModes } from '../types';
import { policyFactory } from './policy_config';
-import { disableProtections } from './policy_config_helpers';
+import {
+ disableProtections,
+ isPolicySetToEventCollectionOnly,
+ ensureOnlyEventCollectionIsAllowed,
+} from './policy_config_helpers';
+import { set } from 'lodash';
describe('Policy Config helpers', () => {
describe('disableProtections', () => {
it('disables all the protections in the default policy', () => {
- expect(disableProtections(policyFactory())).toEqual(eventsOnlyPolicy);
+ expect(disableProtections(policyFactory())).toEqual(eventsOnlyPolicy());
});
it('does not enable supported fields', () => {
@@ -51,20 +56,20 @@ describe('Policy Config helpers', () => {
};
const expectedPolicyWithoutSupportedProtections: PolicyConfig = {
- ...eventsOnlyPolicy,
+ ...eventsOnlyPolicy(),
windows: {
- ...eventsOnlyPolicy.windows,
+ ...eventsOnlyPolicy().windows,
memory_protection: notSupported,
behavior_protection: notSupportedBehaviorProtection,
ransomware: notSupported,
},
mac: {
- ...eventsOnlyPolicy.mac,
+ ...eventsOnlyPolicy().mac,
memory_protection: notSupported,
behavior_protection: notSupportedBehaviorProtection,
},
linux: {
- ...eventsOnlyPolicy.linux,
+ ...eventsOnlyPolicy().linux,
memory_protection: notSupported,
behavior_protection: notSupportedBehaviorProtection,
},
@@ -104,10 +109,10 @@ describe('Policy Config helpers', () => {
};
const expectedPolicy: PolicyConfig = {
- ...eventsOnlyPolicy,
- windows: { ...eventsOnlyPolicy.windows, events: { ...windowsEvents } },
- mac: { ...eventsOnlyPolicy.mac, events: { ...macEvents } },
- linux: { ...eventsOnlyPolicy.linux, events: { ...linuxEvents } },
+ ...eventsOnlyPolicy(),
+ windows: { ...eventsOnlyPolicy().windows, events: { ...windowsEvents } },
+ mac: { ...eventsOnlyPolicy().mac, events: { ...macEvents } },
+ linux: { ...eventsOnlyPolicy().linux, events: { ...linuxEvents } },
};
const inputPolicy = {
@@ -120,11 +125,73 @@ describe('Policy Config helpers', () => {
expect(disableProtections(inputPolicy)).toEqual(expectedPolicy);
});
});
+
+ describe('setPolicyToEventCollectionOnly()', () => {
+ it('should set the policy to event collection only', () => {
+ expect(ensureOnlyEventCollectionIsAllowed(policyFactory())).toEqual(eventsOnlyPolicy());
+ });
+ });
+
+ describe('isPolicySetToEventCollectionOnly', () => {
+ let policy: PolicyConfig;
+
+ beforeEach(() => {
+ policy = ensureOnlyEventCollectionIsAllowed(policyFactory());
+ });
+
+ it.each([
+ {
+ keyPath: `${PolicyOperatingSystem.windows}.malware.mode`,
+ keyValue: ProtectionModes.prevent,
+ expectedResult: false,
+ },
+ {
+ keyPath: `${PolicyOperatingSystem.mac}.malware.mode`,
+ keyValue: ProtectionModes.off,
+ expectedResult: true,
+ },
+ {
+ keyPath: `${PolicyOperatingSystem.windows}.ransomware.mode`,
+ keyValue: ProtectionModes.prevent,
+ expectedResult: false,
+ },
+ {
+ keyPath: `${PolicyOperatingSystem.linux}.memory_protection.mode`,
+ keyValue: ProtectionModes.off,
+ expectedResult: true,
+ },
+ {
+ keyPath: `${PolicyOperatingSystem.mac}.behavior_protection.mode`,
+ keyValue: ProtectionModes.detect,
+ expectedResult: false,
+ },
+ {
+ keyPath: `${PolicyOperatingSystem.windows}.attack_surface_reduction.credential_hardening.enabled`,
+ keyValue: true,
+ expectedResult: false,
+ },
+ {
+ keyPath: `${PolicyOperatingSystem.windows}.antivirus_registration.enabled`,
+ keyValue: true,
+ expectedResult: false,
+ },
+ ])(
+ 'should return `$expectedResult` if `$keyPath` is set to `$keyValue`',
+ ({ keyPath, keyValue, expectedResult }) => {
+ set(policy, keyPath, keyValue);
+
+ expect(isPolicySetToEventCollectionOnly(policy)).toEqual({
+ isOnlyCollectingEvents: expectedResult,
+ message: expectedResult ? undefined : `property [${keyPath}] is set to [${keyValue}]`,
+ });
+ }
+ );
+ });
});
// This constant makes sure that if the type `PolicyConfig` is ever modified,
// the logic for disabling protections is also modified due to type check.
-export const eventsOnlyPolicy: PolicyConfig = {
+export const eventsOnlyPolicy = (): PolicyConfig => ({
meta: { license: '', cloud: false, license_uid: '', cluster_name: '', cluster_uuid: '' },
windows: {
events: {
@@ -187,4 +254,4 @@ export const eventsOnlyPolicy: PolicyConfig = {
capture_env_vars: 'LD_PRELOAD,LD_LIBRARY_PATH',
},
},
-};
+});
diff --git a/x-pack/plugins/security_solution/common/endpoint/models/policy_config_helpers.ts b/x-pack/plugins/security_solution/common/endpoint/models/policy_config_helpers.ts
index 4bdca10547bc2..cb460e2f75f49 100644
--- a/x-pack/plugins/security_solution/common/endpoint/models/policy_config_helpers.ts
+++ b/x-pack/plugins/security_solution/common/endpoint/models/policy_config_helpers.ts
@@ -5,8 +5,63 @@
* 2.0.
*/
+import { get, set } from 'lodash';
import type { PolicyConfig } from '../types';
-import { ProtectionModes } from '../types';
+import { PolicyOperatingSystem, ProtectionModes } from '../types';
+
+interface PolicyProtectionReference {
+ keyPath: string;
+ osList: PolicyOperatingSystem[];
+ enableValue: unknown;
+ disableValue: unknown;
+}
+
+const getPolicyProtectionsReference = (): PolicyProtectionReference[] => {
+ const allOsValues = [
+ PolicyOperatingSystem.mac,
+ PolicyOperatingSystem.linux,
+ PolicyOperatingSystem.windows,
+ ];
+
+ return [
+ {
+ keyPath: 'malware.mode',
+ osList: [...allOsValues],
+ disableValue: ProtectionModes.off,
+ enableValue: ProtectionModes.prevent,
+ },
+ {
+ keyPath: 'ransomware.mode',
+ osList: [PolicyOperatingSystem.windows],
+ disableValue: ProtectionModes.off,
+ enableValue: ProtectionModes.prevent,
+ },
+ {
+ keyPath: 'memory_protection.mode',
+ osList: [...allOsValues],
+ disableValue: ProtectionModes.off,
+ enableValue: ProtectionModes.prevent,
+ },
+ {
+ keyPath: 'behavior_protection.mode',
+ osList: [...allOsValues],
+ disableValue: ProtectionModes.off,
+ enableValue: ProtectionModes.prevent,
+ },
+ {
+ keyPath: 'attack_surface_reduction.credential_hardening.enabled',
+ osList: [PolicyOperatingSystem.windows],
+ disableValue: false,
+ enableValue: true,
+ },
+ {
+ keyPath: 'antivirus_registration.enabled',
+ osList: [PolicyOperatingSystem.windows],
+ disableValue: false,
+ enableValue: true,
+ },
+ ];
+};
/**
* Returns a copy of the passed `PolicyConfig` with all protections set to disabled.
@@ -106,3 +161,46 @@ const getDisabledWindowsSpecificPopups = (policy: PolicyConfig) => ({
enabled: false,
},
});
+
+/**
+ * Returns the provided with only event collection turned enabled
+ * @param policy
+ */
+export const ensureOnlyEventCollectionIsAllowed = (policy: PolicyConfig): PolicyConfig => {
+ const updatedPolicy = disableProtections(policy);
+
+ set(updatedPolicy, 'windows.antivirus_registration.enabled', false);
+
+ return updatedPolicy;
+};
+
+/**
+ * Checks to see if the provided policy is set to Event Collection only
+ */
+export const isPolicySetToEventCollectionOnly = (
+ policy: PolicyConfig
+): { isOnlyCollectingEvents: boolean; message?: string } => {
+ const protectionsRef = getPolicyProtectionsReference();
+ let message: string | undefined;
+
+ const hasEnabledProtection = protectionsRef.some(({ keyPath, osList, disableValue }) => {
+ const hasOsPropertyEnabled = osList.some((osValue) => {
+ const fullKeyPathForOs = `${osValue}.${keyPath}`;
+ const currentValue = get(policy, fullKeyPathForOs);
+ const isEnabled = currentValue !== disableValue;
+
+ if (isEnabled) {
+ message = `property [${fullKeyPathForOs}] is set to [${currentValue}]`;
+ }
+
+ return isEnabled;
+ });
+
+ return hasOsPropertyEnabled;
+ });
+
+ return {
+ isOnlyCollectingEvents: !hasEnabledProtection,
+ message,
+ };
+};
diff --git a/x-pack/plugins/security_solution/common/endpoint/types/utility_types.ts b/x-pack/plugins/security_solution/common/endpoint/types/utility_types.ts
new file mode 100644
index 0000000000000..92880d9322191
--- /dev/null
+++ b/x-pack/plugins/security_solution/common/endpoint/types/utility_types.ts
@@ -0,0 +1,12 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+/* eslint-disable @typescript-eslint/no-explicit-any */
+
+export type PromiseResolvedValue> = T extends Promise
+ ? Value
+ : never;
diff --git a/x-pack/plugins/security_solution/server/endpoint/endpoint_app_context_services.ts b/x-pack/plugins/security_solution/server/endpoint/endpoint_app_context_services.ts
index 50d4ae02eeb9b..058f8892013a0 100644
--- a/x-pack/plugins/security_solution/server/endpoint/endpoint_app_context_services.ts
+++ b/x-pack/plugins/security_solution/server/endpoint/endpoint_app_context_services.ts
@@ -17,6 +17,7 @@ import type {
import type { PluginStartContract as AlertsPluginStartContract } from '@kbn/alerting-plugin/server';
import type { CloudSetup } from '@kbn/cloud-plugin/server';
import type { FleetActionsClientInterface } from '@kbn/fleet-plugin/server/services/actions/types';
+import type { AppFeatures } from '../lib/app_features';
import {
getPackagePolicyCreateCallback,
getPackagePolicyUpdateCallback,
@@ -69,6 +70,7 @@ export interface EndpointAppContextServiceStartContract {
actionCreateService: ActionCreateService | undefined;
cloud: CloudSetup;
esClient: ElasticsearchClient;
+ appFeatures: AppFeatures;
}
/**
@@ -106,6 +108,7 @@ export class EndpointAppContextService {
featureUsageService,
endpointMetadataService,
esClient,
+ appFeatures,
} = dependencies;
registerIngestCallback(
@@ -117,7 +120,8 @@ export class EndpointAppContextService {
alerting,
licenseService,
exceptionListsClient,
- cloud
+ cloud,
+ appFeatures
)
);
@@ -134,7 +138,8 @@ export class EndpointAppContextService {
featureUsageService,
endpointMetadataService,
cloud,
- esClient
+ esClient,
+ appFeatures
)
);
diff --git a/x-pack/plugins/security_solution/server/endpoint/migrations/turn_off_policy_protections.test.ts b/x-pack/plugins/security_solution/server/endpoint/migrations/turn_off_policy_protections.test.ts
new file mode 100644
index 0000000000000..1d39b72670b98
--- /dev/null
+++ b/x-pack/plugins/security_solution/server/endpoint/migrations/turn_off_policy_protections.test.ts
@@ -0,0 +1,145 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { createMockEndpointAppContextServiceStartContract } from '../mocks';
+import type { Logger } from '@kbn/logging';
+import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server';
+import type { EndpointInternalFleetServicesInterface } from '../services/fleet';
+import type { AppFeatures } from '../../lib/app_features';
+import { createAppFeaturesMock } from '../../lib/app_features/mocks';
+import { ALL_APP_FEATURE_KEYS } from '../../../common';
+import { turnOffPolicyProtectionsIfNotSupported } from './turn_off_policy_protections';
+import { FleetPackagePolicyGenerator } from '../../../common/endpoint/data_generators/fleet_package_policy_generator';
+import type { PolicyData } from '../../../common/endpoint/types';
+import type { PackagePolicyClient } from '@kbn/fleet-plugin/server';
+import type { PromiseResolvedValue } from '../../../common/endpoint/types/utility_types';
+import { ensureOnlyEventCollectionIsAllowed } from '../../../common/endpoint/models/policy_config_helpers';
+
+describe('Turn Off Policy Protections Migration', () => {
+ let esClient: ElasticsearchClient;
+ let fleetServices: EndpointInternalFleetServicesInterface;
+ let appFeatures: AppFeatures;
+ let logger: Logger;
+
+ const callTurnOffPolicyProtections = () =>
+ turnOffPolicyProtectionsIfNotSupported(esClient, fleetServices, appFeatures, logger);
+
+ beforeEach(() => {
+ const endpointContextStartContract = createMockEndpointAppContextServiceStartContract();
+
+ ({ esClient, appFeatures, logger } = endpointContextStartContract);
+ fleetServices = endpointContextStartContract.endpointFleetServicesFactory.asInternalUser();
+ });
+
+ describe('and `endpointPolicyProtections` is enabled', () => {
+ it('should do nothing', async () => {
+ await callTurnOffPolicyProtections();
+
+ expect(fleetServices.packagePolicy.list as jest.Mock).not.toHaveBeenCalled();
+ expect(logger.info).toHaveBeenLastCalledWith(
+ 'App feature [endpoint_policy_protections] is enabled. Nothing to do!'
+ );
+ });
+ });
+
+ describe('and `endpointPolicyProtections` is disabled', () => {
+ let policyGenerator: FleetPackagePolicyGenerator;
+ let page1Items: PolicyData[] = [];
+ let page2Items: PolicyData[] = [];
+ let bulkUpdateResponse: PromiseResolvedValue>;
+
+ const generatePolicyMock = (withDisabledProtections = false): PolicyData => {
+ const policy = policyGenerator.generateEndpointPackagePolicy();
+
+ if (!withDisabledProtections) {
+ return policy;
+ }
+
+ policy.inputs[0].config.policy.value = ensureOnlyEventCollectionIsAllowed(
+ policy.inputs[0].config.policy.value
+ );
+
+ return policy;
+ };
+
+ beforeEach(() => {
+ policyGenerator = new FleetPackagePolicyGenerator('seed');
+ const packagePolicyListSrv = fleetServices.packagePolicy.list as jest.Mock;
+
+ appFeatures = createAppFeaturesMock(
+ ALL_APP_FEATURE_KEYS.filter((key) => key !== 'endpoint_policy_protections')
+ );
+
+ page1Items = [generatePolicyMock(), generatePolicyMock(true)];
+ page2Items = [generatePolicyMock(true), generatePolicyMock()];
+
+ packagePolicyListSrv
+ .mockImplementationOnce(async () => {
+ return {
+ total: 1500,
+ page: 1,
+ perPage: 1000,
+ items: page1Items,
+ };
+ })
+ .mockImplementationOnce(async () => {
+ return {
+ total: 1500,
+ page: 2,
+ perPage: 1000,
+ items: page2Items,
+ };
+ });
+
+ bulkUpdateResponse = {
+ updatedPolicies: [page1Items[0], page2Items[1]],
+ failedPolicies: [],
+ };
+
+ (fleetServices.packagePolicy.bulkUpdate as jest.Mock).mockImplementation(async () => {
+ return bulkUpdateResponse;
+ });
+ });
+
+ it('should update only policies that have protections turn on', async () => {
+ await callTurnOffPolicyProtections();
+
+ expect(fleetServices.packagePolicy.list as jest.Mock).toHaveBeenCalledTimes(2);
+ expect(fleetServices.packagePolicy.bulkUpdate as jest.Mock).toHaveBeenCalledWith(
+ fleetServices.internalSoClient,
+ esClient,
+ [
+ expect.objectContaining({ id: bulkUpdateResponse.updatedPolicies![0].id }),
+ expect.objectContaining({ id: bulkUpdateResponse.updatedPolicies![1].id }),
+ ],
+ { user: { username: 'elastic' } }
+ );
+ expect(logger.info).toHaveBeenCalledWith(
+ 'Found 2 policies that need updates:\n' +
+ `Policy [${bulkUpdateResponse.updatedPolicies![0].id}][${
+ bulkUpdateResponse.updatedPolicies![0].name
+ }] updated to disable protections. Trigger: [property [mac.malware.mode] is set to [prevent]]\n` +
+ `Policy [${bulkUpdateResponse.updatedPolicies![1].id}][${
+ bulkUpdateResponse.updatedPolicies![1].name
+ }] updated to disable protections. Trigger: [property [mac.malware.mode] is set to [prevent]]`
+ );
+ expect(logger.info).toHaveBeenCalledWith('Done. All updates applied successfully');
+ });
+
+ it('should log failures', async () => {
+ bulkUpdateResponse.failedPolicies.push({
+ error: new Error('oh oh'),
+ packagePolicy: bulkUpdateResponse.updatedPolicies![0],
+ });
+ await callTurnOffPolicyProtections();
+
+ expect(logger.error).toHaveBeenCalledWith(
+ expect.stringContaining('Done. 1 out of 2 failed to update:')
+ );
+ });
+ });
+});
diff --git a/x-pack/plugins/security_solution/server/endpoint/migrations/turn_off_policy_protections.ts b/x-pack/plugins/security_solution/server/endpoint/migrations/turn_off_policy_protections.ts
new file mode 100644
index 0000000000000..c4a63b8ec841c
--- /dev/null
+++ b/x-pack/plugins/security_solution/server/endpoint/migrations/turn_off_policy_protections.ts
@@ -0,0 +1,107 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import type { Logger, ElasticsearchClient } from '@kbn/core/server';
+import type { UpdatePackagePolicy } from '@kbn/fleet-plugin/common';
+import type { AuthenticatedUser } from '@kbn/security-plugin/common';
+import {
+ isPolicySetToEventCollectionOnly,
+ ensureOnlyEventCollectionIsAllowed,
+} from '../../../common/endpoint/models/policy_config_helpers';
+import type { PolicyData } from '../../../common/endpoint/types';
+import { AppFeatureSecurityKey } from '../../../common/types/app_features';
+import type { EndpointInternalFleetServicesInterface } from '../services/fleet';
+import type { AppFeatures } from '../../lib/app_features';
+import { getPolicyDataForUpdate } from '../../../common/endpoint/service/policy';
+
+export const turnOffPolicyProtectionsIfNotSupported = async (
+ esClient: ElasticsearchClient,
+ fleetServices: EndpointInternalFleetServicesInterface,
+ appFeaturesService: AppFeatures,
+ logger: Logger
+): Promise => {
+ const log = logger.get('endpoint', 'policyProtections');
+
+ if (appFeaturesService.isEnabled(AppFeatureSecurityKey.endpointPolicyProtections)) {
+ log.info(
+ `App feature [${AppFeatureSecurityKey.endpointPolicyProtections}] is enabled. Nothing to do!`
+ );
+
+ return;
+ }
+
+ log.info(
+ `App feature [${AppFeatureSecurityKey.endpointPolicyProtections}] is disabled. Checking endpoint integration policies for compliance`
+ );
+
+ const { packagePolicy, internalSoClient, endpointPolicyKuery } = fleetServices;
+ const updates: UpdatePackagePolicy[] = [];
+ const messages: string[] = [];
+ const perPage = 1000;
+ let hasMoreData = true;
+ let total = 0;
+ let page = 1;
+
+ do {
+ const currentPage = page++;
+ const { items, total: totalPolicies } = await packagePolicy.list(internalSoClient, {
+ page: currentPage,
+ kuery: endpointPolicyKuery,
+ perPage,
+ });
+
+ total = totalPolicies;
+ hasMoreData = currentPage * perPage < total;
+
+ for (const item of items) {
+ const integrationPolicy = item as PolicyData;
+ const policySettings = integrationPolicy.inputs[0].config.policy.value;
+ const { message, isOnlyCollectingEvents } = isPolicySetToEventCollectionOnly(policySettings);
+
+ if (!isOnlyCollectingEvents) {
+ messages.push(
+ `Policy [${integrationPolicy.id}][${integrationPolicy.name}] updated to disable protections. Trigger: [${message}]`
+ );
+
+ integrationPolicy.inputs[0].config.policy.value =
+ ensureOnlyEventCollectionIsAllowed(policySettings);
+
+ updates.push({
+ ...getPolicyDataForUpdate(integrationPolicy),
+ id: integrationPolicy.id,
+ });
+ }
+ }
+ } while (hasMoreData);
+
+ if (updates.length > 0) {
+ log.info(`Found ${updates.length} policies that need updates:\n${messages.join('\n')}`);
+
+ const bulkUpdateResponse = await fleetServices.packagePolicy.bulkUpdate(
+ internalSoClient,
+ esClient,
+ updates,
+ {
+ user: { username: 'elastic' } as AuthenticatedUser,
+ }
+ );
+
+ log.debug(`Bulk update response:\n${JSON.stringify(bulkUpdateResponse, null, 2)}`);
+
+ if (bulkUpdateResponse.failedPolicies.length > 0) {
+ log.error(
+ `Done. ${bulkUpdateResponse.failedPolicies.length} out of ${
+ updates.length
+ } failed to update:\n${JSON.stringify(bulkUpdateResponse.failedPolicies, null, 2)}`
+ );
+ } else {
+ log.info(`Done. All updates applied successfully`);
+ }
+ } else {
+ log.info(`Done. Checked ${total} policies and no updates needed`);
+ }
+};
diff --git a/x-pack/plugins/security_solution/server/endpoint/mocks.ts b/x-pack/plugins/security_solution/server/endpoint/mocks.ts
index f38d96cbf7063..5a3c9ee2297ac 100644
--- a/x-pack/plugins/security_solution/server/endpoint/mocks.ts
+++ b/x-pack/plugins/security_solution/server/endpoint/mocks.ts
@@ -71,6 +71,7 @@ import type { EndpointAuthz } from '../../common/endpoint/types/authz';
import { EndpointFleetServicesFactory } from './services/fleet';
import { createLicenseServiceMock } from '../../common/license/mocks';
import { createFeatureUsageServiceMock } from './services/feature_usage/mocks';
+import { createAppFeaturesMock } from '../lib/app_features/mocks';
/**
* Creates a mocked EndpointAppContext.
@@ -163,6 +164,8 @@ export const createMockEndpointAppContextServiceStartContract =
},
savedObjectsStart
);
+ const experimentalFeatures = config.experimentalFeatures;
+ const appFeatures = createAppFeaturesMock(undefined, experimentalFeatures, undefined, logger);
packagePolicyService.list.mockImplementation(async (_, options) => {
return {
@@ -207,11 +210,12 @@ export const createMockEndpointAppContextServiceStartContract =
cases: casesMock,
cloud: cloudMock.createSetup(),
featureUsageService: createFeatureUsageServiceMock(),
- experimentalFeatures: createMockConfig().experimentalFeatures,
+ experimentalFeatures,
messageSigningService: createMessageSigningServiceMock(),
actionCreateService: undefined,
createFleetActionsClient: jest.fn((_) => fleetActionsClientMock),
esClient: elasticsearchClientMock.createElasticsearchClient(),
+ appFeatures,
};
};
diff --git a/x-pack/plugins/security_solution/server/endpoint/services/fleet/endpoint_fleet_services_factory.ts b/x-pack/plugins/security_solution/server/endpoint/services/fleet/endpoint_fleet_services_factory.ts
index 658ff9f2a327e..1f3df9d6a67d3 100644
--- a/x-pack/plugins/security_solution/server/endpoint/services/fleet/endpoint_fleet_services_factory.ts
+++ b/x-pack/plugins/security_solution/server/endpoint/services/fleet/endpoint_fleet_services_factory.ts
@@ -13,6 +13,8 @@ import type {
PackagePolicyClient,
PackageClient,
} from '@kbn/fleet-plugin/server';
+import { PACKAGE_POLICY_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common';
+import { createInternalSoClient } from '../../utils/create_internal_so_client';
import { createInternalReadonlySoClient } from '../../utils/create_internal_readonly_so_client';
export interface EndpointFleetServicesFactoryInterface {
@@ -42,7 +44,10 @@ export class EndpointFleetServicesFactory implements EndpointFleetServicesFactor
packages: packageService.asInternalUser,
packagePolicy,
+ endpointPolicyKuery: `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name: "endpoint"`,
+
internalReadonlySoClient: createInternalReadonlySoClient(this.savedObjectsStart),
+ internalSoClient: createInternalSoClient(this.savedObjectsStart),
};
}
}
@@ -55,6 +60,8 @@ export interface EndpointFleetServicesInterface {
agentPolicy: AgentPolicyServiceInterface;
packages: PackageClient;
packagePolicy: PackagePolicyClient;
+ /** The `kuery` that can be used to filter for Endpoint integration policies */
+ endpointPolicyKuery: string;
}
export interface EndpointInternalFleetServicesInterface extends EndpointFleetServicesInterface {
@@ -62,4 +69,7 @@ export interface EndpointInternalFleetServicesInterface extends EndpointFleetSer
* An internal SO client (readonly) that can be used with the Fleet services that require it
*/
internalReadonlySoClient: SavedObjectsClientContract;
+
+ /** Internal SO client. USE ONLY WHEN ABSOLUTELY NEEDED. Else, use the `internalReadonlySoClient` */
+ internalSoClient: SavedObjectsClientContract;
}
diff --git a/x-pack/plugins/security_solution/server/endpoint/utils/create_internal_readonly_so_client.ts b/x-pack/plugins/security_solution/server/endpoint/utils/create_internal_readonly_so_client.ts
index d8bf7badec846..b621222e79c0a 100644
--- a/x-pack/plugins/security_solution/server/endpoint/utils/create_internal_readonly_so_client.ts
+++ b/x-pack/plugins/security_solution/server/endpoint/utils/create_internal_readonly_so_client.ts
@@ -5,12 +5,8 @@
* 2.0.
*/
-import { SECURITY_EXTENSION_ID } from '@kbn/core-saved-objects-server';
-import type {
- KibanaRequest,
- SavedObjectsClientContract,
- SavedObjectsServiceStart,
-} from '@kbn/core/server';
+import type { SavedObjectsClientContract, SavedObjectsServiceStart } from '@kbn/core/server';
+import { createInternalSoClient } from './create_internal_so_client';
import { EndpointError } from '../../../common/endpoint/errors';
type SavedObjectsClientContractKeys = keyof SavedObjectsClientContract;
@@ -37,18 +33,7 @@ export class InternalReadonlySoClientMethodNotAllowedError extends EndpointError
export const createInternalReadonlySoClient = (
savedObjectsServiceStart: SavedObjectsServiceStart
): SavedObjectsClientContract => {
- const fakeRequest = {
- headers: {},
- getBasePath: () => '',
- path: '/',
- route: { settings: {} },
- url: { href: {} },
- raw: { req: { url: '/' } },
- } as unknown as KibanaRequest;
-
- const internalSoClient = savedObjectsServiceStart.getScopedClient(fakeRequest, {
- excludedExtensions: [SECURITY_EXTENSION_ID],
- });
+ const internalSoClient = createInternalSoClient(savedObjectsServiceStart);
return new Proxy(internalSoClient, {
get(
diff --git a/x-pack/plugins/security_solution/server/endpoint/utils/create_internal_so_client.ts b/x-pack/plugins/security_solution/server/endpoint/utils/create_internal_so_client.ts
new file mode 100644
index 0000000000000..88e0d7a70a4c3
--- /dev/null
+++ b/x-pack/plugins/security_solution/server/endpoint/utils/create_internal_so_client.ts
@@ -0,0 +1,27 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import type { SavedObjectsServiceStart } from '@kbn/core-saved-objects-server';
+import { SECURITY_EXTENSION_ID } from '@kbn/core-saved-objects-server';
+import type { KibanaRequest, SavedObjectsClientContract } from '@kbn/core/server';
+
+export const createInternalSoClient = (
+ savedObjectsServiceStart: SavedObjectsServiceStart
+): SavedObjectsClientContract => {
+ const fakeRequest = {
+ headers: {},
+ getBasePath: () => '',
+ path: '/',
+ route: { settings: {} },
+ url: { href: {} },
+ raw: { req: { url: '/' } },
+ } as unknown as KibanaRequest;
+
+ return savedObjectsServiceStart.getScopedClient(fakeRequest, {
+ excludedExtensions: [SECURITY_EXTENSION_ID],
+ });
+};
diff --git a/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts b/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts
index 54258638f1230..f26531296b6a2 100644
--- a/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts
+++ b/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts
@@ -54,6 +54,9 @@ import { createMockPolicyData } from '../endpoint/services/feature_usage/mocks';
import { ALL_ENDPOINT_ARTIFACT_LIST_IDS } from '../../common/endpoint/service/artifacts/constants';
import { ENDPOINT_EVENT_FILTERS_LIST_ID } from '@kbn/securitysolution-list-constants';
import { disableProtections } from '../../common/endpoint/models/policy_config_helpers';
+import type { AppFeatures } from '../lib/app_features';
+import { createAppFeaturesMock } from '../lib/app_features/mocks';
+import { ALL_APP_FEATURE_KEYS } from '../../common';
jest.mock('uuid', () => ({
v4: (): string => 'NEW_UUID',
@@ -74,6 +77,7 @@ describe('ingest_integration tests ', () => {
});
const generator = new EndpointDocGenerator();
const cloudService = cloudMock.createSetup();
+ let appFeatures: AppFeatures;
beforeEach(() => {
endpointAppContextMock = createMockEndpointAppContextServiceStartContract();
@@ -82,6 +86,7 @@ describe('ingest_integration tests ', () => {
licenseEmitter = new Subject();
licenseService = new LicenseService();
licenseService.start(licenseEmitter);
+ appFeatures = endpointAppContextMock.appFeatures;
jest
.spyOn(endpointAppContextMock.endpointMetadataService, 'getFleetEndpointPackagePolicy')
@@ -129,7 +134,8 @@ describe('ingest_integration tests ', () => {
endpointAppContextMock.alerting,
licenseService,
exceptionListClient,
- cloudService
+ cloudService,
+ appFeatures
);
return callback(
@@ -363,6 +369,7 @@ describe('ingest_integration tests ', () => {
);
});
});
+
describe('package policy update callback (when the license is below platinum)', () => {
const soClient = savedObjectsClientMock.create();
const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser;
@@ -379,7 +386,8 @@ describe('ingest_integration tests ', () => {
endpointAppContextMock.featureUsageService,
endpointAppContextMock.endpointMetadataService,
cloudService,
- esClient
+ esClient,
+ appFeatures
);
const policyConfig = generator.generatePolicyPackagePolicy();
policyConfig.inputs[0]!.config!.policy.value = mockPolicy;
@@ -397,7 +405,8 @@ describe('ingest_integration tests ', () => {
endpointAppContextMock.featureUsageService,
endpointAppContextMock.endpointMetadataService,
cloudService,
- esClient
+ esClient,
+ appFeatures
);
const policyConfig = generator.generatePolicyPackagePolicy();
policyConfig.inputs[0]!.config!.policy.value = mockPolicy;
@@ -419,6 +428,7 @@ describe('ingest_integration tests ', () => {
beforeEach(() => {
licenseEmitter.next(Platinum); // set license level to platinum
});
+
it('updates successfully when paid features are turned on', async () => {
const mockPolicy = policyFactory();
mockPolicy.windows.popup.malware.message = 'paid feature';
@@ -429,7 +439,8 @@ describe('ingest_integration tests ', () => {
endpointAppContextMock.featureUsageService,
endpointAppContextMock.endpointMetadataService,
cloudService,
- esClient
+ esClient,
+ appFeatures
);
const policyConfig = generator.generatePolicyPackagePolicy();
policyConfig.inputs[0]!.config!.policy.value = mockPolicy;
@@ -442,6 +453,50 @@ describe('ingest_integration tests ', () => {
);
expect(updatedPolicyConfig.inputs[0]!.config!.policy.value).toEqual(mockPolicy);
});
+
+ it('should turn off protections if endpointPolicyProtections appFeature is disabled', async () => {
+ appFeatures = createAppFeaturesMock(
+ ALL_APP_FEATURE_KEYS.filter((key) => key !== 'endpoint_policy_protections')
+ );
+ const callback = getPackagePolicyUpdateCallback(
+ endpointAppContextMock.logger,
+ licenseService,
+ endpointAppContextMock.featureUsageService,
+ endpointAppContextMock.endpointMetadataService,
+ cloudService,
+ esClient,
+ appFeatures
+ );
+
+ const updatedPolicy = await callback(
+ generator.generatePolicyPackagePolicy(),
+ soClient,
+ esClient,
+ requestContextMock.convertContext(ctx),
+ req
+ );
+
+ expect(updatedPolicy.inputs?.[0]?.config?.policy.value).toMatchObject({
+ linux: {
+ behavior_protection: { mode: 'off' },
+ malware: { mode: 'off' },
+ memory_protection: { mode: 'off' },
+ },
+ mac: {
+ behavior_protection: { mode: 'off' },
+ malware: { mode: 'off' },
+ memory_protection: { mode: 'off' },
+ },
+ windows: {
+ antivirus_registration: { enabled: false },
+ attack_surface_reduction: { credential_hardening: { enabled: false } },
+ behavior_protection: { mode: 'off' },
+ malware: { blocklist: false },
+ memory_protection: { mode: 'off' },
+ ransomware: { mode: 'off' },
+ },
+ });
+ });
});
describe('package policy update callback when meta fields should be updated', () => {
@@ -486,7 +541,8 @@ describe('ingest_integration tests ', () => {
endpointAppContextMock.featureUsageService,
endpointAppContextMock.endpointMetadataService,
cloudService,
- esClient
+ esClient,
+ appFeatures
);
const policyConfig = generator.generatePolicyPackagePolicy();
@@ -520,7 +576,8 @@ describe('ingest_integration tests ', () => {
endpointAppContextMock.featureUsageService,
endpointAppContextMock.endpointMetadataService,
cloudService,
- esClient
+ esClient,
+ appFeatures
);
const policyConfig = generator.generatePolicyPackagePolicy();
// values should be updated
diff --git a/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.ts b/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.ts
index b897441fe1e04..04bc9afa6d3a1 100644
--- a/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.ts
+++ b/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.ts
@@ -22,6 +22,12 @@ import type {
} from '@kbn/fleet-plugin/common';
import type { CloudSetup } from '@kbn/cloud-plugin/server';
import type { InfoResponse } from '@elastic/elasticsearch/lib/api/types';
+import { AppFeatureSecurityKey } from '../../common/types/app_features';
+import {
+ isPolicySetToEventCollectionOnly,
+ ensureOnlyEventCollectionIsAllowed,
+} from '../../common/endpoint/models/policy_config_helpers';
+import type { AppFeatures } from '../lib/app_features';
import type { NewPolicyData, PolicyConfig } from '../../common/endpoint/types';
import type { LicenseService } from '../../common/license';
import type { ManifestManager } from '../endpoint/services';
@@ -72,7 +78,8 @@ export const getPackagePolicyCreateCallback = (
alerts: AlertsStartContract,
licenseService: LicenseService,
exceptionsClient: ExceptionListClient | undefined,
- cloud: CloudSetup
+ cloud: CloudSetup,
+ appFeatures: AppFeatures
): PostPackagePolicyCreateCallback => {
return async (
newPackagePolicy,
@@ -140,7 +147,8 @@ export const getPackagePolicyCreateCallback = (
licenseService,
endpointIntegrationConfig,
cloud,
- esClientInfo
+ esClientInfo,
+ appFeatures
);
return {
@@ -175,31 +183,38 @@ export const getPackagePolicyUpdateCallback = (
featureUsageService: FeatureUsageService,
endpointMetadataService: EndpointMetadataService,
cloud: CloudSetup,
- esClient: ElasticsearchClient
+ esClient: ElasticsearchClient,
+ appFeatures: AppFeatures
): PutPackagePolicyUpdateCallback => {
return async (newPackagePolicy: NewPackagePolicy): Promise => {
if (!isEndpointPackagePolicy(newPackagePolicy)) {
return newPackagePolicy;
}
+ const endpointIntegrationData = newPackagePolicy as NewPolicyData;
+
// Validate that Endpoint Security policy is valid against current license
validatePolicyAgainstLicense(
// The cast below is needed in order to ensure proper typing for
// the policy configuration specific for endpoint
- newPackagePolicy.inputs[0].config?.policy?.value as PolicyConfig,
+ endpointIntegrationData.inputs[0].config?.policy?.value as PolicyConfig,
licenseService,
logger
);
- notifyProtectionFeatureUsage(newPackagePolicy, featureUsageService, endpointMetadataService);
+ notifyProtectionFeatureUsage(
+ endpointIntegrationData,
+ featureUsageService,
+ endpointMetadataService
+ );
- const newEndpointPackagePolicy = newPackagePolicy.inputs[0].config?.policy
+ const newEndpointPackagePolicy = endpointIntegrationData.inputs[0].config?.policy
?.value as PolicyConfig;
const esClientInfo: InfoResponse = await esClient.info();
if (
- newPackagePolicy.inputs[0].config?.policy?.value &&
+ endpointIntegrationData.inputs[0].config?.policy?.value &&
shouldUpdateMetaValues(
newEndpointPackagePolicy,
licenseService.getLicenseType(),
@@ -214,10 +229,25 @@ export const getPackagePolicyUpdateCallback = (
newEndpointPackagePolicy.meta.cluster_name = esClientInfo.cluster_name;
newEndpointPackagePolicy.meta.cluster_uuid = esClientInfo.cluster_uuid;
newEndpointPackagePolicy.meta.license_uid = licenseService.getLicenseUID();
- newPackagePolicy.inputs[0].config.policy.value = newEndpointPackagePolicy;
+
+ endpointIntegrationData.inputs[0].config.policy.value = newEndpointPackagePolicy;
+ }
+
+ // If no Policy Protection allowed (ex. serverless)
+ const eventsOnlyPolicy = isPolicySetToEventCollectionOnly(newEndpointPackagePolicy);
+ if (
+ !appFeatures.isEnabled(AppFeatureSecurityKey.endpointPolicyProtections) &&
+ !eventsOnlyPolicy.isOnlyCollectingEvents
+ ) {
+ logger.warn(
+ `Endpoint integration policy [${endpointIntegrationData.id}][${endpointIntegrationData.name}] adjusted due to [endpointPolicyProtections] appFeature not being enabled. Trigger [${eventsOnlyPolicy.message}]`
+ );
+
+ endpointIntegrationData.inputs[0].config.policy.value =
+ ensureOnlyEventCollectionIsAllowed(newEndpointPackagePolicy);
}
- return newPackagePolicy;
+ return endpointIntegrationData;
};
};
diff --git a/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts b/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts
index b707199aa4738..9208f9f7f22cd 100644
--- a/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts
+++ b/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts
@@ -19,6 +19,9 @@ import type {
PolicyCreateCloudConfig,
PolicyCreateEndpointConfig,
} from '../types';
+import type { AppFeatures } from '../../lib/app_features';
+import { createAppFeaturesMock } from '../../lib/app_features/mocks';
+import { ALL_APP_FEATURE_KEYS } from '../../../common';
describe('Create Default Policy tests ', () => {
const cloud = cloudMock.createSetup();
@@ -28,6 +31,7 @@ describe('Create Default Policy tests ', () => {
const Gold = licenseMock.createLicense({ license: { type: 'gold', mode: 'gold', uid: '' } });
let licenseEmitter: Subject;
let licenseService: LicenseService;
+ let appFeatures: AppFeatures;
const createDefaultPolicyCallback = async (
config: AnyPolicyCreateConfig | undefined
@@ -35,7 +39,7 @@ describe('Create Default Policy tests ', () => {
const esClientInfo = await elasticsearchServiceMock.createClusterClient().asInternalUser.info();
esClientInfo.cluster_name = '';
esClientInfo.cluster_uuid = '';
- return createDefaultPolicy(licenseService, config, cloud, esClientInfo);
+ return createDefaultPolicy(licenseService, config, cloud, esClientInfo, appFeatures);
};
beforeEach(() => {
@@ -43,7 +47,9 @@ describe('Create Default Policy tests ', () => {
licenseService = new LicenseService();
licenseService.start(licenseEmitter);
licenseEmitter.next(Platinum); // set license level to platinum
+ appFeatures = createAppFeaturesMock();
});
+
describe('When no config is set', () => {
it('Should return PolicyConfig for events only when license is at least platinum', async () => {
const defaultPolicy = policyFactory();
@@ -174,6 +180,7 @@ describe('Create Default Policy tests ', () => {
});
});
});
+
it('Should return process, file and network events enabled when preset is EDR Essential', async () => {
const config = createEndpointConfig({ preset: 'EDREssential' });
const policy = await createDefaultPolicyCallback(config);
@@ -190,6 +197,7 @@ describe('Create Default Policy tests ', () => {
});
});
});
+
it('Should return the default config when preset is EDR Complete', async () => {
const config = createEndpointConfig({ preset: 'EDRComplete' });
const policy = await createDefaultPolicyCallback(config);
@@ -199,7 +207,37 @@ describe('Create Default Policy tests ', () => {
defaultPolicy.meta.cloud = true;
expect(policy).toMatchObject(defaultPolicy);
});
+
+ it('should set policy to event collection only if endpointPolicyProtections appFeature is disabled', async () => {
+ appFeatures = createAppFeaturesMock(
+ ALL_APP_FEATURE_KEYS.filter((key) => key !== 'endpoint_policy_protections')
+ );
+
+ await expect(
+ createDefaultPolicyCallback(createEndpointConfig({ preset: 'EDRComplete' }))
+ ).resolves.toMatchObject({
+ linux: {
+ behavior_protection: { mode: 'off' },
+ malware: { mode: 'off' },
+ memory_protection: { mode: 'off' },
+ },
+ mac: {
+ behavior_protection: { mode: 'off' },
+ malware: { mode: 'off' },
+ memory_protection: { mode: 'off' },
+ },
+ windows: {
+ antivirus_registration: { enabled: false },
+ attack_surface_reduction: { credential_hardening: { enabled: false } },
+ behavior_protection: { mode: 'off' },
+ malware: { blocklist: false },
+ memory_protection: { mode: 'off' },
+ ransomware: { mode: 'off' },
+ },
+ });
+ });
});
+
describe('When cloud config is set', () => {
const createCloudConfig = (): PolicyCreateCloudConfig => ({
type: 'cloud',
diff --git a/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.ts b/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.ts
index d7c3994c05dc9..db053fd5c3b0e 100644
--- a/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.ts
+++ b/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.ts
@@ -7,6 +7,8 @@
import type { CloudSetup } from '@kbn/cloud-plugin/server';
import type { InfoResponse } from '@elastic/elasticsearch/lib/api/types';
+import { AppFeatureSecurityKey } from '../../../common/types/app_features';
+import type { AppFeatures } from '../../lib/app_features';
import {
policyFactory as policyConfigFactory,
policyFactoryWithoutPaidFeatures as policyConfigFactoryWithoutPaidFeatures,
@@ -20,7 +22,10 @@ import {
ENDPOINT_CONFIG_PRESET_NGAV,
ENDPOINT_CONFIG_PRESET_DATA_COLLECTION,
} from '../constants';
-import { disableProtections } from '../../../common/endpoint/models/policy_config_helpers';
+import {
+ disableProtections,
+ ensureOnlyEventCollectionIsAllowed,
+} from '../../../common/endpoint/models/policy_config_helpers';
/**
* Create the default endpoint policy based on the current license and configuration type
@@ -29,7 +34,8 @@ export const createDefaultPolicy = (
licenseService: LicenseService,
config: AnyPolicyCreateConfig | undefined,
cloud: CloudSetup,
- esClientInfo: InfoResponse
+ esClientInfo: InfoResponse,
+ appFeatures: AppFeatures
): PolicyConfig => {
const factoryPolicy = policyConfigFactory();
@@ -44,15 +50,21 @@ export const createDefaultPolicy = (
: factoryPolicy.meta.cluster_uuid;
factoryPolicy.meta.license_uid = licenseService.getLicenseUID();
- const defaultPolicyPerType =
+ let defaultPolicyPerType: PolicyConfig =
config?.type === 'cloud'
? getCloudPolicyConfig(factoryPolicy)
: getEndpointPolicyWithIntegrationConfig(factoryPolicy, config);
- // Apply license limitations in the final step, so it's not overriden (see malware popup)
- return licenseService.isPlatinumPlus()
- ? defaultPolicyPerType
- : policyConfigFactoryWithoutPaidFeatures(defaultPolicyPerType);
+ if (!licenseService.isPlatinumPlus()) {
+ defaultPolicyPerType = policyConfigFactoryWithoutPaidFeatures(defaultPolicyPerType);
+ }
+
+ // If no Policy Protection allowed (ex. serverless)
+ if (!appFeatures.isEnabled(AppFeatureSecurityKey.endpointPolicyProtections)) {
+ defaultPolicyPerType = ensureOnlyEventCollectionIsAllowed(defaultPolicyPerType);
+ }
+
+ return defaultPolicyPerType;
};
/**
diff --git a/x-pack/plugins/security_solution/server/lib/app_features/app_features.ts b/x-pack/plugins/security_solution/server/lib/app_features/app_features.ts
index 69c6c33d335c3..edeec0d533a40 100644
--- a/x-pack/plugins/security_solution/server/lib/app_features/app_features.ts
+++ b/x-pack/plugins/security_solution/server/lib/app_features/app_features.ts
@@ -59,7 +59,7 @@ export class AppFeatures {
return this.appFeatures.has(appFeatureKey);
}
- private registerEnabledKibanaFeatures() {
+ protected registerEnabledKibanaFeatures() {
if (this.featuresSetup == null) {
throw new Error(
'Cannot sync kibana features as featuresSetup is not present. Did you call init?'
diff --git a/x-pack/plugins/security_solution/server/lib/app_features/mocks.ts b/x-pack/plugins/security_solution/server/lib/app_features/mocks.ts
new file mode 100644
index 0000000000000..1a5efc9c64e37
--- /dev/null
+++ b/x-pack/plugins/security_solution/server/lib/app_features/mocks.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 type { Logger } from '@kbn/core/server';
+import type { PluginSetupContract as FeaturesPluginSetup } from '@kbn/features-plugin/server';
+import { loggingSystemMock } from '@kbn/core-logging-server-mocks';
+import { featuresPluginMock } from '@kbn/features-plugin/server/mocks';
+import { AppFeatures } from './app_features';
+import type { AppFeatureKeys, ExperimentalFeatures } from '../../../common';
+import { ALL_APP_FEATURE_KEYS, allowedExperimentalValues } from '../../../common';
+
+class AppFeaturesMock extends AppFeatures {
+ protected registerEnabledKibanaFeatures() {
+ // NOOP
+ }
+}
+
+export const createAppFeaturesMock = (
+ /** What features keys should be enabled. Default is all */
+ enabledFeatureKeys: AppFeatureKeys = [...ALL_APP_FEATURE_KEYS],
+ experimentalFeatures: ExperimentalFeatures = { ...allowedExperimentalValues },
+ featuresPluginSetupContract: FeaturesPluginSetup = featuresPluginMock.createSetup(),
+ logger: Logger = loggingSystemMock.create().get('appFeatureMock')
+) => {
+ const appFeatures = new AppFeaturesMock(logger, experimentalFeatures);
+
+ appFeatures.init(featuresPluginSetupContract);
+
+ if (enabledFeatureKeys) {
+ appFeatures.set(enabledFeatureKeys);
+ }
+
+ return appFeatures;
+};
diff --git a/x-pack/plugins/security_solution/server/plugin.ts b/x-pack/plugins/security_solution/server/plugin.ts
index e64a5808eb3dd..4e7beb558d4de 100644
--- a/x-pack/plugins/security_solution/server/plugin.ts
+++ b/x-pack/plugins/security_solution/server/plugin.ts
@@ -17,6 +17,7 @@ import { Dataset } from '@kbn/rule-registry-plugin/server';
import type { ListPluginSetup } from '@kbn/lists-plugin/server';
import type { ILicense } from '@kbn/licensing-plugin/server';
+import { turnOffPolicyProtectionsIfNotSupported } from './endpoint/migrations/turn_off_policy_protections';
import { endpointSearchStrategyProvider } from './search_strategy/endpoint';
import { getScheduleNotificationResponseActionsService } from './lib/detection_engine/rule_response_actions/schedule_notification_response_actions';
import { siemGuideId, siemGuideConfig } from '../common/guided_onboarding/siem_guide_config';
@@ -438,6 +439,15 @@ export class Plugin implements ISecuritySolutionPlugin {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
plugins.fleet!;
let manifestManager: ManifestManager | undefined;
+ const endpointFleetServicesFactory = new EndpointFleetServicesFactory(
+ {
+ agentService,
+ packageService,
+ packagePolicyService,
+ agentPolicyService,
+ },
+ core.savedObjects
+ );
this.licensing$ = plugins.licensing.license$;
@@ -459,17 +469,23 @@ export class Plugin implements ISecuritySolutionPlugin {
esClient: core.elasticsearch.client.asInternalUser,
});
- // Migrate artifacts to fleet and then start the minifest task after that is done
+ // Migrate artifacts to fleet and then start the manifest task after that is done
plugins.fleet.fleetSetupCompleted().then(() => {
- logger.info('Dependent plugin setup complete - Starting ManifestTask');
-
if (this.manifestTask) {
+ logger.info('Dependent plugin setup complete - Starting ManifestTask');
this.manifestTask.start({
taskManager,
});
} else {
logger.error(new Error('User artifacts task not available.'));
}
+
+ turnOffPolicyProtectionsIfNotSupported(
+ core.elasticsearch.client.asInternalUser,
+ endpointFleetServicesFactory.asInternalUser(),
+ this.appFeatures,
+ logger
+ );
});
// License related start
@@ -493,15 +509,7 @@ export class Plugin implements ISecuritySolutionPlugin {
packagePolicyService,
logger
),
- endpointFleetServicesFactory: new EndpointFleetServicesFactory(
- {
- agentService,
- packageService,
- packagePolicyService,
- agentPolicyService,
- },
- core.savedObjects
- ),
+ endpointFleetServicesFactory,
security: plugins.security,
alerting: plugins.alerting,
config: this.config,
@@ -522,6 +530,7 @@ export class Plugin implements ISecuritySolutionPlugin {
),
createFleetActionsClient,
esClient: core.elasticsearch.client.asInternalUser,
+ appFeatures: this.appFeatures,
});
this.telemetryReceiver.start(
From f09a5c976c8a8059a448b389738ea44b4fd1f60c Mon Sep 17 00:00:00 2001
From: Marco Antonio Ghiani
Date: Fri, 11 Aug 2023 15:32:42 +0200
Subject: [PATCH 15/46] [Log Explorer] Add test suite for Dataset Selector
(#163079)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## 📓 Summary
Closes #160627
This implementation adds the majority of the tests listed down here for
the Log Explorer current implementation.
✅ [**Flaky Test Runner - x50
executions**](https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/2844#_)
```
↳ Discover Log-Explorer profile
↳ Columns selection initialization and update
↳ when the log explorer profile loads
↳ should initialize the table columns to logs' default selection
↳ should restore the table columns from the URL state if exists
↳ Customizations
↳ when Discover is loaded with the log-explorer profile
↳ DatasetSelector should replace the DataViewPicker
↳ the TopNav bar should hide the New, Open and Save options
↳ should add a searchable deep link to the profile page
↳ should render a filter controls section as part of the unified search bar
↳ DatasetSelection initialization and update
↳ when the "index" query param does not exist
↳ should initialize the "All log datasets" selection
↳ when the "index" query param exists
↳ should decode and restore the selection from a valid encoded index
↳ should fallback to the "All log datasets" selection and notify the user of an invalid encoded index
↳ when navigating back and forth on the page history
↳ should decode and restore the selection for the current index
↳ Dataset Selector
↳ without installed integrations or uncategorized data streams
↳ when open on the first navigation level
↳ should always display the "All log datasets" entry as the first item
↳ should always display the unmanaged datasets entry as the second item
↳ should display an error prompt if could not retrieve the integrations
↳ should display an empty prompt for no integrations
↳ when navigating into Uncategorized data streams
↳ should display a loading skeleton while loading
↳ should display an error prompt if could not retrieve the data streams
↳ should display an empty prompt for no data streams
↳ with installed integrations and uncategorized data streams
↳ when open on the first navigation level
↳ should always display the "All log datasets" entry as the first item
↳ should always display the unmanaged datasets entry as the second item
↳ should display a list of installed integrations
↳ should sort the integrations list by the clicked sorting option
↳ should filter the integrations list by the typed integration name
↳ should display an empty prompt when the search does not match any result
↳ should load more integrations by scrolling to the end of the list
↳ when clicking on integration and moving into the second navigation level
↳ should display a list of available datasets
↳ should sort the datasets list by the clicked sorting option
↳ should filter the datasets list by the typed dataset name
↳ should update the current selection with the clicked dataset
↳ when navigating into Uncategorized data streams
↳ should display a list of available datasets
↳ should sort the datasets list by the clicked sorting option
↳ should filter the datasets list by the typed dataset name
↳ should update the current selection with the clicked dataset
↳ when open/close the selector
↳ should restore the latest navigation panel
↳ should restore the latest search results
↳ when switching between integration panels
↳ should remember the latest search and restore its results for each integration
```
## Note on serverless tests suite
For testing the feature in a serverless environment, we are copying all
the tests into the `x-pack/test_serverless` folder until
https://github.com/elastic/kibana/pull/161574 is merged, which will
provide a new space to write tests independently from the deployment
type, avoiding then tests duplication.
## New `browser` service utils for Network conditions simulation
To properly test that this feature works correctly under poor network
conditions or offline scenarios, the `browser` service now exposes some
new methods for altering network conditions on demand.
Also, network profiles to match the [network profiles provided by Chrome
debugger](https://github.com/ChromeDevTools/devtools-frontend/blob/da276a3faec9769cb55e442f0db77ebdce5cd178/front_end/core/sdk/NetworkManager.ts#L363-L393)
have been created.
In case the browser is not of `chromium` type and the driver does not
support the network simulation, these methods throw an error that can be
caught for skipping the affected test.
---------
Co-authored-by: Marco Antonio Ghiani
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
---
.../dataset_selector/dataset_selector.tsx | 1 +
.../sub_components/datasets_list.tsx | 2 +
.../sub_components/datasets_popover.tsx | 12 +-
.../sub_components/datasets_skeleton.tsx | 2 +-
.../integrations_list_status.tsx | 1 +
.../sub_components/search_controls.tsx | 7 +-
.../components/dataset_selector/utils.tsx | 4 +
.../customizations/custom_dataset_filters.tsx | 4 +-
.../columns_selection.ts | 57 ++
.../discover_log_explorer/customization.ts | 16 +-
.../dataset_selection_state.ts | 4 +-
.../discover_log_explorer/dataset_selector.ts | 664 ++++++++++++++++++
.../apps/discover_log_explorer/index.ts | 2 +
.../data_streams/data.json.gz | Bin 0 -> 29526 bytes
.../data_streams/mappings.json | 419 +++++++++++
.../page_objects/discover_log_explorer.ts | 281 +++++++-
.../columns_selection.ts | 57 ++
.../discover_log_explorer/customization.ts | 14 +-
.../discover_log_explorer/dataset_selector.ts | 664 ++++++++++++++++++
.../discover_log_explorer/index.ts | 2 +
20 files changed, 2198 insertions(+), 15 deletions(-)
create mode 100644 x-pack/test/functional/apps/discover_log_explorer/columns_selection.ts
create mode 100644 x-pack/test/functional/apps/discover_log_explorer/dataset_selector.ts
create mode 100644 x-pack/test/functional/es_archives/discover_log_explorer/data_streams/data.json.gz
create mode 100644 x-pack/test/functional/es_archives/discover_log_explorer/data_streams/mappings.json
create mode 100644 x-pack/test_serverless/functional/test_suites/observability/discover_log_explorer/columns_selection.ts
create mode 100644 x-pack/test_serverless/functional/test_suites/observability/discover_log_explorer/dataset_selector.ts
diff --git a/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/dataset_selector.tsx b/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/dataset_selector.tsx
index aa1fb057bbd32..444ec69c9d266 100644
--- a/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/dataset_selector.tsx
+++ b/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/dataset_selector.tsx
@@ -168,6 +168,7 @@ export function DatasetSelector({
onPanelChange={changePanel}
className="eui-yScroll"
css={contextMenuStyles}
+ data-test-subj="datasetSelectorContextMenu"
size="s"
/>
diff --git a/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/datasets_list.tsx b/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/datasets_list.tsx
index 9decd3732fda4..134bd7616ac8a 100644
--- a/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/datasets_list.tsx
+++ b/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/datasets_list.tsx
@@ -44,6 +44,7 @@ export const DatasetsList = ({
if (hasError) {
return (
{noDatasetsLabel}}
diff --git a/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/datasets_popover.tsx b/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/datasets_popover.tsx
index d6c9771da019d..7428ffbd47612 100644
--- a/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/datasets_popover.tsx
+++ b/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/datasets_popover.tsx
@@ -45,7 +45,8 @@ export const DatasetsPopover = ({
return (
{iconType ? (
@@ -74,7 +75,12 @@ export const DatasetsPopover = ({
{...(isMobile && { display: 'block' })}
{...props}
>
-
+
{selectDatasetLabel}
diff --git a/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/datasets_skeleton.tsx b/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/datasets_skeleton.tsx
index be9464204497d..8a9ee61d8e434 100644
--- a/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/datasets_skeleton.tsx
+++ b/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/datasets_skeleton.tsx
@@ -10,7 +10,7 @@ import { EuiPanel, EuiSkeletonText } from '@elastic/eui';
import { uncategorizedLabel } from '../constants';
export const DatasetSkeleton = () => (
-
+
);
diff --git a/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/integrations_list_status.tsx b/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/integrations_list_status.tsx
index 418ccbefffd00..42ff78fdd3e83 100644
--- a/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/integrations_list_status.tsx
+++ b/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/integrations_list_status.tsx
@@ -34,6 +34,7 @@ export const IntegrationsListStatus = ({
if (hasError) {
return (
+
,
+ 'data-test-subj': integration.id,
panel: integration.id,
...(isLastIntegration && { buttonRef: spyRef }),
});
@@ -85,6 +86,7 @@ export const createAllLogDatasetsItem = ({ onClick }: { onClick(): void }) => {
const allLogDataset = Dataset.createAllLogsDataset();
return {
name: allLogDataset.title,
+ 'data-test-subj': 'allLogDatasets',
icon: allLogDataset.iconType && ,
onClick,
};
@@ -93,6 +95,7 @@ export const createAllLogDatasetsItem = ({ onClick }: { onClick(): void }) => {
export const createUnmanagedDatasetsItem = ({ onClick }: { onClick: LoadDatasets }) => {
return {
name: uncategorizedLabel,
+ 'data-test-subj': 'unmanagedDatasets',
icon: ,
onClick,
panel: UNMANAGED_STREAMS_PANEL_ID,
@@ -103,5 +106,6 @@ export const createIntegrationStatusItem = (props: IntegrationsListStatusProps)
return {
disabled: true,
name: ,
+ 'data-test-subj': 'integrationStatusItem',
};
};
diff --git a/x-pack/plugins/discover_log_explorer/public/customizations/custom_dataset_filters.tsx b/x-pack/plugins/discover_log_explorer/public/customizations/custom_dataset_filters.tsx
index f2e1114eeefc7..a669ebea33942 100644
--- a/x-pack/plugins/discover_log_explorer/public/customizations/custom_dataset_filters.tsx
+++ b/x-pack/plugins/discover_log_explorer/public/customizations/custom_dataset_filters.tsx
@@ -12,6 +12,8 @@ import { DataPublicPluginStart } from '@kbn/data-plugin/public';
import { useControlPanels } from '../hooks/use_control_panels';
import { LogExplorerProfileStateService } from '../state_machines/log_explorer_profile';
+const DATASET_FILTERS_CUSTOMIZATION_ID = 'datasetFiltersCustomization';
+
interface CustomDatasetFiltersProps {
logExplorerProfileStateService: LogExplorerProfileStateService;
data: DataPublicPluginStart;
@@ -27,7 +29,7 @@ const CustomDatasetFilters = ({
);
return (
-
+
{
+ before(async () => {
+ await esArchiver.load(
+ 'x-pack/test/functional/es_archives/discover_log_explorer/data_streams'
+ );
+ });
+
+ after(async () => {
+ await esArchiver.unload(
+ 'x-pack/test/functional/es_archives/discover_log_explorer/data_streams'
+ );
+ });
+
+ describe('when the log explorer profile loads', () => {
+ it("should initialize the table columns to logs' default selection", async () => {
+ await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
+
+ await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage();
+
+ await retry.try(async () => {
+ expect(await PageObjects.discover.getColumnHeaders()).to.eql(defaultLogColumns);
+ });
+ });
+
+ it('should restore the table columns from the URL state if exists', async () => {
+ await PageObjects.common.navigateToApp('discover', {
+ hash: '/p/log-explorer?_a=(columns:!(message,data_stream.namespace))',
+ });
+
+ await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage();
+
+ await retry.try(async () => {
+ expect(await PageObjects.discover.getColumnHeaders()).to.eql([
+ ...defaultLogColumns,
+ 'data_stream.namespace',
+ ]);
+ });
+ });
+ });
+ });
+}
diff --git a/x-pack/test/functional/apps/discover_log_explorer/customization.ts b/x-pack/test/functional/apps/discover_log_explorer/customization.ts
index 2dba2ed30b695..6cd713a40f63a 100644
--- a/x-pack/test/functional/apps/discover_log_explorer/customization.ts
+++ b/x-pack/test/functional/apps/discover_log_explorer/customization.ts
@@ -25,14 +25,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
it('DatasetSelector should replace the DataViewPicker', async () => {
// Assert does not render on discover app
await PageObjects.common.navigateToApp('discover');
- await testSubjects.missingOrFail('dataset-selector-popover');
+ await testSubjects.missingOrFail('datasetSelectorPopover');
// Assert it renders on log-explorer profile
await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
- await testSubjects.existOrFail('dataset-selector-popover');
+ await testSubjects.existOrFail('datasetSelectorPopover');
});
- it('the TopNav bar should hide New, Open and Save options', async () => {
+ it('the TopNav bar should hide then New, Open and Save options', async () => {
// Assert does not render on discover app
await PageObjects.common.navigateToApp('discover');
await testSubjects.existOrFail('discoverNewButton');
@@ -59,6 +59,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const results = await PageObjects.navigationalSearch.getDisplayedResults();
expect(results[0].label).to.eql('Discover / Logs Explorer');
});
+
+ it('should render a filter controls section as part of the unified search bar', async () => {
+ // Assert does not render on discover app
+ await PageObjects.common.navigateToApp('discover');
+ await testSubjects.missingOrFail('datasetFiltersCustomization');
+
+ // Assert it renders on log-explorer profile
+ await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
+ await testSubjects.existOrFail('datasetFiltersCustomization', { allowHidden: true });
+ });
});
});
}
diff --git a/x-pack/test/functional/apps/discover_log_explorer/dataset_selection_state.ts b/x-pack/test/functional/apps/discover_log_explorer/dataset_selection_state.ts
index f795afb966493..c1c2b335358bc 100644
--- a/x-pack/test/functional/apps/discover_log_explorer/dataset_selection_state.ts
+++ b/x-pack/test/functional/apps/discover_log_explorer/dataset_selection_state.ts
@@ -23,7 +23,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
});
});
- describe('when the "index" query param exist', () => {
+ describe('when the "index" query param exists', () => {
it('should decode and restore the selection from a valid encoded index', async () => {
const azureActivitylogsIndex =
'BQZwpgNmDGAuCWB7AdgLmAEwIay+W6yWAtmKgOQSIDmIAtFgF4CuATmAHRZzwBu8sAJ5VadAFTkANAlhRU3BPyEiQASklFS8lu2kC55AII6wAAgAyNEFN5hWIJGnIBGDgFYOAJgDM5deCgeFAAVQQAHMgdkaihVIA===';
@@ -37,7 +37,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
expect(datasetSelectionTitle).to.be('[Azure Logs] activitylogs');
});
- it('should fallback to "All log datasets" selection and notify the user for an invalid encoded index', async () => {
+ it('should fallback to the "All log datasets" selection and notify the user of an invalid encoded index', async () => {
const invalidEncodedIndex = 'invalid-encoded-index';
await PageObjects.common.navigateToApp('discover', {
hash: `/p/log-explorer?_a=(index:${encodeURIComponent(invalidEncodedIndex)})`,
diff --git a/x-pack/test/functional/apps/discover_log_explorer/dataset_selector.ts b/x-pack/test/functional/apps/discover_log_explorer/dataset_selector.ts
new file mode 100644
index 0000000000000..b456da8bddb2a
--- /dev/null
+++ b/x-pack/test/functional/apps/discover_log_explorer/dataset_selector.ts
@@ -0,0 +1,664 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+import expect from '@kbn/expect';
+import { FtrProviderContext } from '../../ftr_provider_context';
+
+const initialPackageMap = {
+ apache: 'Apache HTTP Server',
+ aws: 'AWS',
+ system: 'System',
+};
+const initialPackagesTexts = Object.values(initialPackageMap);
+
+const expectedUncategorized = ['logs-gaming-*', 'logs-manufacturing-*', 'logs-retail-*'];
+
+export default function ({ getService, getPageObjects }: FtrProviderContext) {
+ const browser = getService('browser');
+ const esArchiver = getService('esArchiver');
+ const retry = getService('retry');
+ const PageObjects = getPageObjects(['common', 'discoverLogExplorer']);
+
+ describe('Dataset Selector', () => {
+ before(async () => {
+ await PageObjects.discoverLogExplorer.removeInstalledPackages();
+ });
+
+ describe('without installed integrations or uncategorized data streams', () => {
+ before(async () => {
+ await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
+ });
+
+ beforeEach(async () => {
+ await browser.refresh();
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+ });
+
+ describe('when open on the first navigation level', () => {
+ it('should always display the "All log datasets" entry as the first item', async () => {
+ const allLogDatasetButton =
+ await PageObjects.discoverLogExplorer.getAllLogDatasetsButton();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ const allLogDatasetTitle = await allLogDatasetButton.getVisibleText();
+ const firstEntryTitle = await menuEntries[0].getVisibleText();
+
+ expect(allLogDatasetTitle).to.be('All log datasets');
+ expect(allLogDatasetTitle).to.be(firstEntryTitle);
+ });
+
+ it('should always display the unmanaged datasets entry as the second item', async () => {
+ const unamanagedDatasetButton =
+ await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ const unmanagedDatasetTitle = await unamanagedDatasetButton.getVisibleText();
+ const secondEntryTitle = await menuEntries[1].getVisibleText();
+
+ expect(unmanagedDatasetTitle).to.be('Uncategorized');
+ expect(unmanagedDatasetTitle).to.be(secondEntryTitle);
+ });
+
+ it('should display an error prompt if could not retrieve the integrations', async function () {
+ // Skip the test in case network condition utils are not available
+ try {
+ await retry.try(async () => {
+ await PageObjects.discoverLogExplorer.assertNoIntegrationsPromptExists();
+ });
+
+ await PageObjects.common.sleep(5000);
+ await browser.setNetworkConditions('OFFLINE');
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('a');
+
+ await retry.try(async () => {
+ await PageObjects.discoverLogExplorer.assertNoIntegrationsErrorExists();
+ });
+
+ await browser.restoreNetworkConditions();
+ } catch (error) {
+ this.skip();
+ }
+ });
+
+ it('should display an empty prompt for no integrations', async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations.length).to.be(0);
+
+ await PageObjects.discoverLogExplorer.assertNoIntegrationsPromptExists();
+ });
+ });
+
+ describe('when navigating into Uncategorized data streams', () => {
+ it('should display a loading skeleton while loading', async function () {
+ // Skip the test in case network condition utils are not available
+ try {
+ await browser.setNetworkConditions('SLOW_3G'); // Almost stuck network conditions
+ const unamanagedDatasetButton =
+ await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ await unamanagedDatasetButton.click();
+
+ await PageObjects.discoverLogExplorer.assertLoadingSkeletonExists();
+
+ await browser.restoreNetworkConditions();
+ } catch (error) {
+ this.skip();
+ }
+ });
+
+ it('should display an error prompt if could not retrieve the data streams', async function () {
+ // Skip the test in case network condition utils are not available
+ try {
+ const unamanagedDatasetButton =
+ await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ await unamanagedDatasetButton.click();
+
+ await retry.try(async () => {
+ await PageObjects.discoverLogExplorer.assertNoDataStreamsPromptExists();
+ });
+
+ await browser.setNetworkConditions('OFFLINE');
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('a');
+
+ await retry.try(async () => {
+ await PageObjects.discoverLogExplorer.assertNoDataStreamsErrorExists();
+ });
+
+ await browser.restoreNetworkConditions();
+ } catch (error) {
+ this.skip();
+ }
+ });
+
+ it('should display an empty prompt for no data streams', async () => {
+ const unamanagedDatasetButton =
+ await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ await unamanagedDatasetButton.click();
+
+ const unamanagedDatasetEntries =
+ await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(unamanagedDatasetEntries.length).to.be(0);
+
+ await PageObjects.discoverLogExplorer.assertNoDataStreamsPromptExists();
+ });
+ });
+ });
+
+ describe('with installed integrations and uncategorized data streams', () => {
+ let cleanupIntegrationsSetup: () => Promise;
+
+ before(async () => {
+ await esArchiver.load(
+ 'x-pack/test/functional/es_archives/discover_log_explorer/data_streams'
+ );
+ cleanupIntegrationsSetup = await PageObjects.discoverLogExplorer.setupInitialIntegrations();
+ });
+
+ after(async () => {
+ await esArchiver.unload(
+ 'x-pack/test/functional/es_archives/discover_log_explorer/data_streams'
+ );
+ await cleanupIntegrationsSetup();
+ });
+
+ describe('when open on the first navigation level', () => {
+ before(async () => {
+ await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
+ });
+
+ beforeEach(async () => {
+ await browser.refresh();
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+ });
+
+ it('should always display the "All log datasets" entry as the first item', async () => {
+ const allLogDatasetButton =
+ await PageObjects.discoverLogExplorer.getAllLogDatasetsButton();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ const allLogDatasetTitle = await allLogDatasetButton.getVisibleText();
+ const firstEntryTitle = await menuEntries[0].getVisibleText();
+
+ expect(allLogDatasetTitle).to.be('All log datasets');
+ expect(allLogDatasetTitle).to.be(firstEntryTitle);
+ });
+
+ it('should always display the unmanaged datasets entry as the second item', async () => {
+ const unamanagedDatasetButton =
+ await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ const unmanagedDatasetTitle = await unamanagedDatasetButton.getVisibleText();
+ const secondEntryTitle = await menuEntries[1].getVisibleText();
+
+ expect(unmanagedDatasetTitle).to.be('Uncategorized');
+ expect(unmanagedDatasetTitle).to.be(secondEntryTitle);
+ });
+
+ it('should display a list of installed integrations', async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+
+ expect(integrations.length).to.be(3);
+ expect(integrations).to.eql(initialPackagesTexts);
+ });
+
+ it('should sort the integrations list by the clicked sorting option', async () => {
+ // Test ascending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('asc');
+
+ await retry.try(async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql(initialPackagesTexts);
+ });
+
+ // Test descending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('desc');
+
+ await retry.try(async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql(initialPackagesTexts.slice().reverse());
+ });
+
+ // Test back ascending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('asc');
+
+ await retry.try(async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql(initialPackagesTexts);
+ });
+ });
+
+ it('should filter the integrations list by the typed integration name', async () => {
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('system');
+
+ await retry.try(async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql([initialPackageMap.system]);
+ });
+
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('a');
+
+ await retry.try(async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql([initialPackageMap.apache, initialPackageMap.aws]);
+ });
+ });
+
+ it('should display an empty prompt when the search does not match any result', async () => {
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('no result search text');
+
+ await retry.try(async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations.length).to.be(0);
+ });
+
+ await PageObjects.discoverLogExplorer.assertNoIntegrationsPromptExists();
+ });
+
+ it('should load more integrations by scrolling to the end of the list', async () => {
+ // Install more integrations and reload the page
+ const cleanupAdditionalSetup =
+ await PageObjects.discoverLogExplorer.setupAdditionalIntegrations();
+ await browser.refresh();
+
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+
+ // Initially fetched integrations
+ await retry.try(async () => {
+ const { nodes } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(nodes.length).to.be(15);
+ await nodes.at(-1)?.scrollIntoViewIfNecessary();
+ });
+
+ // Load more integrations
+ await retry.try(async () => {
+ const { nodes } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(nodes.length).to.be(20);
+ await nodes.at(-1)?.scrollIntoViewIfNecessary();
+ });
+
+ // No other integrations to load after scrolling to last integration
+ await retry.try(async () => {
+ const { nodes } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(nodes.length).to.be(20);
+ });
+
+ cleanupAdditionalSetup();
+ });
+ });
+
+ describe('when clicking on integration and moving into the second navigation level', () => {
+ before(async () => {
+ await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
+ });
+
+ beforeEach(async () => {
+ await browser.refresh();
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+ });
+
+ it('should display a list of available datasets', async () => {
+ await retry.try(async () => {
+ const { nodes } = await PageObjects.discoverLogExplorer.getIntegrations();
+ await nodes[0].click();
+ });
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Apache HTTP Server');
+ expect(await menuEntries[0].getVisibleText()).to.be('access');
+ expect(await menuEntries[1].getVisibleText()).to.be('error');
+ });
+ });
+
+ it('should sort the datasets list by the clicked sorting option', async () => {
+ await retry.try(async () => {
+ const { nodes } = await PageObjects.discoverLogExplorer.getIntegrations();
+ await nodes[0].click();
+ });
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Apache HTTP Server');
+ });
+
+ // Test ascending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('asc');
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be('access');
+ expect(await menuEntries[1].getVisibleText()).to.be('error');
+ });
+
+ // Test descending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('desc');
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be('error');
+ expect(await menuEntries[1].getVisibleText()).to.be('access');
+ });
+
+ // Test back ascending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('asc');
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be('access');
+ expect(await menuEntries[1].getVisibleText()).to.be('error');
+ });
+ });
+
+ it('should filter the datasets list by the typed dataset name', async () => {
+ await retry.try(async () => {
+ const { nodes } = await PageObjects.discoverLogExplorer.getIntegrations();
+ await nodes[0].click();
+ });
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Apache HTTP Server');
+ });
+
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be('access');
+ expect(await menuEntries[1].getVisibleText()).to.be('error');
+ });
+
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('err');
+
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(menuEntries.length).to.be(1);
+ expect(await menuEntries[0].getVisibleText()).to.be('error');
+ });
+ });
+
+ it('should update the current selection with the clicked dataset', async () => {
+ await retry.try(async () => {
+ const { nodes } = await PageObjects.discoverLogExplorer.getIntegrations();
+ await nodes[0].click();
+ });
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Apache HTTP Server');
+ });
+
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be('access');
+ menuEntries[0].click();
+ });
+
+ await retry.try(async () => {
+ const selectorButton = await PageObjects.discoverLogExplorer.getDatasetSelectorButton();
+
+ expect(await selectorButton.getVisibleText()).to.be('[Apache HTTP Server] access');
+ });
+ });
+ });
+
+ describe('when navigating into Uncategorized data streams', () => {
+ before(async () => {
+ await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
+ });
+
+ beforeEach(async () => {
+ await browser.refresh();
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+ });
+
+ it('should display a list of available datasets', async () => {
+ const button = await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ await button.click();
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Uncategorized');
+ expect(await menuEntries[0].getVisibleText()).to.be(expectedUncategorized[0]);
+ expect(await menuEntries[1].getVisibleText()).to.be(expectedUncategorized[1]);
+ expect(await menuEntries[2].getVisibleText()).to.be(expectedUncategorized[2]);
+ });
+ });
+
+ it('should sort the datasets list by the clicked sorting option', async () => {
+ const button = await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ await button.click();
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Uncategorized');
+ });
+
+ // Test ascending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('asc');
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be(expectedUncategorized[0]);
+ expect(await menuEntries[1].getVisibleText()).to.be(expectedUncategorized[1]);
+ expect(await menuEntries[2].getVisibleText()).to.be(expectedUncategorized[2]);
+ });
+
+ // Test descending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('desc');
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be(expectedUncategorized[2]);
+ expect(await menuEntries[1].getVisibleText()).to.be(expectedUncategorized[1]);
+ expect(await menuEntries[2].getVisibleText()).to.be(expectedUncategorized[0]);
+ });
+
+ // Test back ascending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('asc');
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be(expectedUncategorized[0]);
+ expect(await menuEntries[1].getVisibleText()).to.be(expectedUncategorized[1]);
+ expect(await menuEntries[2].getVisibleText()).to.be(expectedUncategorized[2]);
+ });
+ });
+
+ it('should filter the datasets list by the typed dataset name', async () => {
+ const button = await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ await button.click();
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Uncategorized');
+ });
+
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be(expectedUncategorized[0]);
+ expect(await menuEntries[1].getVisibleText()).to.be(expectedUncategorized[1]);
+ expect(await menuEntries[2].getVisibleText()).to.be(expectedUncategorized[2]);
+ });
+
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('retail');
+
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(menuEntries.length).to.be(1);
+ expect(await menuEntries[0].getVisibleText()).to.be('logs-retail-*');
+ });
+ });
+
+ it('should update the current selection with the clicked dataset', async () => {
+ const button = await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ await button.click();
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Uncategorized');
+ });
+
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be('logs-gaming-*');
+ menuEntries[0].click();
+ });
+
+ await retry.try(async () => {
+ const selectorButton = await PageObjects.discoverLogExplorer.getDatasetSelectorButton();
+
+ expect(await selectorButton.getVisibleText()).to.be('logs-gaming-*');
+ });
+ });
+ });
+
+ describe('when open/close the selector', () => {
+ before(async () => {
+ await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
+ });
+
+ beforeEach(async () => {
+ await browser.refresh();
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+ });
+
+ it('should restore the latest navigation panel', async () => {
+ await retry.try(async () => {
+ const { nodes } = await PageObjects.discoverLogExplorer.getIntegrations();
+ await nodes[0].click();
+ });
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Apache HTTP Server');
+ expect(await menuEntries[0].getVisibleText()).to.be('access');
+ expect(await menuEntries[1].getVisibleText()).to.be('error');
+ });
+
+ await PageObjects.discoverLogExplorer.closeDatasetSelector();
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Apache HTTP Server');
+ expect(await menuEntries[0].getVisibleText()).to.be('access');
+ expect(await menuEntries[1].getVisibleText()).to.be('error');
+ });
+ });
+
+ it('should restore the latest search results', async () => {
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('system');
+
+ await retry.try(async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql([initialPackageMap.system]);
+ });
+
+ await PageObjects.discoverLogExplorer.closeDatasetSelector();
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+
+ await retry.try(async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql([initialPackageMap.system]);
+ });
+ });
+ });
+
+ describe('when switching between integration panels', () => {
+ before(async () => {
+ await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
+ });
+
+ it('should remember the latest search and restore its results for each integration', async () => {
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+ await PageObjects.discoverLogExplorer.clearSearchField();
+
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('apache');
+
+ await retry.try(async () => {
+ const { nodes, integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql([initialPackageMap.apache]);
+ nodes[0].click();
+ });
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Apache HTTP Server');
+ expect(await menuEntries[0].getVisibleText()).to.be('access');
+ expect(await menuEntries[1].getVisibleText()).to.be('error');
+ });
+
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('err');
+
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(menuEntries.length).to.be(1);
+ expect(await menuEntries[0].getVisibleText()).to.be('error');
+ });
+
+ // Navigate back to integrations
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+ panelTitleNode.click();
+
+ await retry.try(async () => {
+ const { nodes, integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql([initialPackageMap.apache]);
+
+ const searchValue = await PageObjects.discoverLogExplorer.getSearchFieldValue();
+ expect(searchValue).to.eql('apache');
+
+ nodes[0].click();
+ });
+
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ const searchValue = await PageObjects.discoverLogExplorer.getSearchFieldValue();
+ expect(searchValue).to.eql('err');
+
+ expect(menuEntries.length).to.be(1);
+ expect(await menuEntries[0].getVisibleText()).to.be('error');
+ });
+ });
+ });
+ });
+ });
+}
diff --git a/x-pack/test/functional/apps/discover_log_explorer/index.ts b/x-pack/test/functional/apps/discover_log_explorer/index.ts
index 719bd8a7fcb28..dd8b99db79ad0 100644
--- a/x-pack/test/functional/apps/discover_log_explorer/index.ts
+++ b/x-pack/test/functional/apps/discover_log_explorer/index.ts
@@ -9,7 +9,9 @@ import { FtrProviderContext } from '../../ftr_provider_context';
export default function ({ loadTestFile }: FtrProviderContext) {
describe('Discover Log-Explorer profile', function () {
+ loadTestFile(require.resolve('./columns_selection'));
loadTestFile(require.resolve('./customization'));
loadTestFile(require.resolve('./dataset_selection_state'));
+ loadTestFile(require.resolve('./dataset_selector'));
});
}
diff --git a/x-pack/test/functional/es_archives/discover_log_explorer/data_streams/data.json.gz b/x-pack/test/functional/es_archives/discover_log_explorer/data_streams/data.json.gz
new file mode 100644
index 0000000000000000000000000000000000000000..4e72a78a4f8b9b5eb2f44aabfada690d091e5826
GIT binary patch
literal 29526
zcma*Qd0f=x+CQ#Yq8U+9S&^X92|bi(rYJa!J1Ppt<%qZdDu(5PhR7xiieYL3h6;r+
zD&Ud`C@Lz;sJJg6D67i2At1}30s}M5%p6~1T{4uYK_kG>hecji7f9mv@
zZSB#8|M!-0UABwY_!^%jZ4GYyT9aJ={O;=Y0;iiJN921%TD@J>_Vc^pVYo@PyzVRpik@D7=kYh>XtG1nJX=~_xE?rkI4OV7K8iMTNbuVSw25G*jqpnTY)+}jU
zyH2U9)jg31w@KPx=tkK#^fAkBiqDTwNHh`mMe}psn{O(2%ZToF`9OAUMr}ovq+J=@
z7U3$@sH7vjVk>HM>znebpFf(Be&%G$kk-}%y77T)wa;rM)k;sRZjuJGVS`7FxYr)M
z>X9<^=Gh0SI?rmc?y!|nYW@LTv(8P{?xdAhG;7)%6s_9lC6Y&}x{K@2ZC-!w2hXLA
zZkz12K1-iOOY)vPG}EbrbYJV*BHAh?1*WrY5U!d5V)+xm@=`qIp_o
zz4+$%s|m8|E22x93C;}z8*Tki$~|
zxRIl`00?|4x*U|Bb@`OFVhrxLMeY1D{;{@509X^aDFA#4+!p{w1abv{6M@?Tz>2_i
z0WbzY@GSw*kH8fHu#iBh0H8^|ZUp`o_|o)AMb?2+WfjQd6{t>IaDnjqYDnC{lAiy>21;8c(dj-H{
z0!Iaa1%b^1-~fR`0>G2N9|E9?z-a-{o4_vuAeumu0B|O-Qvj3@I3WP632YMp83c|9
z0AB)e0zgS1TL2vK&tEMUgqV&2Bo+jaZYcpFhX(;c5bBl_5Coxa5dfJ$hMb8ebc>9R
zOBJ|9M#p&x0Xj}003>w2nGm21sSuzHHvwQoj!+>$j&VYOr{oF%nlxx}#bSg;U)buR
z=2zH9yhs2XB=C~}h#~NU060Zpr2yDSV4(m=B=DmE2qEAu0JZ~=cnE-5ZWT^ff<95s
zypQg5`;=E@{NtSMfxoJMWEm_Ml)=vlToM2-1d0W~NCJ5Rz@I>c0Cft5ipdMaA4(g#0
za!?P2fCJp&YGH^OAb_;O0J0}gAc!an0#^lqCxJ2n(3`+T0T9n16u1RbNYyEcz;T#D
z00=o4KoWuDFojf|(g^|xQwRV-0AUINAPk^e0L;Eu$fW9*881&NU+5%_<7Cs+N7{ao
zwLZ`_8mUagEm!x-R7Z8s-3IJ#6)Q_)^YZ=brYBn;b4;@<+}ZqdvAylF_tWgkuLO*&
zUHsJMoa)qR*L;2_s1eL|YMdS}Nso9EZQU27j-QtKjp)+^>8E;{XH
zyZddQM~JpG*Gw$#TI@O3#mY0Nc)rCP=}qJH
zdBO}!oN#>scO>yJ%WXI;=cg3o>)Dg0bhJ%dVKVmU?rkD~OPD&NU(*9OKfeC8sL_Sw)JI8=EQ!KELCS?xr)obR5b?_TZvMQlijXC31^rq
zxRRSo;urQP_PT*pubVhz9t~sb9p|p8n2+Oz;mUf*fKUM-%~jY#@*V6U8IDCa?hM2U
z0r^}klIMPqENcsl2`HA|GasF%ZTNhDe6vyh;J0hdcoALG{T=R_>twx7)9sNQo}RCY
zRP2Adb{yBuTHYI%R^ewfGe6)lZW?r9DDIL_0ih98dvQFDye!JSlWy0*|2}R7eLk
znc|$T3fv{4ebAx!=0iE5kN-^WJ*uTaA0AHEVS_d1wUx>F#~B`Xw^`-))#4GoB>ewJ6yI5aiN)5Jk+LqNuTPa(al@J*D6ZZ
z;|Int%W}iw^y2LmKe-qL9M1M0j~_Ru>La_Fx4gTAP>}Tm{v7etEGXVS$SuEibabj>
z|D@+?
z+T|PmcI{oRrkoC6bLEQ7t$vGB$d+1?UeTQS)rRJ74CZl++)_r|_~M?$PB#&+`8d32
zaLIaC!~EJwsbR_8vcCxS+S2q>YxclfhaYNS`)y1YFA?HS?vFgzRQS%^&|J)5G-AG(
z!P1dKN`~5acxcpSXOfMR#eqm(%|%=L4bAbMpY5@_I^SOPJ99&x<^9zhNi-<&D2S7&
zR?f{=MPrB2H7IOeJ89Ez$rjYU5PyuuAI^9F@Z=Y*ZjD%WkZi#OvE2(@YQX+4WGY>v6+sZPSf3VP&W
z=D@F!Lb!Q!YM5sXFF;>N
zjG_vF$>kkka~jTWjdk77e9885K(YNg>wnBK+X-ox^%Nu6f)U`PkKhm%I(uq9OFmAF
zm`qvEm^{-RG5G~tzHBs-O>Jq4{OD!+g-b;B7m>{h#TQGL#8u-bJ7?LRH~n$~Se=nk
zG!7MllF1A{ttR`6_=S<3p(IK`7$IdDL692wAHl__Wb={wxgzjx_#`^#GUsnFQoR{8
znz1;>ioGMa(jO&ZF6-xZtj=TfI$}|=1U{S%!i-Jc9yXW!PHVCRPXM>#D)R8K5~h}s
z%G4Xoq$^Ltk?j>9*A%@8b|9lr0^vX8Tx&#kIn#S^m@1L$sF(w8g;1;9XOXK8O5ZNh`ldX#RVJV3sy1p;tHUf*I&9
zocD^9r3w$t-RKHkjo!oHKweoqjt8wwyr=RcuF(kDFM0-9_Ha)}60!-Ai7F_;wgnaLLid
ze*@fgXPDp46(ft&gE`^JIabK^tu#&^3rlJjd<5Hn-u;z>jNcfnLzYgP(iItB5^@^O
z@RPx+Ydo@dH~X@u<+2?~IT6W5<#s_t!6HxS+J$uOHjW;@vYcOmYZr5I5Keb$y=%3h
zd9p+DnW5nd`*?1{HZ;1Q+zR^v^hE7$0M$~h$igq5$B$Ln{A*s
zJu{i5a2K}^Wo2W@V%|=)tR2rE`8Cz`n%tLdUeOiGcW#us1y@U24Kzp0R1e%Vw{)#m
zALps0fpzygMt7y6W@qz;%fY4BFtT5UqQU)fv@`(KOuUS@-5Q?UE!j=qc%~pbQ<;&p6ewqA`ZS1;Q-qO(18R*DF(7F(
z>AInL3>%6*6k9Ufnme8pR3(C{nCa)lQz+|BG-wnJ%BpLI@Cne_UH;ZZ*RaV>GtM;N
zv)c4NdI4He2Dd8RG#Dx
zb1Y``W{z^0fZ2U*b^hz9t7k2i>pd-Dy}&Iok1UpwQvOv@)q0jr3s#&c}NqIyQ#mt>C;JIR;A$5
zs--C)=D8S^;)p9a!T?7ET(q;#AB+R@2fu=Bj^!6Hg{<{2AQQMuld|1sku*WJscXwf
zeU>J00+Eiw$SLL>t!RKKKyE>3j*^$A-AgBbTYJS3vo+0pEUJ9y)bsc&mGD`|pI}xH
zJ#7!+x*doM{h?AS5?kI2txMeH<8E={ba)5hJ^7Ccpp&yE(()AmfTb_ZZ^sSc@=sOi8oD
zsQ0G$=cD-dUN0#Ame}sigLVB^xmfwt^*Z)`ott&Zc1`VTLjQK_55B`Z=1;!+keSHQ
z0@nIzECCM1Lt9emB{we*(IVX$L>an48T*n)BJwj#HSx&&qgn@w5=!~>M~KQ5Cs
zh~5)G(LNqR0qA;&_`mP^f3fr|7Pr?sqs(htwz_K^P<72X1?xxOIWVq??+(0SH2qkqkm1R@AUe5T0xU`c^5g6WG*jL@U-o|N@aKb^52O8If%7c#L#JCo@InB-*2
z&=&+v#mA+S>y?<$^{QRRW3d06J1zH?)bhMPTuFz&|P!P_wI&JotB%wwi(VV0(uJT9EyQq;U6*U
zlNH`C4!`?^`0y!bmA$DezfIJ1A6l}00KS0jSw+}dc6SBSgEWAJ8N&l_p^2(HM$+5LP^q&Tu
zILbtwem`wxia9_$>G;(!|EbN{GpEA=qO>l;{2+_Lv-GLW`7^KvKD+4?;5DE+%t!Q3
z0;yh<8Y_@0qf~`Z>Ox4B2&AeGP{@x0A#M~BEf8YFuVbMCA$ELN8~yP{HB}npV!1%b
zHUJgEV}2#aA^}GNk2xqfCgKkqvsie{N*ogrD>z2~p=6;zNEC%63WONNKnR{Kug$3c
z2!NXS#%i>_M}TU+jI|WbZwGH^47&MF|CKiVPZ{Y(hHreZGcK$u6-!p
zGSwo?r~k#x`wKSruu%1~UGvt@`(&k~Ek3ZgWMlK;qYE+K{c|_3t{T6^*f?+Vdlp~E
z84q-vYGd);?$1^^CXQJBWcQU-`y}i0es>(~*ktvEOJUFRo3+2ZXVZ0Lfo@Z+&H52T
zYIjdsy{LHP_JF8(m$Xr=GkfsV^ZLZ8y&%^zEw)R@}lZtf$y
z?6`VSN&3t%6>SaQC`aJLqvhLGrYGV4~SPoby>zAKa~9
zzT=R%=kamh?OuA%f7hc6zj_{s%=1&kEwXtmvi)VvrNFgQRxi58s~hJmzTC7paP7M_
zmuZ^rG{Wj9Wdrw{WhxTp-0qoZmZ^Sh_iJfzUAUu1)8Y(z8!k%hRXXy++wauTff2rAkVHQaT}Q5dqK1^2L5|C7
z-hMn@BFfw4_<`e%H9q|>Y}N*R88>=&%xxU-)FiG)y+=XMzoI5sjJ0uD(|^BYUxM+6
z4E8O?mU>$<2ZzP=sF5!9>3>o()*?pR6W5d8!i`UItxp{MQKGO|w62TD=%`;*6M>hfwd`wH`Ztevucsxf$MqQMzeX{mg_1n0D
zV$ot7m-YqAagkR#LFPcmdultV@(4l6EhnJMK}u&RT-hA2H-TvF>+@lZeW)+%0+7Ow
zt}E(LW1A{q>3&t?C+RkN_s@W7$HKI4{k#Zus$9GmiD=9cTf-82mN{>a*c3n9J*i$g
z;!e*?oBzm*P!ISnE~dVE{IAB|ba$5Hg(j!(VJUIJv++}O;}08ut}$K^H>pNi4U_6N
zav5%ckC6@db7PZJHA2ONd-p3!QES`6<9PI}j>Qplc6)ID6VR=%#TgsDT9L+^;^Sth
zsp+E&Z#0F}y~dHo(b|*dxtlF%oWR@cQ
zvbNqt;gqjM4SnRhwqIt8PyZiEavV3-m6vS3w?GXWJl_j*ucHt*`f(4__(?W$AeYJO
z)T()Pn-PpjREUQcPNDJ)*=yWSqc402l99i9G^JiXm#1Z+|B>U#|89#%aUgYIJ2(d3Kup{s~UgBb+z1LQOg!I
z4ds^Fw@)}{6>a`4`w>iDW|?B#FYqF+l6neZm;DI0cb<>ik0^o`dCVYh8fh$zqz?p3
zTBMx)W1G_PbH{r&tcl)C{Qt<@e5{W0XBfF)v)^jgST+||+SQs;7GP^@BO8hn&u{?S
zXLoRH7>`{DXy5ASX<^3Z6&Lr981hWM*mJ~?{jl(FfeKh|BQ19bq59q_IpWit$2D2`
z$qEs2HB#kt51S#kpCRJXk2sDWG2{UDHKqEM^n}Zh=DhorQp<+jztRAQU;xB(5zBt@
zn*a3b(IjISKHK-*vJ>*6%{vyTa~5x^D_1a@)$ws-*VfmLZ$KqT~He7?NP{t?gr!kx3)?BIY*
zI$#}BL(0^M*5^%l+`|izv<;i*z5m&v1>))M_)dTFp!DX4kAD^b4Vy1dJkY
zz(amI-Z*LVA;wLbSfL+d*dNx=0Tc9N45z0#Yq5Nk^%fJ%jNNneB>~gr#m$EB{GxQo
z(HO&6osErRE;IAO*;6iJLPA*wCMTBj8Y|=+`#!tpIP~&?g_~pI`!kT{;D`|gn~bWox-wDjArg3O?~druj_U
zn6EaG^tf5=rs>!ITwbfl4HGN-wYOM5(mgO6yU$=#z}di6$p*&_E^jk^VA|edaV6ki
z4d*tSHk$5!*0uiJArdtp{vc5c;xvf))gXQ$L7pTMKy(M?!D09y-y;
z&uC&(NQ?V;63rlHfw)9uDhVR-&lFqV8nv{kON;wW|FeN<
z4Wssm=9J)IL(v{lX`^yNmO-pGFTBNlCe%L3i(L2qP;u^LRsZtP6`}{CQktfZVp_LR
zjTJju+?~O-miKl7(L#1N5>X{n%(T7xP@aVu*hp^Qd%C0&B!kPqy`I4woO!GHts2A@MEzP#B6!|sg{Mzzh
zI?jxztzAI4(j*7Kp9=oQ{U8)1_JWX-NCFWGVsM?@tkLv)Ew6Dw5#`_E;~Ox_;0DD%
zm(s6F_d+GE+f|O$@KL=BOs6($F4Rsp`b!kkpgm~RuOPH$qR}d&ALfceL@`CU=1AN(
zMmhgNVA>w|tPkup=T2yr>1xqI#fM7K=L)BW>M`z;W2Uo|m!6Fo?Unqpi{g6Sv##>!
z8gaKKxF$nQ35JPdy
zh!POJK%BY*!jeQW2on-T-LiC}jowljHFZ&lZ-s_vyNS-Kjhg!I0osT^^kV*hu#|`P
zgSgKq_jPW(PKkT6>rX^6tK8nHKbNSkLk_gt29<}JS0R39$v54)9r{QcDsBF7V~bgJ
z*9yrVgRUBbfDolw^_WGv^)LsB(Yp08hq$`Bt6Xxcpj&BZmpr>AG)&HsVNB@)M
z1#bJlFSw^P)LZ8CRCKD*ckOY5Xr`6EYP~L2uWMAc0+F&J!641Rh}GpFJnBS(Wzq`7
zt=q7KGfd(~!dJ1?&&V#zYM-d}4kE#-3K5+q!@m;0wEh0D`g6Y`S$|^*j3L21-UwnU
zkr0XGY~ZRyNSzsEx~_W634`0>+HsSb+-c<>m|Tt^o{|^?!UnP1ndu>lAg1moh`Kop
zzhQLj7orFJ*#o;EfDaeJlJ&C@rE8g;%-7dxdIpkK?ZG8Ck*Ev&PJxPlixppiLjNF8
zo*D4LDdhsAzmz$(W6oA6Q%r9K%A5PTD>At#AXfhu^4~l}WtUtG%hHKVn&PAHu2^g$Nx7#3#?vxq&v(eKpn2cUcU6ioa
zQdsMQG-dW-gC?r~b_32|WHfuX!Di^+MXpXU=n4WMF)e=rs37s#j;s2LuH409bD&(*
z`yufjrTDY8!dLW)(DT0$0a*>F2ha|lw9D81LlnOv;@?pie&x%4HiCo3C=2sXaOBo|d
z_ngBB)LsijXGO@M`g8kCziN11*lk@zwCNoMi1N^XL-)r?h_YJ5ZrWZ0|G=!KzV29m
z@QRqFc>b)qtL(CaQKQK92&~m9;O)BSg`v+xt^tv!u(m}s;-v=F`yNYUFF68g&^(y@
zRAFccSfJ+Li5!dDrpGIKKWAgFM`LefKd(QRUe&)Mw6|i~k46D(d(Kr|b0GVz7C$a-
z0@pgGMl^``NJNrA){J4VGiUXFnmtf)?v!%>aRXy*5F&Tu%Qrsgj81hT1JcAY^ZO1sCxvojoUGLQZ9B{(@t4Bw4&V~?OWFK>tw!a
zcC@7(YqJN|pNnTFsiS(#ulL!B{sjU}t_4lb&&aX)Rpn(H9Hi00eAn0pQ`iRS!j&Yb
zTSIf-qk_5p2s}({#zEae=#|C#Y>y}9)WV~AgDME&$>38
zo8oNbZZw+)od)eyvlX>tvJFi7ARtOv2EPSkX@joEY$jQpw7K6`0cq^zfh=OFAl^&}
z;2cqm?i4!PsG2{muk=g9k$;I!Rr9zdJT7IO7|GNk`lAK5^P}xr9^@(6*yL{-T6w5F
z+qQlzI9<@~UTAL|Q0+hHkqD2G9W4)Ta;(Wjxm(9!>i`MPnR`IIMD?PdSl1l0}z
z69jsdV{4|u@WbKjS}Q;vz;TU9SbdMHsm*1L2MsHSPt6e5&Fpbv;Y4hVsb4y7
z1OBzl6%SU#aO0=k7>+~J4&u;ne#D{Ij|^`dp8S1zq=Qkfj@mmnKM
z;@+TL1@Z?e*&DUpS6r#~TID%$tRz%!J-&4C{pcy86$3IBK0Ofh?%v@yeu9eLRB_#5
z7^c^P6_e8TCeUstX{{L`O=?90CzPg9wdCOh|HNg|QgFZJdjIaHtC#->Id>^1oU66-
z)@(Ek3|4>Yo|}Vv-712X?;r1XyhFLyTD~FHr#(FHC4X!AsV3(@7|!R!`izHjalcc~
z9S5Ebo2S?T^8X4%#%q~LaTgQUbz8&J_EyEs2r*2hDzUUzg=pZCChOMvc`$%P4Xf-i
z?5Q!-erKK_JC{*?1@;-OGFj&ZdzMDc*l4(odnVGx(`n
zwafv(M(4o)M>sMDr-H62*Bhz7)H)JN=)CL|UaB)76B$qmIgB|L
zo8Nqo_d5qG!l*M~)R^VR`yIuuPLUo6=JKgw$NTL87CAgBW%%32|5$UP-#+~L(W?_W
ziA1Kb0|lqm&08}zb~3BUoD~R}g*TZdXBdGG1IJCwh_Fc7xYA4(v^8y^11d#nG4py9
z^SXBOz=XS(6(%2@34-=_?M?b;1|9EO)ABrV$F2Iu%db?otY*qSBZUy$d-t-Jd@NY@
zR)jgQPB?3SvO0!skt@yQ6tZq>UUdunywVI|0^&+1(S6U|%NfJk2;P$ug?rw
zX+~LI`aH>$Pp~g-e7GEjzFihsu%;3*ADeQ#>yKxC9{$z$3q~>!e}+zj>rgTGK39ir
ztgx1xh%Qh+jho@2h#lTH+bb{ZN`>``zOMpSZt`7#JZt8Z>Y$g2I||hM4SQyL1xe2z
z9R5MJSDabPNRO5rpX2@ZDW{oy6d-3zpGG+)m7u&?7I_OB_GWvP|H~`)7(xp9za4*#
zE={8|lb4N~czfsYubOg(m48sMCdshpH0Qjq-}YOs_;vZ2!tRMRQ%pYkGiA5o=hK|a
zKPbccM#D`kaz`1QkOVm7`voV;BTKPHCYX9
zrF(yTxG;Ak+rnfPoX=J<1fH-19LmW@)LvT=qy14j_MqWV3Qr#H(PX_8W$z_x%?9w^
z`jH`iaiWQz$u8P+34{G2tIFX8=uUHPBm9bkye3t9v5O9mgCUzTmM-nKFn6sz_N-+d
zK@$`UrzxMW_&Ud0Ul3lU{J8%lkRIp4hI-BEwtNKs;l=r|US4yI%cr)-%>W|;f4DIM
zpd(@RY1ZEIt-fAtG(4if$)nI!7v?6g=!`&Y`LU6>!egE1j^JJd&(fg?f2OxS`B>CC
zv#^8c`s2{&&VfBwe2v0FuKssBtHHAspZN~=U_tXhNg~nh7U~nk%QRow?LV&f`X=t;?uso!+
z5m^T!63y6Z=tpXkyL)p|hX>{mQsMALha^bTs+y
z&y?f+jv+I9m^|eG_YNvmP%ZoaHrVtQir1&(VUjU-!me}@-S@mxphTqZBKs#RdepyN
z)P0ZfELdR<8+tJ=->)R2`fU^T-GvJYR^$~ue-(JxIld*SipFrLG
zmfFpGU4}WO^s0hcj5E2n`Bg9$m4E#IJ83&HI)iFVw4;x2M{EHAHHk^Ygnrzxb
z#NP4|RLhajP(p0pBT4|}5$Z)~ETB_&01YB!NoWco%1R-mcl3TvYAbEgtygjEL#qri
z^ktT3vm&GdI!?v7Hi{L%h-(R0!*B|S?3n2mVx|L>3@D3SR)EGi;cC?^P^k>v!|*gh
z1e0?|&1$?qe3Vofo~r2X=;jt+q^!!flC^aSHa}lp+)PHTZMF_>i3*i8r|VKB
zM`rcXo`2~TT=>!{L6=~z`ATE9pvIuaTJ55`862r~N;gZ=-LA8E4OkJlE>=klfM(
z(^Z>n3iAuZcXkHv2zIjTtH~{lC=}nDBDR;9YX)e{U1;wb0rg}9onAqfH5kI?C0Za%m!oCV3abU$;`jOpho&EP~}kQHc7WeX(7^muky4h
zbSf0zo+P%{C6__IXG>^Pek|m_JksRdWVI$qnkc)yJvdzJ$lGlFK|D$KJNRTz=2=bB
z9rMZ_ps~zp-q4h)D&ATs`w5#<|G?&2@`aIaAt0|m0nHHgrko)v8&
zO;WD*E;K5X)c68(rcqLZYA4jlo*(I*sJj$pG(~sBI=-*Q_Xix3T?R(4mV~AZ$_s@&
z9gh%GKPN)zgcbpk#Q+j1U^+KVQnx9(!xm6!3@(L6;uNsgixIS<>W`A+D)0SbM@ZNtz(pzdiVOtqTH6T02QRS+|?Y
z`BQ4IAH-!vD{(>J8wj@v>C*b2tkqXj){;=r$6I{umOBSpYTTVO>7A#i5is|?#dnJu
zPD|^+J6&bXK>e0sc()E(XBI}_CRN?wt2o#)-WP$W#+@Z4QATA&4fCw96;9OMqNR`e
z+D%_jU+7leAx?S8I7xTU8+QGrDWS=23W%KyfRaL|lm8B^GA^F|t>%{%MLEsKRus{h
z83=G)U(NKOY=|ha)Ofh1Hl^baqeA)1OHnJn*%^H7=$$%G6Ne;e-SQ?1zpjR|V`TMX
zYs`KRK6WCn&U0RE`!7Sw=2~bL9`Px3E1g?))gVbSUv;%&kk_c(fXqZ$T84wFtYQ$2
zhg6uyRA`C_(5}8Yq0p>&{#P0g@9j;_g5l{+$}n%z25@x|Q35Pi9U~jZsB2-`rY`
zMAxl+e#AN%ST8WZR@r1XqzmT7BWN-hf)H^m`+S|JQt2Q*EtA(7-IZHueo?Do(gsB|
z6kl9pUn740q#L3dTIz1p8PtfQ;qzWdW8DnZbX961h;pXKHoABot3@8TWOUR#NoDs!
z-2;Yw1WcrR;x%fzN-Am_U$2PP7HTv<@KA4YCQi0cDg&!R3w2N3GD4bUfiK3?=o+7l
zJL%k7eEp>JBypK*Kh5&MUo6a^Zj{ko*M%)n^`HD8?j#EHPddkFrq_Q0r*teKLR;RI
zJe+#cxk;oE)ub*@t!_`OGAq%GnSkI5oM5h5${+W@Uz*af(}~C2#d=@ObvRk}h;esf
zC!%;5OV)i`vmIJPxJ2IcB=@AV--~{CEpG&$%-(0I`BIaqKhDX{1F|-qaGoUTquJD_
z#-1FJTH_keyOxR4<*AK%n^vSo!r)_JH<)>7=cUT@N23TZ^{eJtp$M=X98n^_jkJYb
z6LkfQ+^DMHpCz&~vy(D6RWCXWX7iTZ(FWI~ChDMGq}Hegjtp#oDUr1FANZTn)#{+y
ze*nr@uu!c|lC6Ra6w#+Fj;C0pj0>F_6xQl8jV6BGz80l}4L33U!&`Q-tR^)P^a#gI?KvHH+EX^y=jEK2CPisqgPv
zbA6s(*AA_*N|dPV^&N}(HXF%UMIy&i^8j9gZ>-TQWp`K^E5p&cQYS(7UrlI8lj+PT
zqti0k_TV*eS`?kO1kQXsnSNXg$R0VPC$N?z>txD)xsXgf3nkSoeJE~Ew881p`*N=q
zvVpMD08y+v562?e+*A(WuNv3saDD#ivtJ)a(6ECEu>f-j>Or>RRb{xTP3v5gw{2t^
zpU0p1oxx@yeYHrT>J`0tB82fAH&rf!>!CIn=F?(Yn66f%c-)sG-h9+*lNx*4$EfqV
zWo9Qjl+`zrqipOBeQK(z-FCr!pTOd7^;5)WI&7vtf
z_L7vswH72G3Na2(MdQdE={;=0Jr(K%UK@)w5#@lA=oYGjyv%;Nxf8niDpmD_Qo~Gr
zC85TOq6Q!-<;@k7CHJ-3rxqg3S&e2}lSOA8J@T6Bur&P#d%TI4SAjsi-?;d1EaK%*
zy*D@Q&<06rM(ekCWVvl&1ato9&a{1%(eQ#S65I~FzZ%1pxDSftNmoJB*}#+qe;4h@K(fRb`kaKxYYL(ugoj30V=~+h<|O4?I!!0)O&Kd7Cj)N
zBPKEQ(iWY)2Yp=-I?5-nGNhw6GIC#M59@0zT&raYdvTP!OZCDztSoD>XZin!CJ<8&
zIuWLvo7#6(sdxF`dTDHLi*1OMd+462?_YCUr;?~VHQS`YLtC818l9@--2*zAzxKd=
zX;b^{YH{rpOieE4Xf9PWC|cH+nrKox*=Co)P_iND;$HL6?PZ*sBzIX?iqU!{gVB1;
zlF*m0vUsJlcv-PHM!~YqG%*QZdBAj)IO}EC8r=>!#R`TsBhin<3(i2f+G~c1C`dcB
z9};_saaa5`Jp7nyY=noMR1O9^v|aTH^p!qB%XDlT`R!~Qy5-c_djS-bD)1!GZGf|U
zF)m1^qyI&d(Cdc@y|2cSA%Y3LS0P5pSHn3SJ`G39zr%$xL>Rwt(J8tV^hue1XmUe|
z#i+vO(O0vH#5W);I1Y4-3JLIb#~h~i3_9cd|k4Uf{Hj)
zc)5wwT8YG7bxxzfh@ey|MY{N==mNPs{#KNBtm=SCjnhx5k=nwRcWW#-H@q4dFweXK
zmU6&8&Cx_(3E9zx!Ax#U-EAq1%C&eCNgQCEj3fxa;KAv`A{mp%Rfy@FMO=jXIVn&BI1FTVrYex5Bg#8XoA9VUz5O1O+og>66lFX81JF#ZKu-XB_
zLh^WXp{|b8#a2!iZ+b4@hYG$S#GH!s?@VfFa8n<25x6wQslO|z2YTJLY`;6Gb17Y5
zk1aX28Adf$36e9K$xh-3?dPz86m0>o4FqSt1KhI#1VSzeA&1GBFHEZp_F$I#!*G8`
zu#sSh#Omi_8ow6!XC>ZsPN=jt`6Rh-W9}+f)$wNgVa=
zAq4&880=bC^uFu*&^Mc-A;!##w#fQV;@6eFai)IC^?R`pz83$5`#W?Di~ol);67iQ
zwE9niOH7I|t0p08jS9uArQ2}T2tPQ|tQq4J5_N#)G1qvpC=z`^;6I4kYm#o3{I=Qe
zj5Wy}d<2k8RF$=CnW#F)pUJ8!KCa%u7%wx2_qQ^a_}bMs-kl7tRDEzwgF#E+eMv4K
zPy3mw-!fI%pAj(~rIq=qoQwF8dm&_Hme62Rp}wjvNfYo
z|1w>VoxT#~GzYJ*-otz2{mdVS;l2GEjFt_;+wSzzSt`ret!KnFZI_4j_F)Qk%z)zL
z)00%S)l#oSKzsQN3vb#qtoLL*6C6-tWGq^iB>o9v8Hquf>3Hn9P1fzl{W^LKTnLX0
z&}0@m4evc!e0Tm61eN!8dGo#|Gq%>fxVo8xxa=-#+yQV)zSb=FiuTI(;14KB!uu8t
zgang=5rctwiY^X>QaN!l%Hs;wY$Mja0no*Xgg(SCqLWDS>nvio;?aZKTz%TVrt{X5
zR1UFQ+i9mgP{C-jxa@v^+OR3={&|LCcoOH3q_p$4o$z7z5AS^7f@n?HN>%4>Y-4+E?S#l*$XtwO5T)m57kuUVaU%
zB&ci|+B;@kNNvQ+UHRj@
zebd~BbF6sIF}|VqZPy-z7w{~8U1z*T!7mE6pg&YgREP0>!u5GVykx%cyWMi16b5X)P6Q%X_ziSWTlT7NX
zoR+RQ5~V#@Y(vBqJiS@w6l)UA>Xz>aKAFyb)0+;MtV;O8AxX9auO5%ZhdRF%q5mx8
z7o<{rLF#Noc#lufo$<<^zM=>pG4R!?uf_yskqy*zey-xkF^>qB?vh}Awk2T+B9jE4
z!GR>KK&U~;*_%@s>5Qq@A>UamI%A(po0$a6hC?JKgU~;O96+1~;zpj=U&xY(kY^_e
z@|*x6C(ks#)G`*}rG~L!ht?J?K^6rfkOb!wRz!R?sF5&`Ur!D8L^xwukk|#nlLRxj
zHwXm|lQ^LcxUmEL8-yI$t(!(7Nwz_IxoVSoQ$_PQ^$T(DmXx5ZS<+JDBdiijR+R-Pv<#oN+wW>?)*<;=zYu(F6
zcCmf%<=H-~-cNf!d4$1IgW0>grM+hPi!4P#mXTm77P6cn%Y6aMa!MI4WZ6%a+d>vf
zIVog0NtU|;mO4sVD`ZI_ONo$$Qd)#8Ib@LwSk}aKJKk+URhPOD?=HS)N1nA=_2A1r
zeMYQ$|LprC3|1NJ?v~tbQ(o8d_2Yyrb!1s9V6h;Jv5@5%S$qU6o@5y+WN9FauYjdD
zS$YXsYQS=8jey0OES5r+da?+0u_lX&kfoL^LS1~xVk=}(kVUA=5g2NZaE}r97zp+>
zR%4H!P&p^ESO{5YC_kZcR%GcdV7cY}{;l_$gf2RalOG5pDvMsM5VB;FMHo@*7z=hn
zmIGuFM$|e=$q};b0gL-BK`gvSmM|ep8d*vOEZw=OFjo5wcM1B_Ycx
zvfLA}Or?~sg)E6=DHO20N0#nFmhE79a7Dl}wfW|H-#!O@-2YPJ-=7_2Ft^X1K1spF5ZwT=Y@o_IEORa$ADOtRQEEQx?2v|NP
zOD_S-p2zTa^#}uZM!+)o30OW8vgDFwp@8KU6aEVUF!&MotQLq(;GXG1mZxO#7O*@f
z%W5IZL$JgM`&$%QCJR~E0zVV7*ptOv$Wml&(A{TG@%lpz`Klf-zFg{qc2Usv&iWr|
zwc`TA#xR3!2s6lqEXhI^+Wv;n_Woqa60po+Hh&|O5{~MJdh;eQK4k`N6?onKDgqzJQT1DCrhl5p=aQ0oTT0
zO+uk&T(clFnGl6a3H2s40gz&{|By=2K&u1o|Aqv~&KEyllegDCU4&l~E$F1Im>0fW
z9*1RJB$ma5oCrA(`W=t~p)r8gO#);_XcM7@fU>sZOx)qXy764wjx~F(O(!&!P!yoc
zgjN$83rNayEC@{|G@4w5A`$_a6WXuv`lTVUJy7bWHjelEv@(5$>(sX79nmxGN_M`O
zd#&n=fvNk~xl&X#_Vwnzcd#$Zyz=4>-$WQ-0t~QjIt<|UJM@btw1kigA*$?5sA%@J
zWdq%6C;1PnT=oNge()bzS<9o&;HaE_5a!ityX)s`)|wNuhg8PSaCL0kwWIgUoXX8f
zyI-tu`UdL`*kW7p)u%IaYNst4S((Y*@!V~J-3qR%0r@-A7gOL10}5FWA;G0PU;K0}
zBHId{D)sv1+CVYYa>}xTv?oE1jr8IyBJshXzVs)0xpQ4H`(4zR+3HYA6|5DJ5StO*#O4Mw6jwE;TiW
z;D|{OoDgg|%dzcL>_7i9xt6{7kk8vx(ldjbU
z{&M5RvrC^S=DhU<+;K)T?wTz7^D(%)eESR4x0)H@UNzA#yyR{TcRic6Kg;cEt!*7f
z=9IZylLh6c?Qm9PF`S*K46^S)`+V$_F^;SVA=M7F&n3i|^de*{iJIfsmMzQrc0abN
zZsyH!&4x6J^>6;cb6~2x?%ovt=N;7YUCv%>ajE~s^-X0_Y+O=SaC-WV*G%E$Rs=s?
zOuL?l}SdJ{qva(70GZb_iR9U3Hp45I<84aDaFHks?(bh9uvt%qs@*&q@yyhJE
zT%;h$?9hkgdJBZHktiCG^9>v<<-rGd@E;7OhSS*5OEG85K-u@#QFgw=UQ{TUjhQu%
zmUN^gmGfO4{cD4;*NA%)uvh!U>mvkKOL$Vui{9xF6YqliA7=c0O)H6x-tk)7a$!cN
zq48fwL$C$7VRxjG>-T3(mz9-$lUh;tO=UBU8UUk~(3a0=dB?WIDm`VIR@R32@J;tt
zT8w(0b~6uI;I(#TV%9pL6aLGe0#6}t8~QkmtTgE}Fg0miIp*hD*wNo
zECY0yk)dHc{I`0j=J*dwzpY%5k2{&Q-uE0*xrz5Y>H=qg3FedAp_~mxV2Q1-!=&oi3&<*zgHG#u
zeFQ3S5VB8yv}X3f-7kv08Du#@yJl*u`#21#bYf}Fr-8S^z!g!*47a3F?o~%R%7B;T
zX~ofxXKH`kRiemhp11c|Tn0CU{s1ZCNad2+CT~OvvMfdfEb3W`L?T
z!#7bjIT>ZgSK5lC)3s*d
z%pZ_JT_>ciCs)jiVf4)cxJ%9oWliW?Lh}f*LirLBA;k;jll-6W3MS=+8iW$aS_rK+
zGqj#r0#rC}?=E$nJE3AVPUva{sI(j6}p
z75njTmHK~FIh4vJBlPVoa9X|tPU{5-b#5!`+|O*$F)u1pb~w+>DP)UxHeriDvK?dz
zk2YlYp2-@=hMu7>zFty9Dq2%#;QU8HX85UDzmM!FnGsw(1^vB>K@!{#8o03+J6C+Q
zYi2O@hRH`(X2i4Xy=2?XhNcxP-KcX@QRh(2z5<(={oD!=ig+yo+4*BAplL||TO;^e
z4U&EGm%Ogdmx^|%2Mc_S^PO7NxQ2zsatp?*S7T3>SAOH=<2y=Ley-iLj_u(%%hPhp
z%Ay_l^v_EgaV#eS-!BGU_N|!G<||%}I6;Levh@m5eFLhSSaRP8z@25+11e=oYUdwlG)b|50oGrS>jPjGV(i%{T^mtq#S8)_f2IJ
z3a?IkGq2+4EPV^>gA
L9tOW<-sS%T0U|_7
literal 0
HcmV?d00001
diff --git a/x-pack/test/functional/es_archives/discover_log_explorer/data_streams/mappings.json b/x-pack/test/functional/es_archives/discover_log_explorer/data_streams/mappings.json
new file mode 100644
index 0000000000000..ed9e5982f576f
--- /dev/null
+++ b/x-pack/test/functional/es_archives/discover_log_explorer/data_streams/mappings.json
@@ -0,0 +1,419 @@
+{
+ "type": "data_stream",
+ "value": {
+ "data_stream": "logs-gaming-activity",
+ "template": {
+ "_meta": {
+ "description": "Template for my time series data",
+ "my-custom-meta-field": "More arbitrary metadata"
+ },
+ "data_stream": {
+ "allow_custom_routing": false,
+ "hidden": false
+ },
+ "index_patterns": [
+ "logs-gaming-activity"
+ ],
+ "name": "logs-gaming-activity",
+ "priority": 500,
+ "template": {
+ "mappings": {
+ "properties": {
+ "@timestamp": {
+ "format": "date_optional_time||epoch_millis",
+ "type": "date"
+ },
+ "data_stream": {
+ "properties": {
+ "namespace": {
+ "type": "constant_keyword"
+ }
+ }
+ },
+ "message": {
+ "type": "wildcard"
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+{
+ "type": "data_stream",
+ "value": {
+ "data_stream": "logs-gaming-events",
+ "template": {
+ "_meta": {
+ "description": "Template for my time series data",
+ "my-custom-meta-field": "More arbitrary metadata"
+ },
+ "data_stream": {
+ "allow_custom_routing": false,
+ "hidden": false
+ },
+ "index_patterns": [
+ "logs-gaming-events"
+ ],
+ "name": "logs-gaming-events",
+ "priority": 500,
+ "template": {
+ "mappings": {
+ "properties": {
+ "@timestamp": {
+ "format": "date_optional_time||epoch_millis",
+ "type": "date"
+ },
+ "data_stream": {
+ "properties": {
+ "namespace": {
+ "type": "constant_keyword"
+ }
+ }
+ },
+ "message": {
+ "type": "wildcard"
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+{
+ "type": "data_stream",
+ "value": {
+ "data_stream": "logs-gaming-scores",
+ "template": {
+ "_meta": {
+ "description": "Template for my time series data",
+ "my-custom-meta-field": "More arbitrary metadata"
+ },
+ "data_stream": {
+ "allow_custom_routing": false,
+ "hidden": false
+ },
+ "index_patterns": [
+ "logs-gaming-scores"
+ ],
+ "name": "logs-gaming-scores",
+ "priority": 500,
+ "template": {
+ "mappings": {
+ "properties": {
+ "@timestamp": {
+ "format": "date_optional_time||epoch_millis",
+ "type": "date"
+ },
+ "data_stream": {
+ "properties": {
+ "namespace": {
+ "type": "constant_keyword"
+ }
+ }
+ },
+ "message": {
+ "type": "wildcard"
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+{
+ "type": "data_stream",
+ "value": {
+ "data_stream": "logs-manufacturing-downtime",
+ "template": {
+ "_meta": {
+ "description": "Template for my time series data",
+ "my-custom-meta-field": "More arbitrary metadata"
+ },
+ "data_stream": {
+ "allow_custom_routing": false,
+ "hidden": false
+ },
+ "index_patterns": [
+ "logs-manufacturing-downtime"
+ ],
+ "name": "logs-manufacturing-downtime",
+ "priority": 500,
+ "template": {
+ "mappings": {
+ "properties": {
+ "@timestamp": {
+ "format": "date_optional_time||epoch_millis",
+ "type": "date"
+ },
+ "data_stream": {
+ "properties": {
+ "namespace": {
+ "type": "constant_keyword"
+ }
+ }
+ },
+ "message": {
+ "type": "wildcard"
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+{
+ "type": "data_stream",
+ "value": {
+ "data_stream": "logs-manufacturing-output",
+ "template": {
+ "_meta": {
+ "description": "Template for my time series data",
+ "my-custom-meta-field": "More arbitrary metadata"
+ },
+ "data_stream": {
+ "allow_custom_routing": false,
+ "hidden": false
+ },
+ "index_patterns": [
+ "logs-manufacturing-output"
+ ],
+ "name": "logs-manufacturing-output",
+ "priority": 500,
+ "template": {
+ "mappings": {
+ "properties": {
+ "@timestamp": {
+ "format": "date_optional_time||epoch_millis",
+ "type": "date"
+ },
+ "data_stream": {
+ "properties": {
+ "namespace": {
+ "type": "constant_keyword"
+ }
+ }
+ },
+ "message": {
+ "type": "wildcard"
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+{
+ "type": "data_stream",
+ "value": {
+ "data_stream": "logs-manufacturing-quality",
+ "template": {
+ "_meta": {
+ "description": "Template for my time series data",
+ "my-custom-meta-field": "More arbitrary metadata"
+ },
+ "data_stream": {
+ "allow_custom_routing": false,
+ "hidden": false
+ },
+ "index_patterns": [
+ "logs-manufacturing-quality"
+ ],
+ "name": "logs-manufacturing-quality",
+ "priority": 500,
+ "template": {
+ "mappings": {
+ "properties": {
+ "@timestamp": {
+ "format": "date_optional_time||epoch_millis",
+ "type": "date"
+ },
+ "data_stream": {
+ "properties": {
+ "namespace": {
+ "type": "constant_keyword"
+ }
+ }
+ },
+ "message": {
+ "type": "wildcard"
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+{
+ "type": "data_stream",
+ "value": {
+ "data_stream": "logs-retail-customers",
+ "template": {
+ "_meta": {
+ "description": "Template for my time series data",
+ "my-custom-meta-field": "More arbitrary metadata"
+ },
+ "data_stream": {
+ "allow_custom_routing": false,
+ "hidden": false
+ },
+ "index_patterns": [
+ "logs-retail-customers"
+ ],
+ "name": "logs-retail-customers",
+ "priority": 500,
+ "template": {
+ "mappings": {
+ "properties": {
+ "@timestamp": {
+ "format": "date_optional_time||epoch_millis",
+ "type": "date"
+ },
+ "data_stream": {
+ "properties": {
+ "namespace": {
+ "type": "constant_keyword"
+ }
+ }
+ },
+ "message": {
+ "type": "wildcard"
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+{
+ "type": "data_stream",
+ "value": {
+ "data_stream": "logs-retail-inventory",
+ "template": {
+ "_meta": {
+ "description": "Template for my time series data",
+ "my-custom-meta-field": "More arbitrary metadata"
+ },
+ "data_stream": {
+ "allow_custom_routing": false,
+ "hidden": false
+ },
+ "index_patterns": [
+ "logs-retail-inventory"
+ ],
+ "name": "logs-retail-inventory",
+ "priority": 500,
+ "template": {
+ "mappings": {
+ "properties": {
+ "@timestamp": {
+ "format": "date_optional_time||epoch_millis",
+ "type": "date"
+ },
+ "data_stream": {
+ "properties": {
+ "namespace": {
+ "type": "constant_keyword"
+ }
+ }
+ },
+ "message": {
+ "type": "wildcard"
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+{
+ "type": "data_stream",
+ "value": {
+ "data_stream": "logs-retail-promotions",
+ "template": {
+ "_meta": {
+ "description": "Template for my time series data",
+ "my-custom-meta-field": "More arbitrary metadata"
+ },
+ "data_stream": {
+ "allow_custom_routing": false,
+ "hidden": false
+ },
+ "index_patterns": [
+ "logs-retail-promotions"
+ ],
+ "name": "logs-retail-promotions",
+ "priority": 500,
+ "template": {
+ "mappings": {
+ "properties": {
+ "@timestamp": {
+ "format": "date_optional_time||epoch_millis",
+ "type": "date"
+ },
+ "data_stream": {
+ "properties": {
+ "namespace": {
+ "type": "constant_keyword"
+ }
+ }
+ },
+ "message": {
+ "type": "wildcard"
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+{
+ "type": "data_stream",
+ "value": {
+ "data_stream": "logs-retail-sales",
+ "template": {
+ "_meta": {
+ "description": "Template for my time series data",
+ "my-custom-meta-field": "More arbitrary metadata"
+ },
+ "data_stream": {
+ "allow_custom_routing": false,
+ "hidden": false
+ },
+ "index_patterns": [
+ "logs-retail-sales"
+ ],
+ "name": "logs-retail-sales",
+ "priority": 500,
+ "template": {
+ "mappings": {
+ "properties": {
+ "@timestamp": {
+ "format": "date_optional_time||epoch_millis",
+ "type": "date"
+ },
+ "data_stream": {
+ "properties": {
+ "namespace": {
+ "type": "constant_keyword"
+ }
+ }
+ },
+ "message": {
+ "type": "wildcard"
+ }
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/x-pack/test/functional/page_objects/discover_log_explorer.ts b/x-pack/test/functional/page_objects/discover_log_explorer.ts
index 15c2dc8fbcc4e..282a703863dc2 100644
--- a/x-pack/test/functional/page_objects/discover_log_explorer.ts
+++ b/x-pack/test/functional/page_objects/discover_log_explorer.ts
@@ -7,13 +7,186 @@
import expect from '@kbn/expect';
import { FtrProviderContext } from '../ftr_provider_context';
+export interface IntegrationPackage {
+ name: string;
+ version: string;
+}
+
+const packages: IntegrationPackage[] = [
+ {
+ name: 'apache',
+ version: '1.14.0',
+ },
+ {
+ name: 'aws',
+ version: '1.51.0',
+ },
+ {
+ name: 'system',
+ version: '1.38.1',
+ },
+ {
+ name: '1password',
+ version: '1.18.0',
+ },
+ {
+ name: 'activemq',
+ version: '0.13.0',
+ },
+ {
+ name: 'akamai',
+ version: '2.14.0',
+ },
+ {
+ name: 'apache_tomcat',
+ version: '0.12.1',
+ },
+ {
+ name: 'apm',
+ version: '8.4.2',
+ },
+ {
+ name: 'atlassian_bitbucket',
+ version: '1.14.0',
+ },
+ {
+ name: 'atlassian_confluence',
+ version: '1.15.0',
+ },
+ {
+ name: 'atlassian_jira',
+ version: '1.15.0',
+ },
+ {
+ name: 'auditd',
+ version: '3.12.0',
+ },
+ {
+ name: 'auditd_manager',
+ version: '1.12.0',
+ },
+ {
+ name: 'auth0',
+ version: '1.10.0',
+ },
+ {
+ name: 'aws_logs',
+ version: '0.5.0',
+ },
+ {
+ name: 'azure',
+ version: '1.5.28',
+ },
+ {
+ name: 'azure_app_service',
+ version: '0.0.1',
+ },
+ {
+ name: 'azure_blob_storage',
+ version: '0.5.0',
+ },
+ {
+ name: 'azure_frontdoor',
+ version: '1.1.0',
+ },
+ {
+ name: 'azure_functions',
+ version: '0.0.1',
+ },
+];
+
+const initialPackages = packages.slice(0, 3);
+const additionalPackages = packages.slice(3);
+
export function DiscoverLogExplorerPageObject({ getService }: FtrProviderContext) {
+ const log = getService('log');
+ const supertest = getService('supertest');
const testSubjects = getService('testSubjects');
const toasts = getService('toasts');
return {
- async getDatasetSelectorButton() {
- return testSubjects.find('dataset-selector-popover-button');
+ uninstallPackage: ({ name, version }: IntegrationPackage) => {
+ return supertest.delete(`/api/fleet/epm/packages/${name}/${version}`).set('kbn-xsrf', 'xxxx');
+ },
+
+ installPackage: ({ name, version }: IntegrationPackage) => {
+ return supertest
+ .post(`/api/fleet/epm/packages/${name}/${version}`)
+ .set('kbn-xsrf', 'xxxx')
+ .send({ force: true });
+ },
+
+ getInstalledPackages: () => {
+ return supertest
+ .get(`/api/fleet/epm/packages/installed?dataStreamType=logs&perPage=1000`)
+ .set('kbn-xsrf', 'xxxx');
+ },
+
+ async removeInstalledPackages(): Promise {
+ const response = await this.getInstalledPackages();
+
+ // Uninstall installed integration
+ await Promise.all(
+ response.body.items.map((pkg: IntegrationPackage) => this.uninstallPackage(pkg))
+ );
+
+ return response.body.items;
+ },
+
+ async setupInitialIntegrations() {
+ log.info(`===== Setup initial integration packages. =====`);
+ log.info(`===== Uninstall initial integration packages. =====`);
+ const uninstalled = await this.removeInstalledPackages();
+ log.info(`===== Install ${initialPackages.length} mock integration packages. =====`);
+ await Promise.all(initialPackages.map((pkg: IntegrationPackage) => this.installPackage(pkg)));
+
+ return async () => {
+ log.info(`===== Uninstall ${initialPackages.length} mock integration packages. =====`);
+ await Promise.all(
+ initialPackages.map((pkg: IntegrationPackage) => this.uninstallPackage(pkg))
+ );
+ log.info(`===== Restore pre-existing integration packages. =====`);
+ await Promise.all(uninstalled.map((pkg: IntegrationPackage) => this.installPackage(pkg)));
+ };
+ },
+
+ async setupAdditionalIntegrations() {
+ log.info(`===== Setup additional integration packages. =====`);
+ log.info(`===== Install ${additionalPackages.length} mock integration packages. =====`);
+ await Promise.all(
+ additionalPackages.map((pkg: IntegrationPackage) => this.installPackage(pkg))
+ );
+
+ return async () => {
+ log.info(`===== Uninstall ${additionalPackages.length} mock integration packages. =====`);
+ await Promise.all(
+ additionalPackages.map((pkg: IntegrationPackage) => this.uninstallPackage(pkg))
+ );
+ };
+ },
+
+ getDatasetSelector() {
+ return testSubjects.find('datasetSelectorPopover');
+ },
+
+ getDatasetSelectorButton() {
+ return testSubjects.find('datasetSelectorPopoverButton');
+ },
+
+ getDatasetSelectorContent() {
+ return testSubjects.find('datasetSelectorContent');
+ },
+
+ getDatasetSelectorSearchControls() {
+ return testSubjects.find('datasetSelectorSearchControls');
+ },
+
+ getDatasetSelectorContextMenu() {
+ return testSubjects.find('datasetSelectorContextMenu');
+ },
+
+ getDatasetSelectorContextMenuPanelTitle() {
+ return testSubjects.find('contextMenuPanelTitleButton');
},
async getDatasetSelectorButtonText() {
@@ -21,11 +194,115 @@ export function DiscoverLogExplorerPageObject({ getService }: FtrProviderContext
return button.getVisibleText();
},
+ async getCurrentPanelEntries() {
+ const contextMenu = await this.getDatasetSelectorContextMenu();
+ return contextMenu.findAllByClassName('euiContextMenuItem', 2000);
+ },
+
+ getAllLogDatasetsButton() {
+ return testSubjects.find('allLogDatasets');
+ },
+
+ getUnmanagedDatasetsButton() {
+ return testSubjects.find('unmanagedDatasets');
+ },
+
+ async getIntegrations() {
+ const content = await this.getDatasetSelectorContent();
+
+ const nodes = await content.findAllByCssSelector('[data-test-subj*="integration-"]', 2000);
+ const integrations = await Promise.all(nodes.map((node) => node.getVisibleText()));
+
+ return {
+ nodes,
+ integrations,
+ };
+ },
+
+ async openDatasetSelector() {
+ const button = await this.getDatasetSelectorButton();
+ return button.click();
+ },
+
+ async closeDatasetSelector() {
+ const button = await this.getDatasetSelectorButton();
+ const isOpen = await testSubjects.exists('datasetSelectorContent');
+
+ if (isOpen) return button.click();
+ },
+
+ async clickSortButtonBy(direction: 'asc' | 'desc') {
+ const titleMap = {
+ asc: 'Ascending',
+ desc: 'Descending',
+ };
+ const searchControlsContainer = await this.getDatasetSelectorSearchControls();
+ const sortingButton = await searchControlsContainer.findByCssSelector(
+ `[title=${titleMap[direction]}]`
+ );
+
+ return sortingButton.click();
+ },
+
+ async getSearchFieldValue() {
+ const searchControlsContainer = await this.getDatasetSelectorSearchControls();
+ const searchField = await searchControlsContainer.findByCssSelector('input[type=search]');
+
+ return searchField.getAttribute('value');
+ },
+
+ async typeSearchFieldWith(name: string) {
+ const searchControlsContainer = await this.getDatasetSelectorSearchControls();
+ const searchField = await searchControlsContainer.findByCssSelector('input[type=search]');
+
+ await searchField.clearValueWithKeyboard();
+ return searchField.type(name);
+ },
+
+ async clearSearchField() {
+ const searchControlsContainer = await this.getDatasetSelectorSearchControls();
+ const searchField = await searchControlsContainer.findByCssSelector('input[type=search]');
+
+ return searchField.clearValueWithKeyboard();
+ },
+
async assertRestoreFailureToastExist() {
const successToast = await toasts.getToastElement(1);
expect(await successToast.getVisibleText()).to.contain(
"We couldn't restore your datasets selection"
);
},
+
+ assertLoadingSkeletonExists() {
+ return testSubjects.existOrFail('datasetSelectorSkeleton');
+ },
+
+ async assertNoIntegrationsPromptExists() {
+ const integrationStatus = await testSubjects.find('integrationStatusItem');
+ const promptTitle = await integrationStatus.findByTagName('h2');
+
+ expect(await promptTitle.getVisibleText()).to.be('No integrations found');
+ },
+
+ async assertNoIntegrationsErrorExists() {
+ const integrationStatus = await testSubjects.find('integrationsErrorPrompt');
+ const promptTitle = await integrationStatus.findByTagName('h2');
+
+ expect(await promptTitle.getVisibleText()).to.be('No integrations found');
+ },
+
+ async assertNoDataStreamsPromptExists() {
+ const integrationStatus = await testSubjects.find('emptyDatasetPrompt');
+ const promptTitle = await integrationStatus.findByTagName('h2');
+
+ expect(await promptTitle.getVisibleText()).to.be('No data streams found');
+ },
+
+ async assertNoDataStreamsErrorExists() {
+ const integrationStatus = await testSubjects.find('datasetErrorPrompt');
+ const promptTitle = await integrationStatus.findByTagName('h2');
+
+ expect(await promptTitle.getVisibleText()).to.be('No data streams found');
+ },
};
}
diff --git a/x-pack/test_serverless/functional/test_suites/observability/discover_log_explorer/columns_selection.ts b/x-pack/test_serverless/functional/test_suites/observability/discover_log_explorer/columns_selection.ts
new file mode 100644
index 0000000000000..dfba8f72a699d
--- /dev/null
+++ b/x-pack/test_serverless/functional/test_suites/observability/discover_log_explorer/columns_selection.ts
@@ -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 expect from '@kbn/expect';
+import { FtrProviderContext } from '../../../ftr_provider_context';
+
+const defaultLogColumns = ['@timestamp', 'message'];
+
+export default function ({ getService, getPageObjects }: FtrProviderContext) {
+ const esArchiver = getService('esArchiver');
+ const retry = getService('retry');
+ const PageObjects = getPageObjects(['common', 'discover']);
+
+ describe('Columns selection initialization and update', () => {
+ before(async () => {
+ await esArchiver.load(
+ 'x-pack/test/functional/es_archives/discover_log_explorer/data_streams'
+ );
+ });
+
+ after(async () => {
+ await esArchiver.unload(
+ 'x-pack/test/functional/es_archives/discover_log_explorer/data_streams'
+ );
+ });
+
+ describe('when the log explorer profile loads', () => {
+ it("should initialize the table columns to logs' default selection", async () => {
+ await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
+
+ await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage();
+
+ await retry.try(async () => {
+ expect(await PageObjects.discover.getColumnHeaders()).to.eql(defaultLogColumns);
+ });
+ });
+
+ it('should restore the table columns from the URL state if exists', async () => {
+ await PageObjects.common.navigateToApp('discover', {
+ hash: '/p/log-explorer?_a=(columns:!(message,data_stream.namespace))',
+ });
+
+ await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage();
+
+ await retry.try(async () => {
+ expect(await PageObjects.discover.getColumnHeaders()).to.eql([
+ ...defaultLogColumns,
+ 'data_stream.namespace',
+ ]);
+ });
+ });
+ });
+ });
+}
diff --git a/x-pack/test_serverless/functional/test_suites/observability/discover_log_explorer/customization.ts b/x-pack/test_serverless/functional/test_suites/observability/discover_log_explorer/customization.ts
index 579f4e4b8f5c5..a647293a73145 100644
--- a/x-pack/test_serverless/functional/test_suites/observability/discover_log_explorer/customization.ts
+++ b/x-pack/test_serverless/functional/test_suites/observability/discover_log_explorer/customization.ts
@@ -24,11 +24,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
it('DatasetSelector should replace the DataViewPicker', async () => {
// Assert does not render on discover app
await PageObjects.common.navigateToApp('discover');
- await testSubjects.missingOrFail('dataset-selector-popover');
+ await testSubjects.missingOrFail('datasetSelectorPopover');
// Assert it renders on log-explorer profile
await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
- await testSubjects.existOrFail('dataset-selector-popover');
+ await testSubjects.existOrFail('datasetSelectorPopover');
});
it('the TopNav bar should hide New, Open and Save options', async () => {
@@ -50,6 +50,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await testSubjects.existOrFail('openInspectorButton');
await testSubjects.missingOrFail('discoverSaveButton');
});
+
+ it('should render a filter controls section as part of the unified search bar', async () => {
+ // Assert does not render on discover app
+ await PageObjects.common.navigateToApp('discover');
+ await testSubjects.missingOrFail('datasetFiltersCustomization');
+
+ // Assert it renders on log-explorer profile
+ await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
+ await testSubjects.existOrFail('datasetFiltersCustomization', { allowHidden: true });
+ });
});
});
}
diff --git a/x-pack/test_serverless/functional/test_suites/observability/discover_log_explorer/dataset_selector.ts b/x-pack/test_serverless/functional/test_suites/observability/discover_log_explorer/dataset_selector.ts
new file mode 100644
index 0000000000000..cbb3ea9d95de5
--- /dev/null
+++ b/x-pack/test_serverless/functional/test_suites/observability/discover_log_explorer/dataset_selector.ts
@@ -0,0 +1,664 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+import expect from '@kbn/expect';
+import { FtrProviderContext } from '../../../ftr_provider_context';
+
+const initialPackageMap = {
+ apache: 'Apache HTTP Server',
+ aws: 'AWS',
+ system: 'System',
+};
+const initialPackagesTexts = Object.values(initialPackageMap);
+
+const expectedUncategorized = ['logs-gaming-*', 'logs-manufacturing-*', 'logs-retail-*'];
+
+export default function ({ getService, getPageObjects }: FtrProviderContext) {
+ const browser = getService('browser');
+ const esArchiver = getService('esArchiver');
+ const retry = getService('retry');
+ const PageObjects = getPageObjects(['common', 'discoverLogExplorer']);
+
+ describe('Dataset Selector', () => {
+ before(async () => {
+ await PageObjects.discoverLogExplorer.removeInstalledPackages();
+ });
+
+ describe('without installed integrations or uncategorized data streams', () => {
+ before(async () => {
+ await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
+ });
+
+ beforeEach(async () => {
+ await browser.refresh();
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+ });
+
+ describe('when open on the first navigation level', () => {
+ it('should always display the "All log datasets" entry as the first item', async () => {
+ const allLogDatasetButton =
+ await PageObjects.discoverLogExplorer.getAllLogDatasetsButton();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ const allLogDatasetTitle = await allLogDatasetButton.getVisibleText();
+ const firstEntryTitle = await menuEntries[0].getVisibleText();
+
+ expect(allLogDatasetTitle).to.be('All log datasets');
+ expect(allLogDatasetTitle).to.be(firstEntryTitle);
+ });
+
+ it('should always display the unmanaged datasets entry as the second item', async () => {
+ const unamanagedDatasetButton =
+ await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ const unmanagedDatasetTitle = await unamanagedDatasetButton.getVisibleText();
+ const secondEntryTitle = await menuEntries[1].getVisibleText();
+
+ expect(unmanagedDatasetTitle).to.be('Uncategorized');
+ expect(unmanagedDatasetTitle).to.be(secondEntryTitle);
+ });
+
+ it('should display an error prompt if could not retrieve the integrations', async function () {
+ // Skip the test in case network condition utils are not available
+ try {
+ await retry.try(async () => {
+ await PageObjects.discoverLogExplorer.assertNoIntegrationsPromptExists();
+ });
+
+ await PageObjects.common.sleep(5000);
+ await browser.setNetworkConditions('OFFLINE');
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('a');
+
+ await retry.try(async () => {
+ await PageObjects.discoverLogExplorer.assertNoIntegrationsErrorExists();
+ });
+
+ await browser.restoreNetworkConditions();
+ } catch (error) {
+ this.skip();
+ }
+ });
+
+ it('should display an empty prompt for no integrations', async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations.length).to.be(0);
+
+ await PageObjects.discoverLogExplorer.assertNoIntegrationsPromptExists();
+ });
+ });
+
+ describe('when navigating into Uncategorized data streams', () => {
+ it('should display a loading skeleton while loading', async function () {
+ // Skip the test in case network condition utils are not available
+ try {
+ await browser.setNetworkConditions('SLOW_3G'); // Almost stuck network conditions
+ const unamanagedDatasetButton =
+ await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ await unamanagedDatasetButton.click();
+
+ await PageObjects.discoverLogExplorer.assertLoadingSkeletonExists();
+
+ await browser.restoreNetworkConditions();
+ } catch (error) {
+ this.skip();
+ }
+ });
+
+ it('should display an error prompt if could not retrieve the data streams', async function () {
+ // Skip the test in case network condition utils are not available
+ try {
+ const unamanagedDatasetButton =
+ await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ await unamanagedDatasetButton.click();
+
+ await retry.try(async () => {
+ await PageObjects.discoverLogExplorer.assertNoDataStreamsPromptExists();
+ });
+
+ await browser.setNetworkConditions('OFFLINE');
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('a');
+
+ await retry.try(async () => {
+ await PageObjects.discoverLogExplorer.assertNoDataStreamsErrorExists();
+ });
+
+ await browser.restoreNetworkConditions();
+ } catch (error) {
+ this.skip();
+ }
+ });
+
+ it('should display an empty prompt for no data streams', async () => {
+ const unamanagedDatasetButton =
+ await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ await unamanagedDatasetButton.click();
+
+ const unamanagedDatasetEntries =
+ await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(unamanagedDatasetEntries.length).to.be(0);
+
+ await PageObjects.discoverLogExplorer.assertNoDataStreamsPromptExists();
+ });
+ });
+ });
+
+ describe('with installed integrations and uncategorized data streams', () => {
+ let cleanupIntegrationsSetup: () => Promise;
+
+ before(async () => {
+ await esArchiver.load(
+ 'x-pack/test/functional/es_archives/discover_log_explorer/data_streams'
+ );
+ cleanupIntegrationsSetup = await PageObjects.discoverLogExplorer.setupInitialIntegrations();
+ });
+
+ after(async () => {
+ await esArchiver.unload(
+ 'x-pack/test/functional/es_archives/discover_log_explorer/data_streams'
+ );
+ await cleanupIntegrationsSetup();
+ });
+
+ describe('when open on the first navigation level', () => {
+ before(async () => {
+ await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
+ });
+
+ beforeEach(async () => {
+ await browser.refresh();
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+ });
+
+ it('should always display the "All log datasets" entry as the first item', async () => {
+ const allLogDatasetButton =
+ await PageObjects.discoverLogExplorer.getAllLogDatasetsButton();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ const allLogDatasetTitle = await allLogDatasetButton.getVisibleText();
+ const firstEntryTitle = await menuEntries[0].getVisibleText();
+
+ expect(allLogDatasetTitle).to.be('All log datasets');
+ expect(allLogDatasetTitle).to.be(firstEntryTitle);
+ });
+
+ it('should always display the unmanaged datasets entry as the second item', async () => {
+ const unamanagedDatasetButton =
+ await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ const unmanagedDatasetTitle = await unamanagedDatasetButton.getVisibleText();
+ const secondEntryTitle = await menuEntries[1].getVisibleText();
+
+ expect(unmanagedDatasetTitle).to.be('Uncategorized');
+ expect(unmanagedDatasetTitle).to.be(secondEntryTitle);
+ });
+
+ it('should display a list of installed integrations', async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+
+ expect(integrations.length).to.be(3);
+ expect(integrations).to.eql(initialPackagesTexts);
+ });
+
+ it('should sort the integrations list by the clicked sorting option', async () => {
+ // Test ascending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('asc');
+
+ await retry.try(async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql(initialPackagesTexts);
+ });
+
+ // Test descending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('desc');
+
+ await retry.try(async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql(initialPackagesTexts.slice().reverse());
+ });
+
+ // Test back ascending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('asc');
+
+ await retry.try(async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql(initialPackagesTexts);
+ });
+ });
+
+ it('should filter the integrations list by the typed integration name', async () => {
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('system');
+
+ await retry.try(async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql([initialPackageMap.system]);
+ });
+
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('a');
+
+ await retry.try(async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql([initialPackageMap.apache, initialPackageMap.aws]);
+ });
+ });
+
+ it('should display an empty prompt when the search does not match any result', async () => {
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('no result search text');
+
+ await retry.try(async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations.length).to.be(0);
+ });
+
+ await PageObjects.discoverLogExplorer.assertNoIntegrationsPromptExists();
+ });
+
+ it('should load more integrations by scrolling to the end of the list', async () => {
+ // Install more integrations and reload the page
+ const cleanupAdditionalSetup =
+ await PageObjects.discoverLogExplorer.setupAdditionalIntegrations();
+ await browser.refresh();
+
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+
+ // Initially fetched integrations
+ await retry.try(async () => {
+ const { nodes } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(nodes.length).to.be(15);
+ await nodes.at(-1)?.scrollIntoViewIfNecessary();
+ });
+
+ // Load more integrations
+ await retry.try(async () => {
+ const { nodes } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(nodes.length).to.be(20);
+ await nodes.at(-1)?.scrollIntoViewIfNecessary();
+ });
+
+ // No other integrations to load after scrolling to last integration
+ await retry.try(async () => {
+ const { nodes } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(nodes.length).to.be(20);
+ });
+
+ cleanupAdditionalSetup();
+ });
+ });
+
+ describe('when clicking on integration and moving into the second navigation level', () => {
+ before(async () => {
+ await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
+ });
+
+ beforeEach(async () => {
+ await browser.refresh();
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+ });
+
+ it('should display a list of available datasets', async () => {
+ await retry.try(async () => {
+ const { nodes } = await PageObjects.discoverLogExplorer.getIntegrations();
+ await nodes[0].click();
+ });
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Apache HTTP Server');
+ expect(await menuEntries[0].getVisibleText()).to.be('access');
+ expect(await menuEntries[1].getVisibleText()).to.be('error');
+ });
+ });
+
+ it('should sort the datasets list by the clicked sorting option', async () => {
+ await retry.try(async () => {
+ const { nodes } = await PageObjects.discoverLogExplorer.getIntegrations();
+ await nodes[0].click();
+ });
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Apache HTTP Server');
+ });
+
+ // Test ascending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('asc');
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be('access');
+ expect(await menuEntries[1].getVisibleText()).to.be('error');
+ });
+
+ // Test descending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('desc');
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be('error');
+ expect(await menuEntries[1].getVisibleText()).to.be('access');
+ });
+
+ // Test back ascending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('asc');
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be('access');
+ expect(await menuEntries[1].getVisibleText()).to.be('error');
+ });
+ });
+
+ it('should filter the datasets list by the typed dataset name', async () => {
+ await retry.try(async () => {
+ const { nodes } = await PageObjects.discoverLogExplorer.getIntegrations();
+ await nodes[0].click();
+ });
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Apache HTTP Server');
+ });
+
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be('access');
+ expect(await menuEntries[1].getVisibleText()).to.be('error');
+ });
+
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('err');
+
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(menuEntries.length).to.be(1);
+ expect(await menuEntries[0].getVisibleText()).to.be('error');
+ });
+ });
+
+ it('should update the current selection with the clicked dataset', async () => {
+ await retry.try(async () => {
+ const { nodes } = await PageObjects.discoverLogExplorer.getIntegrations();
+ await nodes[0].click();
+ });
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Apache HTTP Server');
+ });
+
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be('access');
+ menuEntries[0].click();
+ });
+
+ await retry.try(async () => {
+ const selectorButton = await PageObjects.discoverLogExplorer.getDatasetSelectorButton();
+
+ expect(await selectorButton.getVisibleText()).to.be('[Apache HTTP Server] access');
+ });
+ });
+ });
+
+ describe('when navigating into Uncategorized data streams', () => {
+ before(async () => {
+ await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
+ });
+
+ beforeEach(async () => {
+ await browser.refresh();
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+ });
+
+ it('should display a list of available datasets', async () => {
+ const button = await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ await button.click();
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Uncategorized');
+ expect(await menuEntries[0].getVisibleText()).to.be(expectedUncategorized[0]);
+ expect(await menuEntries[1].getVisibleText()).to.be(expectedUncategorized[1]);
+ expect(await menuEntries[2].getVisibleText()).to.be(expectedUncategorized[2]);
+ });
+ });
+
+ it('should sort the datasets list by the clicked sorting option', async () => {
+ const button = await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ await button.click();
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Uncategorized');
+ });
+
+ // Test ascending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('asc');
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be(expectedUncategorized[0]);
+ expect(await menuEntries[1].getVisibleText()).to.be(expectedUncategorized[1]);
+ expect(await menuEntries[2].getVisibleText()).to.be(expectedUncategorized[2]);
+ });
+
+ // Test descending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('desc');
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be(expectedUncategorized[2]);
+ expect(await menuEntries[1].getVisibleText()).to.be(expectedUncategorized[1]);
+ expect(await menuEntries[2].getVisibleText()).to.be(expectedUncategorized[0]);
+ });
+
+ // Test back ascending order
+ await PageObjects.discoverLogExplorer.clickSortButtonBy('asc');
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be(expectedUncategorized[0]);
+ expect(await menuEntries[1].getVisibleText()).to.be(expectedUncategorized[1]);
+ expect(await menuEntries[2].getVisibleText()).to.be(expectedUncategorized[2]);
+ });
+ });
+
+ it('should filter the datasets list by the typed dataset name', async () => {
+ const button = await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ await button.click();
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Uncategorized');
+ });
+
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be(expectedUncategorized[0]);
+ expect(await menuEntries[1].getVisibleText()).to.be(expectedUncategorized[1]);
+ expect(await menuEntries[2].getVisibleText()).to.be(expectedUncategorized[2]);
+ });
+
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('retail');
+
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(menuEntries.length).to.be(1);
+ expect(await menuEntries[0].getVisibleText()).to.be('logs-retail-*');
+ });
+ });
+
+ it('should update the current selection with the clicked dataset', async () => {
+ const button = await PageObjects.discoverLogExplorer.getUnmanagedDatasetsButton();
+ await button.click();
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Uncategorized');
+ });
+
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await menuEntries[0].getVisibleText()).to.be('logs-gaming-*');
+ menuEntries[0].click();
+ });
+
+ await retry.try(async () => {
+ const selectorButton = await PageObjects.discoverLogExplorer.getDatasetSelectorButton();
+
+ expect(await selectorButton.getVisibleText()).to.be('logs-gaming-*');
+ });
+ });
+ });
+
+ describe('when open/close the selector', () => {
+ before(async () => {
+ await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
+ });
+
+ beforeEach(async () => {
+ await browser.refresh();
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+ });
+
+ it('should restore the latest navigation panel', async () => {
+ await retry.try(async () => {
+ const { nodes } = await PageObjects.discoverLogExplorer.getIntegrations();
+ await nodes[0].click();
+ });
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Apache HTTP Server');
+ expect(await menuEntries[0].getVisibleText()).to.be('access');
+ expect(await menuEntries[1].getVisibleText()).to.be('error');
+ });
+
+ await PageObjects.discoverLogExplorer.closeDatasetSelector();
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Apache HTTP Server');
+ expect(await menuEntries[0].getVisibleText()).to.be('access');
+ expect(await menuEntries[1].getVisibleText()).to.be('error');
+ });
+ });
+
+ it('should restore the latest search results', async () => {
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('system');
+
+ await retry.try(async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql([initialPackageMap.system]);
+ });
+
+ await PageObjects.discoverLogExplorer.closeDatasetSelector();
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+
+ await retry.try(async () => {
+ const { integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql([initialPackageMap.system]);
+ });
+ });
+ });
+
+ describe('when switching between integration panels', () => {
+ before(async () => {
+ await PageObjects.common.navigateToApp('discover', { hash: '/p/log-explorer' });
+ });
+
+ it('should remember the latest search and restore its results for each integration', async () => {
+ await PageObjects.discoverLogExplorer.openDatasetSelector();
+ await PageObjects.discoverLogExplorer.clearSearchField();
+
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('apache');
+
+ await retry.try(async () => {
+ const { nodes, integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql([initialPackageMap.apache]);
+ nodes[0].click();
+ });
+
+ await retry.try(async () => {
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(await panelTitleNode.getVisibleText()).to.be('Apache HTTP Server');
+ expect(await menuEntries[0].getVisibleText()).to.be('access');
+ expect(await menuEntries[1].getVisibleText()).to.be('error');
+ });
+
+ await PageObjects.discoverLogExplorer.typeSearchFieldWith('err');
+
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ expect(menuEntries.length).to.be(1);
+ expect(await menuEntries[0].getVisibleText()).to.be('error');
+ });
+
+ // Navigate back to integrations
+ const panelTitleNode =
+ await PageObjects.discoverLogExplorer.getDatasetSelectorContextMenuPanelTitle();
+ panelTitleNode.click();
+
+ await retry.try(async () => {
+ const { nodes, integrations } = await PageObjects.discoverLogExplorer.getIntegrations();
+ expect(integrations).to.eql([initialPackageMap.apache]);
+
+ const searchValue = await PageObjects.discoverLogExplorer.getSearchFieldValue();
+ expect(searchValue).to.eql('apache');
+
+ nodes[0].click();
+ });
+
+ await retry.try(async () => {
+ const menuEntries = await PageObjects.discoverLogExplorer.getCurrentPanelEntries();
+
+ const searchValue = await PageObjects.discoverLogExplorer.getSearchFieldValue();
+ expect(searchValue).to.eql('err');
+
+ expect(menuEntries.length).to.be(1);
+ expect(await menuEntries[0].getVisibleText()).to.be('error');
+ });
+ });
+ });
+ });
+ });
+}
diff --git a/x-pack/test_serverless/functional/test_suites/observability/discover_log_explorer/index.ts b/x-pack/test_serverless/functional/test_suites/observability/discover_log_explorer/index.ts
index e334c028cbaca..8e9843fc02815 100644
--- a/x-pack/test_serverless/functional/test_suites/observability/discover_log_explorer/index.ts
+++ b/x-pack/test_serverless/functional/test_suites/observability/discover_log_explorer/index.ts
@@ -9,7 +9,9 @@ import { FtrProviderContext } from '../../../ftr_provider_context';
export default function (loadTestFile: FtrProviderContext['loadTestFile']) {
describe('Discover Log-Explorer profile', function () {
+ loadTestFile(require.resolve('./columns_selection'));
loadTestFile(require.resolve('./customization'));
loadTestFile(require.resolve('./dataset_selection_state'));
+ loadTestFile(require.resolve('./dataset_selector'));
});
}
From ecaa8a73707f97c99ef2d57574ac3dcbac3096df Mon Sep 17 00:00:00 2001
From: Walter Rafelsberger
Date: Fri, 11 Aug 2023 15:46:56 +0200
Subject: [PATCH 16/46] [ML] Transforms: Fix privileges check. (#163687)
Fixes a regression introduced in #154007.
When security is disabled, the check for transform
privileges/capabilities would fail and the transform page would not
render.
- This fixes the endpoint to return data in the correct format should
security be disabled.
- The endpoint's TypeScript has been updated to catch malformed
responses.
- The client side custom `useRequest` is replaced with `useQuery` from
`'@tanstack/react-query'` which also fixes TypeScript support on the
client side.
---
.../common/privilege/has_privilege_factory.ts | 7 +-
.../public/__mocks__/shared_imports.ts | 5 -
x-pack/plugins/transform/public/app/app.tsx | 33 +++---
.../transform/public/app/hooks/index.ts | 1 -
.../transform/public/app/hooks/use_request.ts | 15 ---
.../components/authorization_provider.tsx | 40 +++++--
.../transform/public/shared_imports.ts | 2 -
.../transform/server/routes/api/privileges.ts | 100 +++++++++---------
8 files changed, 101 insertions(+), 102 deletions(-)
delete mode 100644 x-pack/plugins/transform/public/app/hooks/use_request.ts
diff --git a/x-pack/plugins/transform/common/privilege/has_privilege_factory.ts b/x-pack/plugins/transform/common/privilege/has_privilege_factory.ts
index 972f8e727f50d..9dee0c1a73cf1 100644
--- a/x-pack/plugins/transform/common/privilege/has_privilege_factory.ts
+++ b/x-pack/plugins/transform/common/privilege/has_privilege_factory.ts
@@ -12,6 +12,11 @@ import { cloneDeep } from 'lodash';
import { APP_INDEX_PRIVILEGES } from '../constants';
import { Privileges } from '../types/privileges';
+export interface PrivilegesAndCapabilities {
+ privileges: Privileges;
+ capabilities: Capabilities;
+}
+
export interface TransformCapabilities {
canGetTransform: boolean;
canDeleteTransform: boolean;
@@ -89,7 +94,7 @@ export const getPrivilegesAndCapabilities = (
clusterPrivileges: Record,
hasOneIndexWithAllPrivileges: boolean,
hasAllPrivileges: boolean
-) => {
+): PrivilegesAndCapabilities => {
const privilegesResult: Privileges = {
hasAllPrivileges: true,
missingPrivileges: {
diff --git a/x-pack/plugins/transform/public/__mocks__/shared_imports.ts b/x-pack/plugins/transform/public/__mocks__/shared_imports.ts
index f10b48de27e38..ac4b7fe49a38c 100644
--- a/x-pack/plugins/transform/public/__mocks__/shared_imports.ts
+++ b/x-pack/plugins/transform/public/__mocks__/shared_imports.ts
@@ -8,11 +8,6 @@
// actual mocks
export const expandLiteralStrings = jest.fn();
export const XJsonMode = jest.fn();
-export const useRequest = jest.fn(() => ({
- isLoading: false,
- error: null,
- data: undefined,
-}));
export const getSavedSearch = jest.fn();
// just passing through the reimports
diff --git a/x-pack/plugins/transform/public/app/app.tsx b/x-pack/plugins/transform/public/app/app.tsx
index af411d0aeda6f..ba4a43bfa0876 100644
--- a/x-pack/plugins/transform/public/app/app.tsx
+++ b/x-pack/plugins/transform/public/app/app.tsx
@@ -7,14 +7,13 @@
import React, { useContext, FC } from 'react';
import { render, unmountComponentAtNode } from 'react-dom';
-import { Router, Routes, Route } from '@kbn/shared-ux-router';
-
-import { ScopedHistory } from '@kbn/core/public';
+import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { EuiErrorBoundary } from '@elastic/eui';
+import { Router, Routes, Route } from '@kbn/shared-ux-router';
+import { ScopedHistory } from '@kbn/core/public';
import { FormattedMessage } from '@kbn/i18n-react';
-
import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public';
import { addInternalBasePath } from '../../common/constants';
@@ -23,7 +22,6 @@ import { SectionError } from './components';
import { SECTION_SLUG } from './common/constants';
import { AuthorizationContext, AuthorizationProvider } from './lib/authorization';
import { AppDependencies } from './app_dependencies';
-
import { CloneTransformSection } from './sections/clone_transform';
import { CreateTransformSection } from './sections/create_transform';
import { TransformManagementSection } from './sections/transform_management';
@@ -63,20 +61,23 @@ export const App: FC<{ history: ScopedHistory }> = ({ history }) => {
export const renderApp = (element: HTMLElement, appDependencies: AppDependencies) => {
const I18nContext = appDependencies.i18n.Context;
+ const queryClient = new QueryClient();
render(
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
,
element
);
diff --git a/x-pack/plugins/transform/public/app/hooks/index.ts b/x-pack/plugins/transform/public/app/hooks/index.ts
index eb2be5f4b9b23..f6a4c72b39a44 100644
--- a/x-pack/plugins/transform/public/app/hooks/index.ts
+++ b/x-pack/plugins/transform/public/app/hooks/index.ts
@@ -12,4 +12,3 @@ export { useResetTransforms } from './use_reset_transform';
export { useScheduleNowTransforms } from './use_schedule_now_transform';
export { useStartTransforms } from './use_start_transform';
export { useStopTransforms } from './use_stop_transform';
-export { useRequest } from './use_request';
diff --git a/x-pack/plugins/transform/public/app/hooks/use_request.ts b/x-pack/plugins/transform/public/app/hooks/use_request.ts
deleted file mode 100644
index de1df3e561612..0000000000000
--- a/x-pack/plugins/transform/public/app/hooks/use_request.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import { UseRequestConfig, useRequest as _useRequest } from '../../shared_imports';
-
-import { useAppDependencies } from '../app_dependencies';
-
-export const useRequest = (config: UseRequestConfig) => {
- const { http } = useAppDependencies();
- return _useRequest(http, config);
-};
diff --git a/x-pack/plugins/transform/public/app/lib/authorization/components/authorization_provider.tsx b/x-pack/plugins/transform/public/app/lib/authorization/components/authorization_provider.tsx
index 4271e1447b1e8..02bbe4e40a969 100644
--- a/x-pack/plugins/transform/public/app/lib/authorization/components/authorization_provider.tsx
+++ b/x-pack/plugins/transform/public/app/lib/authorization/components/authorization_provider.tsx
@@ -6,16 +6,20 @@
*/
import React, { createContext } from 'react';
+import { useQuery } from '@tanstack/react-query';
-import { Privileges } from '../../../../../common/types/privileges';
+import type { IHttpFetchError } from '@kbn/core-http-browser';
-import { useRequest } from '../../../hooks';
+import type { Privileges } from '../../../../../common/types/privileges';
import {
- TransformCapabilities,
+ type PrivilegesAndCapabilities,
+ type TransformCapabilities,
INITIAL_CAPABILITIES,
} from '../../../../../common/privilege/has_privilege_factory';
+import { useAppDependencies } from '../../../app_dependencies';
+
interface Authorization {
isLoading: boolean;
apiError: Error | null;
@@ -41,22 +45,36 @@ interface Props {
}
export const AuthorizationProvider = ({ privilegesEndpoint, children }: Props) => {
+ const { http } = useAppDependencies();
+
const { path, version } = privilegesEndpoint;
+
const {
isLoading,
error,
data: privilegesData,
- } = useRequest({
- path,
- version,
- method: 'get',
- });
+ } = useQuery(
+ ['transform-privileges-and-capabilities'],
+ async ({ signal }) => {
+ return await http.fetch(path, {
+ version,
+ method: 'GET',
+ signal,
+ });
+ }
+ );
const value = {
isLoading,
- privileges: isLoading ? { ...initialValue.privileges } : privilegesData.privileges,
- capabilities: isLoading ? { ...INITIAL_CAPABILITIES } : privilegesData.capabilities,
- apiError: error ? (error as Error) : null,
+ privileges:
+ isLoading || privilegesData === undefined
+ ? { ...initialValue.privileges }
+ : privilegesData.privileges,
+ capabilities:
+ isLoading || privilegesData === undefined
+ ? { ...INITIAL_CAPABILITIES }
+ : privilegesData.capabilities,
+ apiError: error ? error : null,
};
return (
diff --git a/x-pack/plugins/transform/public/shared_imports.ts b/x-pack/plugins/transform/public/shared_imports.ts
index c24f792eacab0..63276cecc7a86 100644
--- a/x-pack/plugins/transform/public/shared_imports.ts
+++ b/x-pack/plugins/transform/public/shared_imports.ts
@@ -6,8 +6,6 @@
*/
export { XJsonMode } from '@kbn/ace';
-export type { UseRequestConfig } from '@kbn/es-ui-shared-plugin/public';
-export { useRequest } from '@kbn/es-ui-shared-plugin/public';
export type { GetMlSharedImportsReturnType } from '@kbn/ml-plugin/public';
export { getMlSharedImports } from '@kbn/ml-plugin/public';
diff --git a/x-pack/plugins/transform/server/routes/api/privileges.ts b/x-pack/plugins/transform/server/routes/api/privileges.ts
index cd6817f8be63c..0b93c8e503fc6 100644
--- a/x-pack/plugins/transform/server/routes/api/privileges.ts
+++ b/x-pack/plugins/transform/server/routes/api/privileges.ts
@@ -5,15 +5,17 @@
* 2.0.
*/
-import type { IScopedClusterClient } from '@kbn/core/server';
+import type { IKibanaResponse, IScopedClusterClient } from '@kbn/core/server';
import type { SecurityHasPrivilegesResponse } from '@elastic/elasticsearch/lib/api/types';
-import { getPrivilegesAndCapabilities } from '../../../common/privilege/has_privilege_factory';
+import {
+ getPrivilegesAndCapabilities,
+ type PrivilegesAndCapabilities,
+} from '../../../common/privilege/has_privilege_factory';
import {
addInternalBasePath,
APP_CLUSTER_PRIVILEGES,
APP_INDEX_PRIVILEGES,
} from '../../../common/constants';
-import type { Privileges } from '../../../common/types/privileges';
import type { RouteDependencies } from '../../types';
@@ -23,64 +25,60 @@ export function registerPrivilegesRoute({ router, license }: RouteDependencies)
path: addInternalBasePath('privileges'),
access: 'internal',
})
- .addVersion(
+ .addVersion(
{
version: '1',
validate: false,
},
- license.guardApiRoute(async (ctx, req, res) => {
- const privilegesResult: Privileges = {
- hasAllPrivileges: true,
- missingPrivileges: {
- cluster: [],
- index: [],
- },
- };
-
- if (license.getStatus().isSecurityEnabled === false) {
- // If security isn't enabled, let the user use app.
- return res.ok({ body: privilegesResult });
- }
+ license.guardApiRoute(
+ async (ctx, req, res): Promise> => {
+ if (license.getStatus().isSecurityEnabled === false) {
+ // If security isn't enabled, let the user use app.
+ return res.ok({
+ body: getPrivilegesAndCapabilities({}, true, true),
+ });
+ }
- const esClient: IScopedClusterClient = (await ctx.core).elasticsearch.client;
+ const esClient: IScopedClusterClient = (await ctx.core).elasticsearch.client;
- const esClusterPrivilegesReq: Promise =
- esClient.asCurrentUser.security.hasPrivileges({
- body: {
- cluster: APP_CLUSTER_PRIVILEGES,
- },
- });
- const [esClusterPrivileges, userPrivileges] = await Promise.all([
- // Get cluster privileges
- esClusterPrivilegesReq,
- // // Get all index privileges the user has
- esClient.asCurrentUser.security.getUserPrivileges(),
- ]);
+ const esClusterPrivilegesReq: Promise =
+ esClient.asCurrentUser.security.hasPrivileges({
+ body: {
+ cluster: APP_CLUSTER_PRIVILEGES,
+ },
+ });
+ const [esClusterPrivileges, userPrivileges] = await Promise.all([
+ // Get cluster privileges
+ esClusterPrivilegesReq,
+ // // Get all index privileges the user has
+ esClient.asCurrentUser.security.getUserPrivileges(),
+ ]);
- const { has_all_requested: hasAllPrivileges, cluster } = esClusterPrivileges;
- const { indices } = userPrivileges;
+ const { has_all_requested: hasAllPrivileges, cluster } = esClusterPrivileges;
+ const { indices } = userPrivileges;
- // Check if they have all the required index privileges for at least one index
- const hasOneIndexWithAllPrivileges =
- indices.find(({ privileges }: { privileges: string[] }) => {
- if (privileges.includes('all')) {
- return true;
- }
+ // Check if they have all the required index privileges for at least one index
+ const hasOneIndexWithAllPrivileges =
+ indices.find(({ privileges }: { privileges: string[] }) => {
+ if (privileges.includes('all')) {
+ return true;
+ }
- const indexHasAllPrivileges = APP_INDEX_PRIVILEGES.every((privilege) =>
- privileges.includes(privilege)
- );
+ const indexHasAllPrivileges = APP_INDEX_PRIVILEGES.every((privilege) =>
+ privileges.includes(privilege)
+ );
- return indexHasAllPrivileges;
- }) !== undefined;
+ return indexHasAllPrivileges;
+ }) !== undefined;
- return res.ok({
- body: getPrivilegesAndCapabilities(
- cluster,
- hasOneIndexWithAllPrivileges,
- hasAllPrivileges
- ),
- });
- })
+ return res.ok({
+ body: getPrivilegesAndCapabilities(
+ cluster,
+ hasOneIndexWithAllPrivileges,
+ hasAllPrivileges
+ ),
+ });
+ }
+ )
);
}
From 34969fd511730be4e5bbfc64c915cb6cdfc31bc6 Mon Sep 17 00:00:00 2001
From: Ioana Tagirta
Date: Fri, 11 Aug 2023 16:16:30 +0200
Subject: [PATCH 17/46] Search Applications: use msearch to get indices counts
(#163699)
We use the index stats API to get the index counts for each index that
belongs to a Search Application.
The index stats API is internal, we should be using the counts API.
`GET /_count` is equivalent to `GET
/_search?size=0&track_total_hits=true`.
In order to avoid doing a request for each index, we do a single msearch
request to get all index counts.
tested locally, the counts are retrieved correctly:
---
.../fetch_indices_stats.test.ts | 16 ++++++++++++
.../fetch_indices_stats.ts | 25 +++++++++++++++----
2 files changed, 36 insertions(+), 5 deletions(-)
diff --git a/x-pack/plugins/enterprise_search/server/lib/search_applications/fetch_indices_stats.test.ts b/x-pack/plugins/enterprise_search/server/lib/search_applications/fetch_indices_stats.test.ts
index 90b24b81dfaa1..c7db48ac0540d 100644
--- a/x-pack/plugins/enterprise_search/server/lib/search_applications/fetch_indices_stats.test.ts
+++ b/x-pack/plugins/enterprise_search/server/lib/search_applications/fetch_indices_stats.test.ts
@@ -15,6 +15,7 @@ describe('fetchIndicesStats lib function', () => {
get: jest.fn(),
stats: jest.fn(),
},
+ msearch: jest.fn(),
},
asInternalUser: {},
};
@@ -53,6 +54,18 @@ describe('fetchIndicesStats lib function', () => {
},
];
+ const msearchResponse = {
+ responses: [
+ {
+ hits: {
+ total: {
+ value: 200,
+ },
+ },
+ },
+ ],
+ };
+
beforeEach(() => {
jest.clearAllMocks();
});
@@ -60,6 +73,7 @@ describe('fetchIndicesStats lib function', () => {
it('should return hydrated indices for all available and open indices', async () => {
mockClient.asCurrentUser.indices.get.mockResolvedValueOnce(getAllAvailableIndexResponse);
mockClient.asCurrentUser.indices.stats.mockResolvedValueOnce(indexStats);
+ mockClient.asCurrentUser.msearch.mockImplementationOnce(() => msearchResponse);
await expect(
fetchIndicesStats(mockClient as unknown as IScopedClusterClient, indices)
).resolves.toEqual(fetchIndicesStatsResponse);
@@ -77,6 +91,7 @@ describe('fetchIndicesStats lib function', () => {
);
mockClient.asCurrentUser.indices.stats.mockImplementationOnce(() => indexStats);
+ mockClient.asCurrentUser.msearch.mockImplementationOnce(() => msearchResponse);
await expect(
fetchIndicesStats(mockClient as unknown as IScopedClusterClient, [
@@ -95,6 +110,7 @@ describe('fetchIndicesStats lib function', () => {
it('should return count : null, health: unknown for deleted index ', async () => {
mockClient.asCurrentUser.indices.get.mockImplementationOnce(() => getAllAvailableIndexResponse);
mockClient.asCurrentUser.indices.stats.mockImplementationOnce(() => indexStats);
+ mockClient.asCurrentUser.msearch.mockImplementationOnce(() => msearchResponse);
await expect(
fetchIndicesStats(mockClient as unknown as IScopedClusterClient, [
diff --git a/x-pack/plugins/enterprise_search/server/lib/search_applications/fetch_indices_stats.ts b/x-pack/plugins/enterprise_search/server/lib/search_applications/fetch_indices_stats.ts
index 2aea20153fcd2..03ca3b5accc7a 100644
--- a/x-pack/plugins/enterprise_search/server/lib/search_applications/fetch_indices_stats.ts
+++ b/x-pack/plugins/enterprise_search/server/lib/search_applications/fetch_indices_stats.ts
@@ -5,6 +5,7 @@
* 2.0.
*/
+import { MsearchRequestItem, SearchTotalHits } from '@elastic/elasticsearch/lib/api/types';
import { IScopedClusterClient } from '@kbn/core-elasticsearch-server/src/client/scoped_cluster_client';
import { EnterpriseSearchApplicationIndex } from '../../../common/types/search_applications';
@@ -17,15 +18,29 @@ export const fetchIndicesStats = async (
): Promise => {
const indicesStats = await client.asCurrentUser.indices.stats({
index: await availableIndices(client, indices),
- metric: ['docs'],
});
- return indices.map((index) => {
- const indexStats = indicesStats.indices?.[index];
+ const searches: MsearchRequestItem[] = [];
+ indices.forEach((index) => {
+ searches.push({ index });
+ searches.push({ size: 0, track_total_hits: true });
+ });
+ const msearchResponse = await client.asCurrentUser.msearch({ searches });
+ const docCounts = msearchResponse.responses.map((response) => {
+ if ('error' in response) {
+ return null;
+ }
+
+ const totalHits = response.hits.total as SearchTotalHits;
+ return totalHits.value;
+ });
+
+ return indices.map((indexName, number) => {
+ const indexStats = indicesStats.indices?.[indexName];
return {
- count: indexStats?.primaries?.docs?.count ?? null,
+ count: docCounts[number] ?? null,
health: indexStats?.health ?? 'unknown',
- name: index,
+ name: indexName,
};
});
};
From 40a666b04e65e97fe678a739216e77be059432df Mon Sep 17 00:00:00 2001
From: James Gowdy
Date: Fri, 11 Aug 2023 15:19:24 +0100
Subject: [PATCH 18/46] [ML] Test UI for text expansion models (#159150)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Adds a testing UI for text expansion models. Unlike the other model
testing UIs, only data from an existing index can be used.
After selecting an index and field and entering a search query, 10
random docs are loaded, focusing on the selected field only. These
strings are then run through a pipeline simulate using `.elser_model_1`
to get tokens.
It then runs a similar pipeline simulate on the user entered search
query to get tokens for the query.
For each doc result it compares its tokens to the user’s query tokens
and builds up scores for common tokens.
It then sorts the docs for the ones with the highest score as they are
the most relevant to the user’s input.
![image](https://github.com/elastic/kibana/assets/22172091/c6933c59-a600-453a-b64e-05f69b9682e7)
**Expanded tokens section**
The top 5 matching tokens can be seen in an expandable section per doc.
![image](https://github.com/elastic/kibana/assets/22172091/c90dd0bc-4766-403f-b5ac-8060bb6d11f3)
---
.../test_models/models/index.ts | 4 +-
.../question_answering_inference.ts | 2 +-
.../zero_shot_classification_inference.ts | 4 +-
.../models/text_expansion/index.ts | 13 ++
.../text_expansion_inference.ts | 190 +++++++++++++++++
.../text_expansion/text_expansion_input.tsx | 54 +++++
.../text_expansion/text_expansion_output.tsx | 194 ++++++++++++++++++
.../test_models/selected_model.tsx | 9 +-
.../test_models/test_flyout.tsx | 67 +++---
.../model_management/test_models/utils.ts | 4 +-
10 files changed, 500 insertions(+), 41 deletions(-)
create mode 100644 x-pack/plugins/ml/public/application/model_management/test_models/models/text_expansion/index.ts
create mode 100644 x-pack/plugins/ml/public/application/model_management/test_models/models/text_expansion/text_expansion_inference.ts
create mode 100644 x-pack/plugins/ml/public/application/model_management/test_models/models/text_expansion/text_expansion_input.tsx
create mode 100644 x-pack/plugins/ml/public/application/model_management/test_models/models/text_expansion/text_expansion_output.tsx
diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/models/index.ts b/x-pack/plugins/ml/public/application/model_management/test_models/models/index.ts
index 9e4ffeda26354..c9a806bf5b7f3 100644
--- a/x-pack/plugins/ml/public/application/model_management/test_models/models/index.ts
+++ b/x-pack/plugins/ml/public/application/model_management/test_models/models/index.ts
@@ -6,6 +6,7 @@
*/
import { NerInference } from './ner';
+import { TextExpansionInference } from './text_expansion';
import { QuestionAnsweringInference } from './question_answering';
import {
TextClassificationInference,
@@ -22,4 +23,5 @@ export type InferrerType =
| TextEmbeddingInference
| ZeroShotClassificationInference
| FillMaskInference
- | LangIdentInference;
+ | LangIdentInference
+ | TextExpansionInference;
diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/models/question_answering/question_answering_inference.ts b/x-pack/plugins/ml/public/application/model_management/test_models/models/question_answering/question_answering_inference.ts
index b428442f8908d..fb130d0e3a419 100644
--- a/x-pack/plugins/ml/public/application/model_management/test_models/models/question_answering/question_answering_inference.ts
+++ b/x-pack/plugins/ml/public/application/model_management/test_models/models/question_answering/question_answering_inference.ts
@@ -57,7 +57,7 @@ export class QuestionAnsweringInference extends InferenceBase('');
+ private questionText$ = new BehaviorSubject('');
constructor(
trainedModelsApi: ReturnType,
diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/models/text_classification/zero_shot_classification_inference.ts b/x-pack/plugins/ml/public/application/model_management/test_models/models/text_classification/zero_shot_classification_inference.ts
index 19cc970826821..651575c1e0b4d 100644
--- a/x-pack/plugins/ml/public/application/model_management/test_models/models/text_classification/zero_shot_classification_inference.ts
+++ b/x-pack/plugins/ml/public/application/model_management/test_models/models/text_classification/zero_shot_classification_inference.ts
@@ -31,8 +31,8 @@ export class ZeroShotClassificationInference extends InferenceBase('');
- public multiLabel$ = new BehaviorSubject(false);
+ private labelsText$ = new BehaviorSubject('');
+ private multiLabel$ = new BehaviorSubject(false);
constructor(
trainedModelsApi: ReturnType,
diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/models/text_expansion/index.ts b/x-pack/plugins/ml/public/application/model_management/test_models/models/text_expansion/index.ts
new file mode 100644
index 0000000000000..6c492545932bd
--- /dev/null
+++ b/x-pack/plugins/ml/public/application/model_management/test_models/models/text_expansion/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.
+ */
+
+export type {
+ TextExpansionResponse,
+ FormattedTextExpansionResponse,
+} from './text_expansion_inference';
+export { TextExpansionInference } from './text_expansion_inference';
+export { getTextExpansionOutputComponent } from './text_expansion_output';
diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/models/text_expansion/text_expansion_inference.ts b/x-pack/plugins/ml/public/application/model_management/test_models/models/text_expansion/text_expansion_inference.ts
new file mode 100644
index 0000000000000..b384bf1c0526c
--- /dev/null
+++ b/x-pack/plugins/ml/public/application/model_management/test_models/models/text_expansion/text_expansion_inference.ts
@@ -0,0 +1,190 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license 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 estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
+import { i18n } from '@kbn/i18n';
+import { SUPPORTED_PYTORCH_TASKS } from '@kbn/ml-trained-models-utils';
+import { BehaviorSubject } from 'rxjs';
+import { map } from 'rxjs/operators';
+import { trainedModelsApiProvider } from '../../../../services/ml_api_service/trained_models';
+import { InferenceBase, INPUT_TYPE, type InferResponse } from '../inference_base';
+import { getTextExpansionOutputComponent } from './text_expansion_output';
+import { getTextExpansionInput } from './text_expansion_input';
+
+export interface TextExpansionPair {
+ token: string;
+ value: number;
+}
+
+export interface FormattedTextExpansionResponse {
+ text: string;
+ score: number;
+ originalTokenWeights: TextExpansionPair[];
+ adjustedTokenWeights: TextExpansionPair[];
+}
+
+export type TextExpansionResponse = InferResponse<
+ FormattedTextExpansionResponse,
+ estypes.MlInferTrainedModelResponse
+>;
+
+export class TextExpansionInference extends InferenceBase {
+ protected inferenceType = SUPPORTED_PYTORCH_TASKS.TEXT_EXPANSION;
+ protected inferenceTypeLabel = i18n.translate(
+ 'xpack.ml.trainedModels.testModelsFlyout.textExpansion.label',
+ { defaultMessage: 'Text expansion' }
+ );
+ protected info = [
+ i18n.translate('xpack.ml.trainedModels.testModelsFlyout.textExpansion.info', {
+ defaultMessage:
+ 'Expand your search to include relevant terms in the results that are not present in the query.',
+ }),
+ ];
+
+ private queryText$ = new BehaviorSubject('');
+ private queryResults: Record = {};
+
+ constructor(
+ trainedModelsApi: ReturnType,
+ model: estypes.MlTrainedModelConfig,
+ inputType: INPUT_TYPE,
+ deploymentId: string
+ ) {
+ super(trainedModelsApi, model, inputType, deploymentId);
+
+ this.initialize(
+ [this.queryText$.pipe(map((questionText) => questionText !== ''))],
+ [this.queryText$]
+ );
+ }
+
+ protected async inferText() {
+ return this.runInfer(
+ () => {},
+ (resp, inputText) => {
+ return {
+ response: parseResponse(
+ resp as unknown as MlInferTrainedModelResponse,
+ '',
+ this.queryResults
+ ),
+ rawResponse: resp,
+ inputText,
+ };
+ }
+ );
+ }
+
+ protected async inferIndex() {
+ const { docs } = await this.trainedModelsApi.trainedModelPipelineSimulate(this.getPipeline(), [
+ {
+ _source: {
+ text_field: this.getQueryText(),
+ },
+ },
+ ]);
+
+ if (docs.length === 0) {
+ throw new Error(
+ i18n.translate('xpack.ml.trainedModels.testModelsFlyout.textExpansion.noDocsError', {
+ defaultMessage: 'No docs loaded',
+ })
+ );
+ }
+
+ this.queryResults = docs[0].doc?._source[this.inferenceType].predicted_value ?? {};
+
+ return this.runPipelineSimulate((doc) => {
+ return {
+ response: parseResponse(
+ { inference_results: [doc._source[this.inferenceType]] },
+ doc._source[this.getInputField()],
+ this.queryResults
+ ),
+ rawResponse: doc._source[this.inferenceType],
+ inputText: doc._source[this.getInputField()],
+ };
+ });
+ }
+
+ protected getProcessors() {
+ return this.getBasicProcessors();
+ }
+
+ public setQueryText(text: string) {
+ this.queryText$.next(text);
+ }
+
+ public getQueryText$() {
+ return this.queryText$.asObservable();
+ }
+
+ public getQueryText() {
+ return this.queryText$.getValue();
+ }
+
+ public getInputComponent(): JSX.Element | null {
+ const placeholder = i18n.translate(
+ 'xpack.ml.trainedModels.testModelsFlyout.textExpansion.inputText',
+ {
+ defaultMessage: 'Enter a phrase to test',
+ }
+ );
+ return getTextExpansionInput(this, placeholder);
+ }
+
+ public getOutputComponent(): JSX.Element {
+ return getTextExpansionOutputComponent(this);
+ }
+}
+
+interface MlInferTrainedModelResponse {
+ inference_results: TextExpansionPredictedValue[];
+}
+
+interface TextExpansionPredictedValue {
+ predicted_value: Record;
+}
+
+function parseResponse(
+ resp: MlInferTrainedModelResponse,
+ text: string,
+ queryResults: Record
+): FormattedTextExpansionResponse {
+ const [{ predicted_value: predictedValue }] = resp.inference_results;
+
+ if (predictedValue === undefined) {
+ throw new Error(
+ i18n.translate('xpack.ml.trainedModels.testModelsFlyout.textExpansion.noPredictionError', {
+ defaultMessage: 'No results found',
+ })
+ );
+ }
+
+ // extract token and value pairs
+ const originalTokenWeights = Object.entries(predictedValue).map(([token, value]) => ({
+ token,
+ value,
+ }));
+ let score = 0;
+ const adjustedTokenWeights = originalTokenWeights.map(({ token, value }) => {
+ // if token is in query results, multiply value by query result value
+ const adjustedValue = value * (queryResults[token] ?? 0);
+ score += adjustedValue;
+ return {
+ token,
+ value: adjustedValue,
+ };
+ });
+
+ return {
+ text,
+ score,
+ originalTokenWeights,
+ adjustedTokenWeights,
+ };
+}
diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/models/text_expansion/text_expansion_input.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/models/text_expansion/text_expansion_input.tsx
new file mode 100644
index 0000000000000..3b1c4cc55a455
--- /dev/null
+++ b/x-pack/plugins/ml/public/application/model_management/test_models/models/text_expansion/text_expansion_input.tsx
@@ -0,0 +1,54 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React, { FC } from 'react';
+import useObservable from 'react-use/lib/useObservable';
+import { i18n } from '@kbn/i18n';
+
+import { EuiSpacer, EuiFieldText, EuiFormRow } from '@elastic/eui';
+
+import { TextInput } from '../text_input';
+import { TextExpansionInference } from './text_expansion_inference';
+import { INPUT_TYPE, RUNNING_STATE } from '../inference_base';
+
+const QueryInput: FC<{
+ inferrer: TextExpansionInference;
+}> = ({ inferrer }) => {
+ const questionText = useObservable(inferrer.getQueryText$(), inferrer.getQueryText());
+ const runningState = useObservable(inferrer.getRunningState$(), inferrer.getRunningState());
+
+ return (
+
+ {
+ inferrer.setQueryText(e.target.value);
+ }}
+ />
+
+ );
+};
+
+export const getTextExpansionInput = (inferrer: TextExpansionInference, placeholder?: string) => (
+ <>
+ {inferrer.getInputType() === INPUT_TYPE.TEXT ? (
+ <>
+
+
+ >
+ ) : null}
+
+
+ >
+);
diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/models/text_expansion/text_expansion_output.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/models/text_expansion/text_expansion_output.tsx
new file mode 100644
index 0000000000000..da048103ac1a3
--- /dev/null
+++ b/x-pack/plugins/ml/public/application/model_management/test_models/models/text_expansion/text_expansion_output.tsx
@@ -0,0 +1,194 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license 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, { type FC } from 'react';
+import useObservable from 'react-use/lib/useObservable';
+import {
+ EuiAccordion,
+ EuiHorizontalRule,
+ EuiIcon,
+ EuiInMemoryTable,
+ EuiSpacer,
+ EuiStat,
+ EuiTextColor,
+ EuiCallOut,
+} from '@elastic/eui';
+
+import { roundToDecimalPlace } from '@kbn/ml-number-utils';
+import { i18n } from '@kbn/i18n';
+import { FormattedMessage } from '@kbn/i18n-react';
+import { useCurrentThemeVars } from '../../../../contexts/kibana';
+import type { TextExpansionInference, FormattedTextExpansionResponse } from '.';
+
+const MAX_TOKENS = 5;
+
+export const getTextExpansionOutputComponent = (inferrer: TextExpansionInference) => (
+
+);
+
+export const TextExpansionOutput: FC<{
+ inferrer: TextExpansionInference;
+}> = ({ inferrer }) => {
+ const result = useObservable(inferrer.getInferenceResult$(), inferrer.getInferenceResult());
+ if (!result) {
+ return null;
+ }
+
+ return (
+ <>
+
+
+
+
+
+
+ {result
+ .sort((a, b) => b.response.score - a.response.score)
+ .map(({ response, inputText }) => (
+ <>
+
+
+ >
+ ))}
+ >
+ );
+};
+
+export const DocumentResult: FC<{
+ response: FormattedTextExpansionResponse;
+}> = ({ response }) => {
+ const tokens = response.adjustedTokenWeights
+ .filter(({ value }) => value > 0)
+ .sort((a, b) => b.value - a.value)
+ .slice(0, MAX_TOKENS)
+ .map(({ token, value }) => ({ token, value: roundToDecimalPlace(value, 3) }));
+
+ const statInfo = useResultStatFormatting(response);
+
+ return (
+ <>
+ {response.text !== undefined ? (
+ <>
+
+
+ {statInfo.icon !== null ? (
+
+ ) : null}
+ {statInfo.text}
+
+
+ }
+ />
+
+
+ {response.text}
+
+ >
+ ) : null}
+
+ {tokens.length > 0 ? (
+
+ <>
+
+
+
+
+
+
+ >
+
+ ) : null}
+ >
+ );
+};
+
+interface ResultStatFormatting {
+ color: string;
+ textColor: string;
+ text: string | null;
+ icon: string | null;
+}
+
+const useResultStatFormatting = (
+ response: FormattedTextExpansionResponse
+): ResultStatFormatting => {
+ const {
+ euiTheme: { euiColorMediumShade, euiTextSubduedColor, euiTextColor },
+ } = useCurrentThemeVars();
+
+ if (response.score >= 5) {
+ return {
+ color: 'success',
+ textColor: euiTextColor,
+ icon: 'check',
+ text: i18n.translate(
+ 'xpack.ml.trainedModels.testModelsFlyout.textExpansion.output.goodMatch',
+ { defaultMessage: 'Good match' }
+ ),
+ };
+ }
+
+ if (response.score > 0) {
+ return {
+ color: euiTextSubduedColor,
+ textColor: euiTextColor,
+ text: null,
+ icon: null,
+ };
+ }
+
+ return {
+ color: euiColorMediumShade,
+ textColor: euiColorMediumShade,
+ text: null,
+ icon: null,
+ };
+};
diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/selected_model.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/selected_model.tsx
index 06ff8128aa173..4747d9c149186 100644
--- a/x-pack/plugins/ml/public/application/model_management/test_models/selected_model.tsx
+++ b/x-pack/plugins/ml/public/application/model_management/test_models/selected_model.tsx
@@ -25,6 +25,7 @@ import { useMlApiContext } from '../../contexts/kibana';
import { InferenceInputForm } from './models/inference_input_form';
import { InferrerType } from './models';
import { INPUT_TYPE } from './models/inference_base';
+import { TextExpansionInference } from './models/text_expansion';
interface Props {
model: estypes.MlTrainedModelConfig;
@@ -42,22 +43,18 @@ export const SelectedModel: FC = ({ model, inputType, deploymentId }) =>
switch (taskType) {
case SUPPORTED_PYTORCH_TASKS.NER:
return new NerInference(trainedModels, model, inputType, deploymentId);
- break;
case SUPPORTED_PYTORCH_TASKS.TEXT_CLASSIFICATION:
return new TextClassificationInference(trainedModels, model, inputType, deploymentId);
- break;
case SUPPORTED_PYTORCH_TASKS.ZERO_SHOT_CLASSIFICATION:
return new ZeroShotClassificationInference(trainedModels, model, inputType, deploymentId);
- break;
case SUPPORTED_PYTORCH_TASKS.TEXT_EMBEDDING:
return new TextEmbeddingInference(trainedModels, model, inputType, deploymentId);
- break;
case SUPPORTED_PYTORCH_TASKS.FILL_MASK:
return new FillMaskInference(trainedModels, model, inputType, deploymentId);
- break;
case SUPPORTED_PYTORCH_TASKS.QUESTION_ANSWERING:
return new QuestionAnsweringInference(trainedModels, model, inputType, deploymentId);
- break;
+ case SUPPORTED_PYTORCH_TASKS.TEXT_EXPANSION:
+ return new TextExpansionInference(trainedModels, model, inputType, deploymentId);
default:
break;
}
diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/test_flyout.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/test_flyout.tsx
index d3fa13b233f5f..434621d11773b 100644
--- a/x-pack/plugins/ml/public/application/model_management/test_models/test_flyout.tsx
+++ b/x-pack/plugins/ml/public/application/model_management/test_models/test_flyout.tsx
@@ -5,7 +5,7 @@
* 2.0.
*/
-import React, { FC, useState } from 'react';
+import React, { FC, useState, useMemo } from 'react';
import { FormattedMessage } from '@kbn/i18n-react';
import {
@@ -21,6 +21,7 @@ import {
useEuiPaddingSize,
} from '@elastic/eui';
+import { SUPPORTED_PYTORCH_TASKS } from '@kbn/ml-trained-models-utils';
import { SelectedModel } from './selected_model';
import { INPUT_TYPE } from './models/inference_base';
import { type ModelItem } from '../models_list';
@@ -35,6 +36,12 @@ export const TestTrainedModelFlyout: FC = ({ model, onClose }) => {
const [inputType, setInputType] = useState(INPUT_TYPE.TEXT);
+ const onlyShowTab: INPUT_TYPE | undefined = useMemo(() => {
+ return (model.type ?? []).includes(SUPPORTED_PYTORCH_TASKS.TEXT_EXPANSION)
+ ? INPUT_TYPE.INDEX
+ : undefined;
+ }, [model]);
+
return (
<>
@@ -79,37 +86,41 @@ export const TestTrainedModelFlyout: FC = ({ model, onClose }) => {
>
) : null}
-
- setInputType(INPUT_TYPE.TEXT)}
- >
-
-
- setInputType(INPUT_TYPE.INDEX)}
- >
-
-
-
+ {onlyShowTab === undefined ? (
+ <>
+
+ setInputType(INPUT_TYPE.TEXT)}
+ >
+
+
+ setInputType(INPUT_TYPE.INDEX)}
+ >
+
+
+
-
+
+ >
+ ) : null}
diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/utils.ts b/x-pack/plugins/ml/public/application/model_management/test_models/utils.ts
index a9f3d895fca36..3adecb767f280 100644
--- a/x-pack/plugins/ml/public/application/model_management/test_models/utils.ts
+++ b/x-pack/plugins/ml/public/application/model_management/test_models/utils.ts
@@ -13,9 +13,7 @@ import {
} from '@kbn/ml-trained-models-utils';
import type { ModelItem } from '../models_list';
-const PYTORCH_TYPES = Object.values(SUPPORTED_PYTORCH_TASKS).filter(
- (taskType) => taskType !== SUPPORTED_PYTORCH_TASKS.TEXT_EXPANSION
-);
+const PYTORCH_TYPES = Object.values(SUPPORTED_PYTORCH_TASKS);
export function isTestable(modelItem: ModelItem, checkForState = false) {
if (
From 07ad32ff9e4a87f29517ab2922213aa2e0f8e42c Mon Sep 17 00:00:00 2001
From: Carlos Crespo
Date: Fri, 11 Aug 2023 16:25:52 +0200
Subject: [PATCH 19/46] [Infra UI] Smooth out spikey charts (#163608)
## Summary
This PR smooths out spikey charts.
- Dotted line caused by period set in metricbeat to be greater than the
date histogram interval determined by lens
- Gap caused by a host that stopped shipping metrics
- Before this change
_The spikes are a result of the `period` set in metricbeat/integration
being greater than the date histogram interval that Lens automatically
sets according to the date range passed to the charts._
### How to test this PR
- Setup a local Kibana instance
- Configure `metricbeat.yml`, enabling the `system` module and setting
the `period` with `1m`. Start a local metricbeat instance.
- Navigate to `Infrastructure` > `Hosts`
- Verify if when date picker is set to < 1h hour interval the graphs
will show the dotted lines
- With 1h+ interval, there shouldn't be dotted lines, *unless*
metricbeat is stopped and restarted after a few minutes
- Configure `metricbeat.yml`, enabling the `system` module and setting
the `period` with `10s`. Restart the metricbeat instance.
- Verify if the charts maintain the existing behaviour
---------
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
---
.../public/common/visualizations/constants.ts | 1 +
.../lens/visualization_types/index.ts | 2 +-
.../lens/visualization_types/xy_chart.ts | 48 +++++--
.../asset_details/tabs/common/popover.tsx | 45 ++++++
.../asset_details/tabs/overview/alerts.tsx | 24 +---
.../metadata_summary/metadata_header.tsx | 73 ++++------
.../tabs/overview/metrics/metrics_grid.tsx | 43 ++++--
.../infra/public/components/lens/index.tsx | 1 +
.../host_metrics_docs_link.tsx | 35 +++--
.../host_metrics_explanation_content.tsx | 30 ++++
.../infra/public/hooks/use_lens_attributes.ts | 19 ++-
.../hosts/components/kpis/kpi_grid.tsx | 2 +-
.../hosts/components/table/column_header.tsx | 129 ++++--------------
.../hosts/components/table/popover.tsx | 101 ++++++++++++++
.../components/tabs/metrics/metric_chart.tsx | 10 +-
.../components/tabs/metrics/metrics_grid.tsx | 32 ++++-
.../metrics/hosts/hooks/use_hosts_table.tsx | 15 +-
17 files changed, 384 insertions(+), 226 deletions(-)
create mode 100644 x-pack/plugins/infra/public/components/asset_details/tabs/common/popover.tsx
create mode 100644 x-pack/plugins/infra/public/components/lens/metric_explanation/host_metrics_explanation_content.tsx
create mode 100644 x-pack/plugins/infra/public/pages/metrics/hosts/components/table/popover.tsx
diff --git a/x-pack/plugins/infra/public/common/visualizations/constants.ts b/x-pack/plugins/infra/public/common/visualizations/constants.ts
index 09583ef7ae3ed..1ef3484843507 100644
--- a/x-pack/plugins/infra/public/common/visualizations/constants.ts
+++ b/x-pack/plugins/infra/public/common/visualizations/constants.ts
@@ -42,3 +42,4 @@ export const hostLensFormulas = {
};
export const HOST_METRICS_DOC_HREF = 'https://ela.st/docs-infra-host-metrics';
+export const HOST_METRICS_DOTTED_LINES_DOC_HREF = 'https://ela.st/docs-infra-why-dotted';
diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/visualization_types/index.ts b/x-pack/plugins/infra/public/common/visualizations/lens/visualization_types/index.ts
index b7112840436de..0bfbd11233b4d 100644
--- a/x-pack/plugins/infra/public/common/visualizations/lens/visualization_types/index.ts
+++ b/x-pack/plugins/infra/public/common/visualizations/lens/visualization_types/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-export { XYChart } from './xy_chart';
+export { XYChart, type XYVisualOptions } from './xy_chart';
export { MetricChart } from './metric_chart';
export * from './layers';
diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/visualization_types/xy_chart.ts b/x-pack/plugins/infra/public/common/visualizations/lens/visualization_types/xy_chart.ts
index dc6f93683f795..f891ebfe02a3c 100644
--- a/x-pack/plugins/infra/public/common/visualizations/lens/visualization_types/xy_chart.ts
+++ b/x-pack/plugins/infra/public/common/visualizations/lens/visualization_types/xy_chart.ts
@@ -5,7 +5,12 @@
* 2.0.
*/
-import type { FormBasedPersistedState, XYLayerConfig, XYState } from '@kbn/lens-plugin/public';
+import type {
+ FormBasedPersistedState,
+ XYArgs,
+ XYLayerConfig,
+ XYState,
+} from '@kbn/lens-plugin/public';
import type { DataView } from '@kbn/data-views-plugin/public';
import type { SavedObjectReference } from '@kbn/core/server';
import { DEFAULT_LAYER_ID } from '../utils';
@@ -13,8 +18,20 @@ import type { Chart, ChartConfig, ChartLayer } from '../../types';
const ACCESSOR = 'formula_accessor';
+// This needs be more specialized by `preferredSeriesType`
+export interface XYVisualOptions {
+ lineInterpolation?: XYArgs['curveType'];
+ missingValues?: XYArgs['fittingFunction'];
+ endValues?: XYArgs['endValue'];
+ showDottedLine?: boolean;
+}
+
export class XYChart implements Chart {
- constructor(private chartConfig: ChartConfig>>) {}
+ constructor(
+ private chartConfig: ChartConfig>> & {
+ visualOptions?: XYVisualOptions;
+ }
+ ) {}
getVisualizationType(): string {
return 'lnsXY';
@@ -32,15 +49,21 @@ export class XYChart implements Chart {
}
getVisualizationState(): XYState {
- return getXYVisualizationState({
- layers: [
- ...this.chartConfig.layers.map((layerItem, index) => {
- const layerId = `${DEFAULT_LAYER_ID}_${index}`;
- const accessorId = `${ACCESSOR}_${index}`;
- return layerItem.getLayerConfig(layerId, accessorId);
- }),
- ],
- });
+ return {
+ ...getXYVisualizationState({
+ layers: [
+ ...this.chartConfig.layers.map((layerItem, index) => {
+ const layerId = `${DEFAULT_LAYER_ID}_${index}`;
+ const accessorId = `${ACCESSOR}_${index}`;
+ return layerItem.getLayerConfig(layerId, accessorId);
+ }),
+ ],
+ }),
+ fittingFunction: this.chartConfig.visualOptions?.missingValues ?? 'Zero',
+ endValue: this.chartConfig.visualOptions?.endValues,
+ curveType: this.chartConfig.visualOptions?.lineInterpolation ?? 'LINEAR',
+ emphasizeFitting: !this.chartConfig.visualOptions?.showDottedLine,
+ };
}
getReferences(): SavedObjectReference[] {
@@ -68,8 +91,6 @@ export const getXYVisualizationState = (
showSingleSeries: false,
},
valueLabels: 'show',
- fittingFunction: 'Zero',
- curveType: 'LINEAR',
yLeftScale: 'linear',
axisTitlesVisibilitySettings: {
x: false,
@@ -93,7 +114,6 @@ export const getXYVisualizationState = (
},
preferredSeriesType: 'line',
valuesInLegend: false,
- emphasizeFitting: true,
hideEndzones: true,
...custom,
});
diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/common/popover.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/common/popover.tsx
new file mode 100644
index 0000000000000..263c61d46230b
--- /dev/null
+++ b/x-pack/plugins/infra/public/components/asset_details/tabs/common/popover.tsx
@@ -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 { EuiPopover, EuiIcon, IconType } from '@elastic/eui';
+import { css } from '@emotion/react';
+import React from 'react';
+import { useBoolean } from '../../../../hooks/use_boolean';
+
+export const Popover = ({
+ children,
+ icon,
+ ...props
+}: {
+ children: React.ReactNode;
+ icon: IconType;
+ 'data-test-subj'?: string;
+}) => {
+ const [isPopoverOpen, { off: closePopover, toggle: togglePopover }] = useBoolean(false);
+ return (
+
+ }
+ isOpen={isPopoverOpen}
+ offset={10}
+ closePopover={closePopover}
+ repositionOnScroll
+ anchorPosition="upCenter"
+ >
+ {children}
+
+ );
+};
diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/alerts.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/alerts.tsx
index 2edac4abbbdda..88c62cfa027c0 100644
--- a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/alerts.tsx
+++ b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/alerts.tsx
@@ -6,7 +6,7 @@
*/
import React, { useMemo } from 'react';
-import { EuiFlexGroup, EuiFlexItem, EuiTitle, EuiPopover, EuiIcon, EuiSpacer } from '@elastic/eui';
+import { EuiFlexGroup, EuiFlexItem, EuiTitle, EuiSpacer } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
import { useSummaryTimeRange } from '@kbn/observability-plugin/public';
import type { TimeRange } from '@kbn/es-query';
@@ -16,13 +16,13 @@ import type { InventoryItemType } from '../../../../../common/inventory_models/t
import { findInventoryFields } from '../../../../../common/inventory_models';
import { createAlertsEsQuery } from '../../../../common/alerts/create_alerts_es_query';
import { infraAlertFeatureIds } from '../../../../pages/metrics/hosts/components/tabs/config';
-
import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana';
import { LinkToAlertsRule } from '../../links/link_to_alerts';
import { LinkToAlertsPage } from '../../links/link_to_alerts_page';
import { AlertFlyout } from '../../../../alerting/inventory/components/alert_flyout';
import { useBoolean } from '../../../../hooks/use_boolean';
import { ALERT_STATUS_ALL } from '../../../../common/alerts/constants';
+import { Popover } from '../common/popover';
export const AlertsSummaryContent = ({
assetName,
@@ -107,10 +107,8 @@ const MemoAlertSummaryWidget = React.memo(
);
const AlertsSectionTitle = () => {
- const [isPopoverOpen, { off: closePopover, toggle: togglePopover }] = useBoolean(false);
-
return (
-
+
@@ -122,21 +120,9 @@ const AlertsSectionTitle = () => {
-
- }
- isOpen={isPopoverOpen}
- closePopover={closePopover}
- repositionOnScroll
- anchorPosition="upCenter"
- >
+
-
+
);
diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metadata_summary/metadata_header.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metadata_summary/metadata_header.tsx
index b6b2d97a9bc09..e19d261094d8f 100644
--- a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metadata_summary/metadata_header.tsx
+++ b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metadata_summary/metadata_header.tsx
@@ -5,20 +5,14 @@
* 2.0.
*/
-import {
- EuiDescriptionListTitle,
- EuiFlexGroup,
- EuiFlexItem,
- EuiIcon,
- EuiLink,
- EuiPopover,
-} from '@elastic/eui';
+import { EuiDescriptionListTitle, EuiFlexGroup, EuiFlexItem, EuiLink } from '@elastic/eui';
import { css } from '@emotion/react';
import { i18n } from '@kbn/i18n';
import React from 'react';
import { FormattedMessage } from '@kbn/i18n-react';
-import { useBoolean } from '../../../../../hooks/use_boolean';
+import { EuiText } from '@elastic/eui';
import type { MetadataData } from './metadata_summary_list';
+import { Popover } from '../../common/popover';
const columnTitles = {
hostIp: i18n.translate('xpack.infra.assetDetailsEmbeddable.overview.metadataHostIpHeading', {
@@ -51,52 +45,43 @@ interface MetadataSummaryProps {
}
export const MetadataHeader = ({ metadataValue }: MetadataSummaryProps) => {
- const [isPopoverOpen, { off: closePopover, toggle: togglePopover }] = useBoolean(false);
-
return (
-
+
{columnTitles[metadataValue.field as MetadataFields]}
-
- }
- isOpen={isPopoverOpen}
- closePopover={closePopover}
- repositionOnScroll
- anchorPosition="upCenter"
+
- {metadataValue.tooltipLink ? (
-
- {metadataValue.tooltipFieldLabel}
-
- ),
- }}
- />
- ) : (
- {metadataValue.tooltipFieldLabel}
- )}
-
+
+ {metadataValue.tooltipLink ? (
+
+ {metadataValue.tooltipFieldLabel}
+
+ ),
+ }}
+ />
+ ) : (
+ {metadataValue.tooltipFieldLabel}
+ )}
+
+
diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metrics/metrics_grid.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metrics/metrics_grid.tsx
index 5f0bce1b54856..02fb533987d05 100644
--- a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metrics/metrics_grid.tsx
+++ b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metrics/metrics_grid.tsx
@@ -11,15 +11,18 @@ import { i18n } from '@kbn/i18n';
import type { DataView } from '@kbn/data-views-plugin/public';
import type { TimeRange } from '@kbn/es-query';
import { FormattedMessage } from '@kbn/i18n-react';
+import { HostMetricsExplanationContent } from '../../../../lens/metric_explanation/host_metrics_explanation_content';
import { buildCombinedHostsFilter } from '../../../../../utils/filters/build';
import type { Layer } from '../../../../../hooks/use_lens_attributes';
-import { HostMetricsDocsLink, LensChart, type LensChartProps } from '../../../../lens';
+import { LensChart, type LensChartProps } from '../../../../lens';
import {
type FormulaConfig,
hostLensFormulas,
type XYLayerOptions,
+ type XYVisualOptions,
} from '../../../../../common/visualizations';
import { METRIC_CHART_HEIGHT } from '../../../constants';
+import { Popover } from '../../common/popover';
type DataViewOrigin = 'logs' | 'metrics';
interface MetricChartConfig extends Pick {
@@ -44,6 +47,11 @@ const LEGEND_SETTINGS: Pick['overrides'] = {
},
};
+const XY_VISUAL_OPTIONS: XYVisualOptions = {
+ showDottedLine: true,
+ missingValues: 'Linear',
+};
+
const CHARTS_IN_ORDER: Array<
Pick & {
dataViewOrigin: DataViewOrigin;
@@ -303,17 +311,9 @@ export const MetricsGrid = React.memo(
return (
-
-
-
-
-
+
-
{
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/x-pack/plugins/infra/public/components/lens/index.tsx b/x-pack/plugins/infra/public/components/lens/index.tsx
index 93d050209a219..ae05bd8e82fe4 100644
--- a/x-pack/plugins/infra/public/components/lens/index.tsx
+++ b/x-pack/plugins/infra/public/components/lens/index.tsx
@@ -9,3 +9,4 @@ export { LensChart, type LensChartProps } from './lens_chart';
export { ChartPlaceholder } from './chart_placeholder';
export { TooltipContent } from './metric_explanation/tooltip_content';
export { HostMetricsDocsLink } from './metric_explanation/host_metrics_docs_link';
+export { HostMetricsExplanationContent } from './metric_explanation/host_metrics_explanation_content';
diff --git a/x-pack/plugins/infra/public/components/lens/metric_explanation/host_metrics_docs_link.tsx b/x-pack/plugins/infra/public/components/lens/metric_explanation/host_metrics_docs_link.tsx
index 347c2174b9077..992c899928e69 100644
--- a/x-pack/plugins/infra/public/components/lens/metric_explanation/host_metrics_docs_link.tsx
+++ b/x-pack/plugins/infra/public/components/lens/metric_explanation/host_metrics_docs_link.tsx
@@ -7,21 +7,40 @@
import React from 'react';
import { EuiLink, EuiText } from '@elastic/eui';
-import { FormattedMessage } from '@kbn/i18n-react';
-import { HOST_METRICS_DOC_HREF } from '../../../common/visualizations/constants';
+import { i18n } from '@kbn/i18n';
+import {
+ HOST_METRICS_DOC_HREF,
+ HOST_METRICS_DOTTED_LINES_DOC_HREF,
+} from '../../../common/visualizations/constants';
-export const HostMetricsDocsLink = () => {
+const DocLinks = {
+ metrics: {
+ href: HOST_METRICS_DOC_HREF,
+ label: i18n.translate('xpack.infra.hostsViewPage.tooltip.whatAreTheseMetricsLink', {
+ defaultMessage: 'What are these metrics?',
+ }),
+ },
+ dottedLines: {
+ href: HOST_METRICS_DOTTED_LINES_DOC_HREF,
+ label: i18n.translate('xpack.infra.hostsViewPage.tooltip.whyAmISeeingDottedLines', {
+ defaultMessage: 'Why am I seeing dotted lines?',
+ }),
+ },
+};
+
+interface Props {
+ type: keyof typeof DocLinks;
+}
+
+export const HostMetricsDocsLink = ({ type }: Props) => {
return (
-
+ {DocLinks[type].label}
);
diff --git a/x-pack/plugins/infra/public/components/lens/metric_explanation/host_metrics_explanation_content.tsx b/x-pack/plugins/infra/public/components/lens/metric_explanation/host_metrics_explanation_content.tsx
new file mode 100644
index 0000000000000..63a9f8160fe43
--- /dev/null
+++ b/x-pack/plugins/infra/public/components/lens/metric_explanation/host_metrics_explanation_content.tsx
@@ -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 React from 'react';
+import { EuiText } from '@elastic/eui';
+import { FormattedMessage } from '@kbn/i18n-react';
+import { HostMetricsDocsLink } from './host_metrics_docs_link';
+
+export const HostMetricsExplanationContent = () => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/x-pack/plugins/infra/public/hooks/use_lens_attributes.ts b/x-pack/plugins/infra/public/hooks/use_lens_attributes.ts
index 6f3ae0cf37aff..5f562d2b8c5e1 100644
--- a/x-pack/plugins/infra/public/hooks/use_lens_attributes.ts
+++ b/x-pack/plugins/infra/public/hooks/use_lens_attributes.ts
@@ -19,32 +19,35 @@ import {
type MetricLayerOptions,
type FormulaConfig,
type LensAttributes,
+ type XYVisualOptions,
+ type Chart,
LensAttributesBuilder,
XYDataLayer,
MetricLayer,
XYChart,
MetricChart,
XYReferenceLinesLayer,
- Chart,
LensVisualizationState,
} from '../common/visualizations';
import { useLazyRef } from './use_lazy_ref';
-type Options = XYLayerOptions | MetricLayerOptions;
+type LayerOptions = XYLayerOptions | MetricLayerOptions;
type ChartType = 'lnsXY' | 'lnsMetric';
+type VisualOptions = XYVisualOptions;
export type LayerType = Exclude;
+
export interface Layer<
- TOptions extends Options,
+ TLayerOptions extends LayerOptions,
TFormulaConfig extends FormulaConfig | FormulaConfig[],
TLayerType extends LayerType = LayerType
> {
layerType: TLayerType;
data: TFormulaConfig;
- options?: TOptions;
+ options?: TLayerOptions;
}
interface UseLensAttributesBaseParams<
- TOptions extends Options,
+ TOptions extends LayerOptions,
TLayers extends Array> | Layer
> {
dataView?: DataView;
@@ -58,6 +61,7 @@ interface UseLensAttributesXYChartParams
Array>
> {
visualizationType: 'lnsXY';
+ visualOptions?: XYVisualOptions;
}
interface UseLensAttributesMetricChartParams
@@ -77,6 +81,7 @@ export const useLensAttributes = ({
layers,
title,
visualizationType,
+ ...extraParams
}: UseLensAttributesParams) => {
const {
services: { lens },
@@ -97,6 +102,7 @@ export const useLensAttributes = ({
layers,
title,
visualizationType,
+ ...extraParams,
}),
});
@@ -184,12 +190,14 @@ const chartFactory = <
layers,
title,
visualizationType,
+ visualOptions,
}: {
dataView: DataView;
formulaAPI: FormulaPublicApi;
visualizationType: ChartType;
layers: TLayers;
title?: string;
+ visualOptions?: VisualOptions;
}): Chart => {
switch (visualizationType) {
case 'lnsXY':
@@ -221,6 +229,7 @@ const chartFactory = <
});
}),
title,
+ visualOptions,
});
case 'lnsMetric':
diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/kpis/kpi_grid.tsx b/x-pack/plugins/infra/public/pages/metrics/hosts/components/kpis/kpi_grid.tsx
index d7720b820cf64..94a7130262931 100644
--- a/x-pack/plugins/infra/public/pages/metrics/hosts/components/kpis/kpi_grid.tsx
+++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/kpis/kpi_grid.tsx
@@ -20,7 +20,7 @@ import {
export const KPIGrid = () => {
return (
-
+
diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/table/column_header.tsx b/x-pack/plugins/infra/public/pages/metrics/hosts/components/table/column_header.tsx
index e865fad082731..04f5ae78ded54 100644
--- a/x-pack/plugins/infra/public/pages/metrics/hosts/components/table/column_header.tsx
+++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/table/column_header.tsx
@@ -4,115 +4,38 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
-import React, { useState, useRef, useCallback, useLayoutEffect } from 'react';
-import { EuiPopover, EuiIcon, EuiFlexGroup, useEuiTheme } from '@elastic/eui';
+import React from 'react';
+import { EuiFlexGroup } from '@elastic/eui';
import { css } from '@emotion/react';
-import { APP_WRAPPER_CLASS } from '@kbn/core/public';
import { TooltipContent } from '../../../../../components/lens/metric_explanation/tooltip_content';
-import { useBoolean } from '../../../../../hooks/use_boolean';
+import { Popover } from './popover';
interface Props {
label: string;
toolTip?: string;
formula?: string;
- popoverContainerRef?: React.RefObject;
}
-const SEARCH_BAR_OFFSET = 250;
-const ANCHOR_SPACING = 10;
-
-const findTableParentElement = (element: HTMLElement | null): HTMLElement | null => {
- let currentElement = element;
-
- while (currentElement && currentElement.className !== APP_WRAPPER_CLASS) {
- currentElement = currentElement.parentElement;
- }
- return currentElement;
-};
-
-export const ColumnHeader = React.memo(
- ({ label, toolTip, formula, popoverContainerRef }: Props) => {
- const buttonRef = useRef(null);
- const containerRef = useRef(null);
- const [offset, setOffset] = useState(0);
- const [isPopoverOpen, { off: closePopover, toggle: togglePopover }] = useBoolean(false);
-
- const { euiTheme } = useEuiTheme();
-
- useLayoutEffect(() => {
- containerRef.current = findTableParentElement(buttonRef.current);
- }, []);
-
- const calculateHeaderOffset = () => {
- const { top: containerTop = 0 } = containerRef.current?.getBoundingClientRect() ?? {};
- const headerOffset = containerTop + window.scrollY;
-
- return headerOffset;
- };
-
- const onButtonClick = useCallback(
- (e: React.MouseEvent) => {
- e.preventDefault();
- e.stopPropagation();
- const { top: buttonTop = 0 } = buttonRef.current?.getBoundingClientRect() ?? {};
-
- // gets the actual page position, discounting anything above the page content (e.g: header, dismissible banner)
- const headerOffset = calculateHeaderOffset();
- // determines if the scroll position is close to overlapping with the button
- const scrollPosition = buttonTop - headerOffset - SEARCH_BAR_OFFSET;
- const isAboveElement = scrollPosition <= 0;
-
- // offset to be taken into account when positioning the popover
- setOffset(headerOffset * (isAboveElement ? -1 : 1) + ANCHOR_SPACING);
- togglePopover();
- },
- [togglePopover]
- );
-
- return (
-
-
- {label}
-
-
- {toolTip && (
- (buttonRef.current = el)}
- button={
-
- }
- insert={
- popoverContainerRef && popoverContainerRef?.current
- ? {
- sibling: popoverContainerRef.current,
- position: 'after',
- }
- : undefined
- }
- offset={offset}
- anchorPosition={offset <= 0 ? 'downCenter' : 'upCenter'}
- isOpen={isPopoverOpen}
- closePopover={closePopover}
- zIndex={Number(euiTheme.levels.header) - 1}
- panelStyle={{ maxWidth: 350 }}
- >
-
-
- )}
-
- );
- }
-);
+export const ColumnHeader = React.memo(({ label, toolTip, formula }: Props) => {
+ return (
+
+
+ {label}
+
+
+ {toolTip && (
+
+
+
+ )}
+
+ );
+});
diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/table/popover.tsx b/x-pack/plugins/infra/public/pages/metrics/hosts/components/table/popover.tsx
new file mode 100644
index 0000000000000..678d6b4d53fce
--- /dev/null
+++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/table/popover.tsx
@@ -0,0 +1,101 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React, { useCallback, useLayoutEffect, useRef, useState } from 'react';
+import { EuiPopover, EuiIcon, useEuiTheme } from '@elastic/eui';
+import { css } from '@emotion/react';
+import { APP_WRAPPER_CLASS } from '@kbn/core/public';
+import { useBoolean } from '../../../../../hooks/use_boolean';
+import { useHostsTableContext } from '../../hooks/use_hosts_table';
+
+const SEARCH_BAR_OFFSET = 250;
+const ANCHOR_SPACING = 10;
+
+const findTableParentElement = (element: HTMLElement | null): HTMLElement | null => {
+ let currentElement = element;
+
+ while (currentElement && currentElement.className !== APP_WRAPPER_CLASS) {
+ currentElement = currentElement.parentElement;
+ }
+ return currentElement;
+};
+
+export const Popover = ({ children }: { children: React.ReactNode }) => {
+ const buttonRef = useRef(null);
+ const containerRef = useRef(null);
+ const [offset, setOffset] = useState(0);
+ const [isPopoverOpen, { off: closePopover, toggle: togglePopover }] = useBoolean(false);
+ const {
+ refs: { popoverContainerRef },
+ } = useHostsTableContext();
+
+ const { euiTheme } = useEuiTheme();
+
+ useLayoutEffect(() => {
+ containerRef.current = findTableParentElement(buttonRef.current);
+ }, []);
+
+ const calculateHeaderOffset = () => {
+ const { top: containerTop = 0 } = containerRef.current?.getBoundingClientRect() ?? {};
+ const headerOffset = containerTop + window.scrollY;
+
+ return headerOffset;
+ };
+
+ const onButtonClick = useCallback(
+ (e: React.MouseEvent) => {
+ e.preventDefault();
+ e.stopPropagation();
+ const { top: buttonTop = 0 } = buttonRef.current?.getBoundingClientRect() ?? {};
+
+ // gets the actual page position, discounting anything above the page content (e.g: header, dismissible banner)
+ const headerOffset = calculateHeaderOffset();
+ // determines if the scroll position is close to overlapping with the button
+ const scrollPosition = buttonTop - headerOffset - SEARCH_BAR_OFFSET;
+ const isAboveElement = scrollPosition <= 0;
+
+ // offset to be taken into account when positioning the popover
+ setOffset(headerOffset * (isAboveElement ? -1 : 1) + ANCHOR_SPACING);
+ togglePopover();
+ },
+ [togglePopover]
+ );
+
+ return (
+ (buttonRef.current = el)}
+ button={
+
+ }
+ isOpen={isPopoverOpen}
+ closePopover={closePopover}
+ offset={offset}
+ anchorPosition={offset <= 0 ? 'downCenter' : 'upCenter'}
+ insert={
+ popoverContainerRef && popoverContainerRef?.current
+ ? {
+ sibling: popoverContainerRef.current,
+ position: 'after',
+ }
+ : undefined
+ }
+ zIndex={Number(euiTheme.levels.header) - 1}
+ panelStyle={{ maxWidth: 350 }}
+ >
+ {children}
+
+ );
+};
diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/metrics/metric_chart.tsx b/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/metrics/metric_chart.tsx
index c0f05c55d1e9e..e15f212a23e18 100644
--- a/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/metrics/metric_chart.tsx
+++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/metrics/metric_chart.tsx
@@ -10,7 +10,11 @@ import { LensChart } from '../../../../../../components/lens';
import type { Layer } from '../../../../../../hooks/use_lens_attributes';
import { useMetricsDataViewContext } from '../../../hooks/use_data_view';
import { useUnifiedSearchContext } from '../../../hooks/use_unified_search';
-import type { FormulaConfig, XYLayerOptions } from '../../../../../../common/visualizations';
+import type {
+ FormulaConfig,
+ XYLayerOptions,
+ XYVisualOptions,
+} from '../../../../../../common/visualizations';
import { useHostsViewContext } from '../../../hooks/use_hosts_view';
import { buildCombinedHostsFilter } from '../../../../../../utils/filters/build';
import { useHostsTableContext } from '../../../hooks/use_hosts_table';
@@ -20,9 +24,10 @@ import { METRIC_CHART_HEIGHT } from '../../../constants';
export interface MetricChartProps extends Pick {
title: string;
layers: Array>;
+ visualOptions?: XYVisualOptions;
}
-export const MetricChart = ({ id, title, layers, overrides }: MetricChartProps) => {
+export const MetricChart = ({ id, title, layers, visualOptions, overrides }: MetricChartProps) => {
const { searchCriteria } = useUnifiedSearchContext();
const { dataView } = useMetricsDataViewContext();
const { requestTs, loading } = useHostsViewContext();
@@ -58,6 +63,7 @@ export const MetricChart = ({ id, title, layers, overrides }: MetricChartProps)
dateRange={afterLoadedState.dateRange}
height={METRIC_CHART_HEIGHT}
layers={layers}
+ visualOptions={visualOptions}
lastReloadRequestTime={afterLoadedState.lastReloadRequestTime}
loading={loading}
filters={filters}
diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/metrics/metrics_grid.tsx b/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/metrics/metrics_grid.tsx
index 7dfa9b63b87b2..30df5d6a66c62 100644
--- a/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/metrics/metrics_grid.tsx
+++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/metrics/metrics_grid.tsx
@@ -6,12 +6,18 @@
*/
import React from 'react';
-import { EuiFlexGrid, EuiFlexItem } from '@elastic/eui';
+import { EuiFlexGrid, EuiFlexItem, EuiText } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import { EuiSpacer } from '@elastic/eui';
-import { hostLensFormulas, type XYLayerOptions } from '../../../../../../common/visualizations';
-import { HostMetricsDocsLink } from '../../../../../../components/lens';
+import { EuiFlexGroup } from '@elastic/eui';
+import {
+ hostLensFormulas,
+ type XYVisualOptions,
+ type XYLayerOptions,
+} from '../../../../../../common/visualizations';
+import { HostMetricsExplanationContent } from '../../../../../../components/lens';
import { MetricChart, MetricChartProps } from './metric_chart';
+import { Popover } from '../../table/popover';
const DEFAULT_BREAKDOWN_SIZE = 20;
const XY_LAYER_OPTIONS: XYLayerOptions = {
@@ -21,6 +27,11 @@ const XY_LAYER_OPTIONS: XYLayerOptions = {
},
};
+const XY_VISUAL_OPTIONS: XYVisualOptions = {
+ showDottedLine: true,
+ missingValues: 'Linear',
+};
+
const PERCENT_LEFT_AXIS: Pick['overrides'] = {
axisLeft: {
domain: {
@@ -28,6 +39,7 @@ const PERCENT_LEFT_AXIS: Pick['overrides'] = {
max: 1,
},
},
+ settings: {},
};
const CHARTS_IN_ORDER: MetricChartProps[] = [
@@ -210,12 +222,22 @@ const CHARTS_IN_ORDER: MetricChartProps[] = [
export const MetricsGrid = React.memo(() => {
return (
<>
-
+
+
+ Learn more about metrics
+
+
+
+
+
+
+
+
{CHARTS_IN_ORDER.map((chartProp, index) => (
-
+
))}
diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx b/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx
index 19c0bcdaa1f47..6052c1221fe69 100644
--- a/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx
+++ b/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx
@@ -256,7 +256,6 @@ export const useHostsTable = () => {
label={TABLE_COLUMN_LABEL.cpuUsage}
toolTip={TOOLTIP.cpuUsage}
formula={hostLensFormulas.cpuUsage.value}
- popoverContainerRef={popoverContainerRef}
/>
),
field: 'cpu',
@@ -271,7 +270,6 @@ export const useHostsTable = () => {
label={TABLE_COLUMN_LABEL.normalizedLoad1m}
toolTip={TOOLTIP.normalizedLoad1m}
formula={hostLensFormulas.normalizedLoad1m.value}
- popoverContainerRef={popoverContainerRef}
/>
),
field: 'normalizedLoad1m',
@@ -286,7 +284,6 @@ export const useHostsTable = () => {
label={TABLE_COLUMN_LABEL.memoryUsage}
toolTip={TOOLTIP.memoryUsage}
formula={hostLensFormulas.memoryUsage.value}
- popoverContainerRef={popoverContainerRef}
/>
),
field: 'memory',
@@ -301,7 +298,6 @@ export const useHostsTable = () => {
label={TABLE_COLUMN_LABEL.memoryFree}
toolTip={TOOLTIP.memoryFree}
formula={hostLensFormulas.memoryFree.value}
- popoverContainerRef={popoverContainerRef}
/>
),
field: 'memoryFree',
@@ -316,7 +312,6 @@ export const useHostsTable = () => {
label={TABLE_COLUMN_LABEL.diskSpaceUsage}
toolTip={TOOLTIP.diskSpaceUsage}
formula={hostLensFormulas.diskSpaceUsage.value}
- popoverContainerRef={popoverContainerRef}
/>
),
field: 'diskSpaceUsage',
@@ -331,7 +326,6 @@ export const useHostsTable = () => {
label={TABLE_COLUMN_LABEL.rx}
toolTip={TOOLTIP.rx}
formula={hostLensFormulas.rx.value}
- popoverContainerRef={popoverContainerRef}
/>
),
field: 'rx',
@@ -347,7 +341,6 @@ export const useHostsTable = () => {
label={TABLE_COLUMN_LABEL.tx}
toolTip={TOOLTIP.tx}
formula={hostLensFormulas.tx.value}
- popoverContainerRef={popoverContainerRef}
/>
),
field: 'tx',
@@ -358,13 +351,7 @@ export const useHostsTable = () => {
width: '120px',
},
],
- [
- hostFlyoutState?.itemId,
- reportHostEntryClick,
- searchCriteria.dateRange,
- setHostFlyoutState,
- popoverContainerRef,
- ]
+ [hostFlyoutState?.itemId, reportHostEntryClick, searchCriteria.dateRange, setHostFlyoutState]
);
const selection: EuiTableSelectionType = {
From 169d197d1a219ced2ca95a0de639f3b6d465b2a5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gerg=C5=91=20=C3=81brah=C3=A1m?=
Date: Fri, 11 Aug 2023 16:29:28 +0200
Subject: [PATCH 20/46] [Security Solution] Allow users to sort Endpoint list
by every column (#162142)
## Summary
This PR adds sorting to Endpoint list, it works with all columns.
Details:
- by default it sorts as before: by enrollment date descending
- the sorting is persisted in the URL
- the `GET api/endpoint/metadata` route now accepts `sortField` and
`sortDirection` query params, but is quite strict: it only accepts the
fields shown in the table for sorting, otherwise returns `400`. reason:
feels better to fail on schema validation than allowing any string to go
through and returning an internal error
- the API expects the `sortField` to harmonise with the returned
`HostInfoInterface` type, so looking from the outside it is consistent.
internally, it maps the incoming `sortField` to the internal structure
(e.g. `metadata.host.ip` -> `united.endpoint.host.ip`)
- ~**update:** moves `last_checkin` to be a runtime field, so it can be
used for sorting~
- ~**update:** adds `Enrolled at` as a column to the table, and
`enrolled_at` as a new field in the response~
Todo:
- [x] fix typescript type errors
- [x] add tests
![image](https://github-production-user-asset-6210df.s3.amazonaws.com/39014407/254272727-fe1d69d6-b006-4ad2-9649-966d4131ca9e.png)
### Checklist
Delete any items that are not applicable to this PR.
- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
---------
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
---
.../endpoint/metadata/list_metadata_route.ts | 16 +-
.../common/endpoint/constants.ts | 3 +
.../common/endpoint/types/index.ts | 35 ++--
.../cypress/e2e/mocked_data/endpoints.cy.ts | 69 +++++++-
.../pages/endpoint_hosts/store/builders.ts | 6 +
.../pages/endpoint_hosts/store/index.test.ts | 6 +
.../pages/endpoint_hosts/store/middleware.ts | 9 +-
.../store/mock_endpoint_result_list.ts | 6 +
.../pages/endpoint_hosts/store/reducer.ts | 4 +-
.../pages/endpoint_hosts/store/selectors.ts | 20 ++-
.../management/pages/endpoint_hosts/types.ts | 9 +
.../pages/endpoint_hosts/view/index.tsx | 157 ++++++++++++------
.../endpoint/routes/metadata/handlers.ts | 10 +-
.../endpoint/routes/metadata/metadata.test.ts | 4 +
.../routes/metadata/query_builders.test.ts | 84 ++++++++--
.../routes/metadata/query_builders.ts | 44 ++++-
.../metadata/endpoint_metadata_service.ts | 14 +-
.../apis/metadata.fixtures.ts | 14 +-
.../apis/metadata.ts | 103 +++++++++++-
19 files changed, 514 insertions(+), 99 deletions(-)
diff --git a/x-pack/plugins/security_solution/common/api/endpoint/metadata/list_metadata_route.ts b/x-pack/plugins/security_solution/common/api/endpoint/metadata/list_metadata_route.ts
index 44b946faf8623..2a0ea7c0fbac1 100644
--- a/x-pack/plugins/security_solution/common/api/endpoint/metadata/list_metadata_route.ts
+++ b/x-pack/plugins/security_solution/common/api/endpoint/metadata/list_metadata_route.ts
@@ -8,7 +8,7 @@
import type { TypeOf } from '@kbn/config-schema';
import { schema } from '@kbn/config-schema';
import { ENDPOINT_DEFAULT_PAGE, ENDPOINT_DEFAULT_PAGE_SIZE } from '../../../endpoint/constants';
-import { HostStatus } from '../../../endpoint/types';
+import { HostStatus, EndpointSortableField } from '../../../endpoint/types';
export const GetMetadataListRequestSchema = {
query: schema.object(
@@ -16,6 +16,20 @@ export const GetMetadataListRequestSchema = {
page: schema.number({ defaultValue: ENDPOINT_DEFAULT_PAGE, min: 0 }),
pageSize: schema.number({ defaultValue: ENDPOINT_DEFAULT_PAGE_SIZE, min: 1, max: 10000 }),
kuery: schema.maybe(schema.string()),
+ sortField: schema.maybe(
+ schema.oneOf([
+ schema.literal(EndpointSortableField.ENROLLED_AT.toString()),
+ schema.literal(EndpointSortableField.HOSTNAME.toString()),
+ schema.literal(EndpointSortableField.HOST_STATUS.toString()),
+ schema.literal(EndpointSortableField.POLICY_NAME.toString()),
+ schema.literal(EndpointSortableField.POLICY_STATUS.toString()),
+ schema.literal(EndpointSortableField.HOST_OS_NAME.toString()),
+ schema.literal(EndpointSortableField.HOST_IP.toString()),
+ schema.literal(EndpointSortableField.AGENT_VERSION.toString()),
+ schema.literal(EndpointSortableField.LAST_SEEN.toString()),
+ ])
+ ),
+ sortDirection: schema.maybe(schema.oneOf([schema.literal('asc'), schema.literal('desc')])),
hostStatuses: schema.maybe(
schema.arrayOf(
schema.oneOf([
diff --git a/x-pack/plugins/security_solution/common/endpoint/constants.ts b/x-pack/plugins/security_solution/common/endpoint/constants.ts
index 25380c79cf6ed..19c77f230eea5 100644
--- a/x-pack/plugins/security_solution/common/endpoint/constants.ts
+++ b/x-pack/plugins/security_solution/common/endpoint/constants.ts
@@ -7,6 +7,7 @@
/** endpoint data streams that are used for host isolation */
import { getFileDataIndexName, getFileMetadataIndexName } from '@kbn/fleet-plugin/common';
+import { EndpointSortableField } from './types';
/** for index patterns `.logs-endpoint.actions-* and .logs-endpoint.action.responses-*`*/
export const ENDPOINT_ACTIONS_DS = '.logs-endpoint.actions';
@@ -99,6 +100,8 @@ export const failedFleetActionErrorCode = '424';
export const ENDPOINT_DEFAULT_PAGE = 0;
export const ENDPOINT_DEFAULT_PAGE_SIZE = 10;
+export const ENDPOINT_DEFAULT_SORT_FIELD = EndpointSortableField.ENROLLED_AT;
+export const ENDPOINT_DEFAULT_SORT_DIRECTION = 'desc';
export const ENDPOINT_ERROR_CODES: Record = {
ES_CONNECTION_ERROR: -272,
diff --git a/x-pack/plugins/security_solution/common/endpoint/types/index.ts b/x-pack/plugins/security_solution/common/endpoint/types/index.ts
index eaafc26878070..5702f14f2a37a 100644
--- a/x-pack/plugins/security_solution/common/endpoint/types/index.ts
+++ b/x-pack/plugins/security_solution/common/endpoint/types/index.ts
@@ -1325,26 +1325,39 @@ export interface ListPageRouteState {
backButtonLabel?: string;
}
-/**
- * REST API standard base response for list types
- */
-interface BaseListResponse {
- data: D[];
- page: number;
- pageSize: number;
- total: number;
-}
-
export interface AdditionalOnSwitchChangeParams {
value: boolean;
policyConfigData: UIPolicyConfig;
protectionOsList: ImmutableArray>;
}
+/** Allowed fields for sorting in the EndpointList table.
+ * These are the column fields in the EndpointList table, based on the
+ * returned `HostInfoInterface` data type (and not on the internal data structure).
+ */
+export enum EndpointSortableField {
+ ENROLLED_AT = 'enrolled_at',
+ HOSTNAME = 'metadata.host.hostname',
+ HOST_STATUS = 'host_status',
+ POLICY_NAME = 'metadata.Endpoint.policy.applied.name',
+ POLICY_STATUS = 'metadata.Endpoint.policy.applied.status',
+ HOST_OS_NAME = 'metadata.host.os.name',
+ HOST_IP = 'metadata.host.ip',
+ AGENT_VERSION = 'metadata.agent.version',
+ LAST_SEEN = 'last_checkin',
+}
+
/**
* Returned by the server via GET /api/endpoint/metadata
*/
-export type MetadataListResponse = BaseListResponse;
+export interface MetadataListResponse {
+ data: HostInfo[];
+ page: number;
+ pageSize: number;
+ total: number;
+ sortField: EndpointSortableField;
+ sortDirection: 'asc' | 'desc';
+}
export type { EndpointPrivileges } from './authz';
diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/endpoints.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/endpoints.cy.ts
index 6dd4b6664d6a3..ce9533d857677 100644
--- a/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/endpoints.cy.ts
+++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/endpoints.cy.ts
@@ -5,6 +5,8 @@
* 2.0.
*/
+import type { MetadataListResponse } from '../../../../../common/endpoint/types';
+import { EndpointSortableField } from '../../../../../common/endpoint/types';
import { APP_ENDPOINTS_PATH } from '../../../../../common/constants';
import type { ReturnTypeFromChainable } from '../../types';
import { indexEndpointHosts } from '../../tasks/index_endpoint_hosts';
@@ -15,7 +17,7 @@ describe('Endpoints page', () => {
let endpointData: ReturnTypeFromChainable;
before(() => {
- indexEndpointHosts().then((indexEndpoints) => {
+ indexEndpointHosts({ count: 3 }).then((indexEndpoints) => {
endpointData = indexEndpoints;
});
});
@@ -36,4 +38,69 @@ describe('Endpoints page', () => {
loadPage(APP_ENDPOINTS_PATH);
cy.contains('Hosts running Elastic Defend').should('exist');
});
+
+ describe('Sorting', () => {
+ it('Sorts by enrollment date descending order by default', () => {
+ cy.intercept('api/endpoint/metadata*').as('getEndpointMetadataRequest');
+
+ loadPage(APP_ENDPOINTS_PATH);
+
+ cy.wait('@getEndpointMetadataRequest').then((subject) => {
+ const body = subject.response?.body as MetadataListResponse;
+
+ expect(body.sortField).to.equal(EndpointSortableField.ENROLLED_AT);
+ expect(body.sortDirection).to.equal('desc');
+ });
+
+ // no sorting indicator is present on the screen
+ cy.get('.euiTableSortIcon').should('not.exist');
+ });
+
+ it('User can sort by any field', () => {
+ loadPage(APP_ENDPOINTS_PATH);
+
+ const fields = Object.values(EndpointSortableField).filter(
+ // enrolled_at is not present in the table, it's just the default sorting
+ (value) => value !== EndpointSortableField.ENROLLED_AT
+ );
+
+ for (let i = 0; i < fields.length; i++) {
+ const field = fields[i];
+ cy.intercept(`api/endpoint/metadata*${encodeURIComponent(field)}*`).as(`request.${field}`);
+
+ cy.getByTestSubj(`tableHeaderCell_${field}_${i}`).as('header').click();
+ validateSortingInResponse(field, 'asc');
+ cy.get('@header').should('have.attr', 'aria-sort', 'ascending');
+ cy.get('.euiTableSortIcon').should('exist');
+
+ cy.get('@header').click();
+ validateSortingInResponse(field, 'desc');
+ cy.get('@header').should('have.attr', 'aria-sort', 'descending');
+ cy.get('.euiTableSortIcon').should('exist');
+ }
+ });
+
+ it('Sorting can be passed via URL', () => {
+ cy.intercept('api/endpoint/metadata*').as(`request.host_status`);
+
+ loadPage(`${APP_ENDPOINTS_PATH}?sort_field=host_status&sort_direction=desc`);
+
+ validateSortingInResponse('host_status', 'desc');
+ cy.get('[data-test-subj^=tableHeaderCell_host_status').should(
+ 'have.attr',
+ 'aria-sort',
+ 'descending'
+ );
+ });
+
+ const validateSortingInResponse = (field: string, direction: 'asc' | 'desc') =>
+ cy.wait(`@request.${field}`).then((subject) => {
+ expect(subject.response?.statusCode).to.equal(200);
+
+ const body = subject.response?.body as MetadataListResponse;
+ expect(body.total).to.equal(3);
+ expect(body.sortField).to.equal(field);
+ expect(body.sortDirection).to.equal(direction);
+ });
+ });
});
diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/builders.ts b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/builders.ts
index 69baec5732693..260cb90ed172f 100644
--- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/builders.ts
+++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/builders.ts
@@ -5,6 +5,10 @@
* 2.0.
*/
+import {
+ ENDPOINT_DEFAULT_SORT_DIRECTION,
+ ENDPOINT_DEFAULT_SORT_FIELD,
+} from '../../../../../common/endpoint/constants';
import type { Immutable } from '../../../../../common/endpoint/types';
import { DEFAULT_POLL_INTERVAL } from '../../../common/constants';
import { createLoadedResourceState, createUninitialisedResourceState } from '../../../state';
@@ -16,6 +20,8 @@ export const initialEndpointPageState = (): Immutable => {
pageSize: 10,
pageIndex: 0,
total: 0,
+ sortDirection: ENDPOINT_DEFAULT_SORT_DIRECTION,
+ sortField: ENDPOINT_DEFAULT_SORT_FIELD,
loading: false,
error: undefined,
location: undefined,
diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/index.test.ts b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/index.test.ts
index 44165211f7b41..5cefbe2fa5588 100644
--- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/index.test.ts
+++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/index.test.ts
@@ -14,6 +14,10 @@ import type { EndpointAction } from './action';
import { endpointListReducer } from './reducer';
import { DEFAULT_POLL_INTERVAL } from '../../../common/constants';
import { createUninitialisedResourceState } from '../../../state';
+import {
+ ENDPOINT_DEFAULT_SORT_DIRECTION,
+ ENDPOINT_DEFAULT_SORT_FIELD,
+} from '../../../../../common/endpoint/constants';
describe('EndpointList store concerns', () => {
let store: Store;
@@ -40,6 +44,8 @@ describe('EndpointList store concerns', () => {
hosts: [],
pageSize: 10,
pageIndex: 0,
+ sortField: ENDPOINT_DEFAULT_SORT_FIELD,
+ sortDirection: ENDPOINT_DEFAULT_SORT_DIRECTION,
total: 0,
loading: false,
error: undefined,
diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts
index 6caf5b221b996..c3572b38d40ea 100644
--- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts
+++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts
@@ -353,7 +353,12 @@ async function endpointListMiddleware({
}) {
const { getState, dispatch } = store;
- const { page_index: pageIndex, page_size: pageSize } = uiQueryParams(getState());
+ const {
+ page_index: pageIndex,
+ page_size: pageSize,
+ sort_field: sortField,
+ sort_direction: sortDirection,
+ } = uiQueryParams(getState());
let endpointResponse: MetadataListResponse | undefined;
try {
@@ -365,6 +370,8 @@ async function endpointListMiddleware({
page: pageIndex,
pageSize,
kuery: decodedQuery.query as string,
+ sortField,
+ sortDirection,
},
});
diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/mock_endpoint_result_list.ts b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/mock_endpoint_result_list.ts
index f6c5c144f529b..1bc156d0c5a37 100644
--- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/mock_endpoint_result_list.ts
+++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/mock_endpoint_result_list.ts
@@ -32,6 +32,8 @@ import type { GetPolicyListResponse } from '../../policy/types';
import { pendingActionsResponseMock } from '../../../../common/lib/endpoint_pending_actions/mocks';
import {
ACTION_STATUS_ROUTE,
+ ENDPOINT_DEFAULT_SORT_DIRECTION,
+ ENDPOINT_DEFAULT_SORT_FIELD,
HOST_METADATA_LIST_ROUTE,
METADATA_TRANSFORMS_STATUS_ROUTE,
} from '../../../../../common/endpoint/constants';
@@ -67,6 +69,8 @@ export const mockEndpointResultList: (options?: {
total,
page,
pageSize,
+ sortDirection: ENDPOINT_DEFAULT_SORT_DIRECTION,
+ sortField: ENDPOINT_DEFAULT_SORT_FIELD,
};
return mock;
};
@@ -121,6 +125,8 @@ const endpointListApiPathHandlerMocks = ({
total: endpointsResults?.length || 0,
page: 0,
pageSize: 10,
+ sortDirection: ENDPOINT_DEFAULT_SORT_DIRECTION,
+ sortField: ENDPOINT_DEFAULT_SORT_FIELD,
};
},
diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/reducer.ts b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/reducer.ts
index 227ffebea8dec..de1bb7b834e0f 100644
--- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/reducer.ts
+++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/reducer.ts
@@ -63,13 +63,15 @@ const handleMetadataTransformStatsChanged: CaseReducer {
if (action.type === 'serverReturnedEndpointList') {
- const { data, total, page, pageSize } = action.payload;
+ const { data, total, page, pageSize, sortDirection, sortField } = action.payload;
return {
...state,
hosts: data,
total,
pageIndex: page,
pageSize,
+ sortField,
+ sortDirection,
loading: false,
error: undefined,
};
diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/selectors.ts b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/selectors.ts
index 7f6e464536412..c33407b36515d 100644
--- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/selectors.ts
+++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/selectors.ts
@@ -11,7 +11,11 @@ import { createSelector } from 'reselect';
import { matchPath } from 'react-router-dom';
import { decode } from '@kbn/rison';
import type { Query } from '@kbn/es-query';
-import type { EndpointPendingActions, Immutable } from '../../../../../common/endpoint/types';
+import type {
+ EndpointPendingActions,
+ EndpointSortableField,
+ Immutable,
+} from '../../../../../common/endpoint/types';
import type { EndpointIndexUIQueryParams, EndpointState } from '../types';
import { extractListPaginationParams } from '../../../common/routing';
import {
@@ -35,6 +39,12 @@ export const pageIndex = (state: Immutable): number => state.page
export const pageSize = (state: Immutable): number => state.pageSize;
+export const sortField = (state: Immutable): EndpointSortableField =>
+ state.sortField;
+
+export const sortDirection = (state: Immutable): 'asc' | 'desc' =>
+ state.sortDirection;
+
export const totalHits = (state: Immutable): number => state.total;
export const listLoading = (state: Immutable): boolean => state.loading;
@@ -94,6 +104,8 @@ export const uiQueryParams: (
'selected_endpoint',
'show',
'admin_query',
+ 'sort_field',
+ 'sort_direction',
];
const allowedShowValues: Array = [
@@ -117,6 +129,12 @@ export const uiQueryParams: (
if (allowedShowValues.includes(value as EndpointIndexUIQueryParams['show'])) {
data[key] = value as EndpointIndexUIQueryParams['show'];
}
+ } else if (key === 'sort_direction') {
+ if (['asc', 'desc'].includes(value)) {
+ data[key] = value as EndpointIndexUIQueryParams['sort_direction'];
+ }
+ } else if (key === 'sort_field') {
+ data[key] = value as EndpointSortableField;
} else {
data[key] = value;
}
diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/types.ts b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/types.ts
index f0408b4537333..0528c8a5ad572 100644
--- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/types.ts
+++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/types.ts
@@ -10,6 +10,7 @@ import type { GetInfoResponse } from '@kbn/fleet-plugin/common';
import type {
AppLocation,
EndpointPendingActions,
+ EndpointSortableField,
HostInfo,
Immutable,
PolicyData,
@@ -26,6 +27,10 @@ export interface EndpointState {
pageSize: number;
/** which page to show */
pageIndex: number;
+ /** field used for sorting */
+ sortField: EndpointSortableField;
+ /** direction of sorting */
+ sortDirection: 'asc' | 'desc';
/** total number of hosts returned */
total: number;
/** list page is retrieving data */
@@ -97,6 +102,10 @@ export interface EndpointIndexUIQueryParams {
page_size?: string;
/** Which page to show */
page_index?: string;
+ /** Field used for sorting */
+ sort_field?: EndpointSortableField;
+ /** Direction of sorting */
+ sort_direction?: 'asc' | 'desc';
/** show the policy response or host details */
show?: 'policy_response' | 'activity_log' | 'details' | 'isolate' | 'unisolate';
/** Query text from search bar*/
diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx
index 0bd26b0dddd34..b1e8b4925a2c2 100644
--- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx
+++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx
@@ -7,6 +7,7 @@
import React, { type CSSProperties, useCallback, useMemo } from 'react';
import styled from 'styled-components';
+import type { CriteriaWithPagination } from '@elastic/eui';
import {
EuiBasicTable,
type EuiBasicTableColumn,
@@ -42,9 +43,11 @@ import { POLICY_STATUS_TO_HEALTH_COLOR, POLICY_STATUS_TO_TEXT } from './host_con
import type { CreateStructuredSelector } from '../../../../common/store';
import type {
HostInfo,
+ HostInfoInterface,
Immutable,
PolicyDetailsRouteState,
} from '../../../../../common/endpoint/types';
+import { EndpointSortableField } from '../../../../../common/endpoint/types';
import { DEFAULT_POLL_INTERVAL, MANAGEMENT_PAGE_SIZE_OPTIONS } from '../../../common/constants';
import { HostsEmptyState, PolicyEmptyState } from '../../../components/management_empty_state';
import { FormattedDate } from '../../../../common/components/formatted_date';
@@ -81,6 +84,21 @@ interface GetEndpointListColumnsProps {
getAppUrl: ReturnType['getAppUrl'];
}
+const columnWidths: Record<
+ Exclude | 'actions',
+ string
+> = {
+ [EndpointSortableField.HOSTNAME]: '18%',
+ [EndpointSortableField.HOST_STATUS]: '15%',
+ [EndpointSortableField.POLICY_NAME]: '20%',
+ [EndpointSortableField.POLICY_STATUS]: '150px',
+ [EndpointSortableField.HOST_OS_NAME]: '90px',
+ [EndpointSortableField.HOST_IP]: '22%',
+ [EndpointSortableField.AGENT_VERSION]: '10%',
+ [EndpointSortableField.LAST_SEEN]: '15%',
+ actions: '65px',
+};
+
const getEndpointListColumns = ({
canReadPolicyManagement,
backToEndpointList,
@@ -96,17 +114,18 @@ const getEndpointListColumns = ({
return [
{
- field: 'metadata',
- width: '15%',
+ field: EndpointSortableField.HOSTNAME,
+ width: columnWidths[EndpointSortableField.HOSTNAME],
name: i18n.translate('xpack.securitySolution.endpoint.list.hostname', {
defaultMessage: 'Endpoint',
}),
- render: ({ host: { hostname }, agent: { id } }: HostInfo['metadata']) => {
+ sortable: true,
+ render: (hostname: HostInfo['metadata']['host']['hostname'], item: HostInfo) => {
const toRoutePath = getEndpointDetailsPath(
{
...queryParams,
name: 'endpointDetails',
- selected_endpoint: id,
+ selected_endpoint: item.metadata.agent.id,
},
search
);
@@ -124,11 +143,12 @@ const getEndpointListColumns = ({
},
},
{
- field: 'host_status',
- width: '14%',
+ field: EndpointSortableField.HOST_STATUS,
+ width: columnWidths[EndpointSortableField.HOST_STATUS],
name: i18n.translate('xpack.securitySolution.endpoint.list.hostStatus', {
defaultMessage: 'Agent status',
}),
+ sortable: true,
render: (hostStatus: HostInfo['host_status'], endpointInfo) => {
return (
{
+ render: (
+ policyName: HostInfo['metadata']['Endpoint']['policy']['applied']['name'],
+ item: HostInfo
+ ) => {
+ const policy = item.metadata.Endpoint.policy.applied;
+
return (
<>
-
+
{canReadPolicyManagement ? (
- {policy.name}
+ {policyName}
) : (
- <>{policy.name}>
+ <>{policyName}>
)}
{policy.endpoint_policy_version && (
@@ -186,12 +212,16 @@ const getEndpointListColumns = ({
},
},
{
- field: 'metadata.Endpoint.policy.applied',
- width: '9%',
+ field: EndpointSortableField.POLICY_STATUS,
+ width: columnWidths[EndpointSortableField.POLICY_STATUS],
name: i18n.translate('xpack.securitySolution.endpoint.list.policyStatus', {
defaultMessage: 'Policy status',
}),
- render: (policy: HostInfo['metadata']['Endpoint']['policy']['applied'], item: HostInfo) => {
+ sortable: true,
+ render: (
+ status: HostInfo['metadata']['Endpoint']['policy']['applied']['status'],
+ item: HostInfo
+ ) => {
const toRoutePath = getEndpointDetailsPath({
name: 'endpointPolicyResponse',
...queryParams,
@@ -199,17 +229,14 @@ const getEndpointListColumns = ({
});
const toRouteUrl = getAppUrl({ path: toRoutePath });
return (
-
+
{
return (
@@ -236,11 +264,12 @@ const getEndpointListColumns = ({
},
},
{
- field: 'metadata.host.ip',
- width: '12%',
+ field: EndpointSortableField.HOST_IP,
+ width: columnWidths[EndpointSortableField.HOST_IP],
name: i18n.translate('xpack.securitySolution.endpoint.list.ip', {
defaultMessage: 'IP address',
}),
+ sortable: true,
render: (ip: string[]) => {
return (
@@ -254,11 +283,12 @@ const getEndpointListColumns = ({
},
},
{
- field: 'metadata.agent.version',
- width: '9%',
+ field: EndpointSortableField.AGENT_VERSION,
+ width: columnWidths[EndpointSortableField.AGENT_VERSION],
name: i18n.translate('xpack.securitySolution.endpoint.list.endpointVersion', {
defaultMessage: 'Version',
}),
+ sortable: true,
render: (version: string) => {
return (
@@ -270,10 +300,11 @@ const getEndpointListColumns = ({
},
},
{
- field: 'metadata.@timestamp',
+ field: EndpointSortableField.LAST_SEEN,
+ width: columnWidths[EndpointSortableField.LAST_SEEN],
name: lastActiveColumnName,
- width: '9%',
- render(dateValue: HostInfo['metadata']['@timestamp']) {
+ sortable: true,
+ render(dateValue: HostInfo['last_checkin']) {
return (
{
const history = useHistory();
const {
listData,
pageIndex,
pageSize,
+ sortField,
+ sortDirection,
totalHits: totalItemCount,
listLoading: loading,
listError,
@@ -369,7 +406,7 @@ export const EndpointList = () => {
}, [pageIndex, pageSize, maxPageCount]);
const onTableChange = useCallback(
- ({ page }: { page: { index: number; size: number } }) => {
+ ({ page, sort }: CriteriaWithPagination) => {
const { index, size } = page;
// FIXME: PT: if endpoint details is open, table is not displaying correct number of rows
history.push(
@@ -378,33 +415,40 @@ export const EndpointList = () => {
...queryParams,
page_index: JSON.stringify(index),
page_size: JSON.stringify(size),
+ sort_direction: sort?.direction,
+ sort_field: sort?.field as EndpointSortableField,
})
);
},
[history, queryParams]
);
+ const stateHandleCreatePolicyClick: CreatePackagePolicyRouteState = useMemo(
+ () => ({
+ onCancelNavigateTo: [
+ APP_UI_ID,
+ {
+ path: getEndpointListPath({ name: 'endpointList' }),
+ },
+ ],
+ onCancelUrl: getAppUrl({ path: getEndpointListPath({ name: 'endpointList' }) }),
+ onSaveNavigateTo: [
+ APP_UI_ID,
+ {
+ path: getEndpointListPath({ name: 'endpointList' }),
+ },
+ ],
+ }),
+ [getAppUrl]
+ );
+
const handleCreatePolicyClick = useNavigateToAppEventHandler(
'fleet',
{
path: `/integrations/${
endpointPackageVersion ? `/endpoint-${endpointPackageVersion}` : ''
}/add-integration`,
- state: {
- onCancelNavigateTo: [
- APP_UI_ID,
- {
- path: getEndpointListPath({ name: 'endpointList' }),
- },
- ],
- onCancelUrl: getAppUrl({ path: getEndpointListPath({ name: 'endpointList' }) }),
- onSaveNavigateTo: [
- APP_UI_ID,
- {
- path: getEndpointListPath({ name: 'endpointList' }),
- },
- ],
- },
+ state: stateHandleCreatePolicyClick,
}
);
@@ -450,9 +494,7 @@ export const EndpointList = () => {
const handleDeployEndpointsClick =
useNavigateToAppEventHandler('fleet', {
path: `/policies/${selectedPolicyId}?openEnrollmentFlyout=true`,
- state: {
- onDoneNavigateTo: [APP_UI_ID, { path: getEndpointListPath({ name: 'endpointList' }) }],
- },
+ state: stateHandleDeployEndpointsClick,
});
const handleSelectableOnChange = useCallback<(o: EuiSelectableProps['options']) => void>(
@@ -500,18 +542,28 @@ export const EndpointList = () => {
]
);
+ const sorting = useMemo(
+ () => ({
+ sort: { field: sortField as keyof HostInfoInterface, direction: sortDirection },
+ }),
+ [sortDirection, sortField]
+ );
+
+ const mutableListData = useMemo(() => [...listData], [listData]);
+
const renderTableOrEmptyState = useMemo(() => {
if (endpointsExist) {
return (
);
} else if (canReadEndpointList && !canAccessFleet) {
@@ -554,15 +606,16 @@ export const EndpointList = () => {
handleDeployEndpointsClick,
handleSelectableOnChange,
hasPolicyData,
- listData,
listError?.message,
loading,
+ mutableListData,
onTableChange,
paginationSetup,
policyItemsLoading,
policyItems,
selectedPolicyId,
setTableRowProps,
+ sorting,
]);
return (
diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/handlers.ts b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/handlers.ts
index 123eab09255c6..9131304d529a3 100644
--- a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/handlers.ts
+++ b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/handlers.ts
@@ -7,7 +7,10 @@
import type { TypeOf } from '@kbn/config-schema';
import type { Logger, RequestHandler } from '@kbn/core/server';
-import type { MetadataListResponse } from '../../../../common/endpoint/types';
+import type {
+ MetadataListResponse,
+ EndpointSortableField,
+} from '../../../../common/endpoint/types';
import { errorHandler } from '../error_handler';
import type { SecuritySolutionRequestHandlerContext } from '../../../types';
@@ -19,6 +22,8 @@ import type {
import {
ENDPOINT_DEFAULT_PAGE,
ENDPOINT_DEFAULT_PAGE_SIZE,
+ ENDPOINT_DEFAULT_SORT_DIRECTION,
+ ENDPOINT_DEFAULT_SORT_FIELD,
METADATA_TRANSFORMS_PATTERN,
} from '../../../../common/endpoint/constants';
@@ -54,6 +59,9 @@ export function getMetadataListRequestHandler(
total,
page: request.query.page || ENDPOINT_DEFAULT_PAGE,
pageSize: request.query.pageSize || ENDPOINT_DEFAULT_PAGE_SIZE,
+ sortField:
+ (request.query.sortField as EndpointSortableField) || ENDPOINT_DEFAULT_SORT_FIELD,
+ sortDirection: request.query.sortDirection || ENDPOINT_DEFAULT_SORT_DIRECTION,
};
return response.ok({ body });
diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/metadata.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/metadata.test.ts
index 061c090f2df28..236879a4e4164 100644
--- a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/metadata.test.ts
+++ b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/metadata.test.ts
@@ -41,6 +41,8 @@ import type {
PackagePolicyClient,
} from '@kbn/fleet-plugin/server';
import {
+ ENDPOINT_DEFAULT_SORT_DIRECTION,
+ ENDPOINT_DEFAULT_SORT_FIELD,
HOST_METADATA_GET_ROUTE,
HOST_METADATA_LIST_ROUTE,
METADATA_TRANSFORMS_STATUS_ROUTE,
@@ -226,6 +228,8 @@ describe('test endpoint routes', () => {
expect(endpointResultList.total).toEqual(1);
expect(endpointResultList.page).toEqual(0);
expect(endpointResultList.pageSize).toEqual(10);
+ expect(endpointResultList.sortField).toEqual(ENDPOINT_DEFAULT_SORT_FIELD);
+ expect(endpointResultList.sortDirection).toEqual(ENDPOINT_DEFAULT_SORT_DIRECTION);
});
it('should get forbidden if no security solution access', async () => {
diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/query_builders.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/query_builders.test.ts
index bfdc8022e5ca2..7efe718b458a9 100644
--- a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/query_builders.test.ts
+++ b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/query_builders.test.ts
@@ -10,6 +10,8 @@ import { metadataCurrentIndexPattern } from '../../../../common/endpoint/constan
import { get } from 'lodash';
import { expectedCompleteUnitedIndexQuery } from './query_builders.fixtures';
import { savedObjectsClientMock } from '@kbn/core/server/mocks';
+import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server';
+import { EndpointSortableField } from '../../../../common/endpoint/types';
describe('query builder', () => {
describe('MetadataGetQuery', () => {
@@ -38,15 +40,19 @@ describe('query builder', () => {
});
describe('buildUnitedIndexQuery', () => {
- it('correctly builds empty query', async () => {
- const soClient = savedObjectsClientMock.create();
+ let soClient: jest.Mocked;
+
+ beforeEach(() => {
+ soClient = savedObjectsClientMock.create();
soClient.find.mockResolvedValue({
saved_objects: [],
total: 0,
per_page: 0,
page: 0,
});
+ });
+ it('correctly builds empty query', async () => {
const query = await buildUnitedIndexQuery(
soClient,
{ page: 1, pageSize: 10, hostStatuses: [], kuery: '' },
@@ -91,15 +97,27 @@ describe('query builder', () => {
expect(query.body.query).toEqual(expected);
});
- it('correctly builds query', async () => {
- const soClient = savedObjectsClientMock.create();
- soClient.find.mockResolvedValue({
- saved_objects: [],
- total: 0,
- per_page: 0,
- page: 0,
- });
+ it('adds `status` runtime field', async () => {
+ const query = await buildUnitedIndexQuery(
+ soClient,
+ { page: 1, pageSize: 10, hostStatuses: [], kuery: '' },
+ []
+ );
+ expect(query.body.runtime_mappings).toHaveProperty('status');
+ });
+
+ it('adds `last_checkin` runtime field', async () => {
+ const query = await buildUnitedIndexQuery(
+ soClient,
+ { page: 1, pageSize: 10, hostStatuses: [], kuery: '' },
+ []
+ );
+
+ expect(query.body.runtime_mappings).toHaveProperty('last_checkin');
+ });
+
+ it('correctly builds query', async () => {
const query = await buildUnitedIndexQuery(
soClient,
{
@@ -113,5 +131,51 @@ describe('query builder', () => {
const expected = expectedCompleteUnitedIndexQuery;
expect(query.body.query).toEqual(expected);
});
+
+ describe('sorting', () => {
+ it('uses default sort field if none passed', async () => {
+ const query = await buildUnitedIndexQuery(soClient, {
+ page: 1,
+ pageSize: 10,
+ });
+
+ expect(query.body.sort).toEqual([
+ { 'united.agent.enrolled_at': { order: 'desc', unmapped_type: 'date' } },
+ ]);
+ });
+
+ it.each`
+ inputField | mappedField
+ ${'host_status'} | ${'status'}
+ ${'metadata.host.hostname'} | ${'united.endpoint.host.hostname'}
+ ${'metadata.Endpoint.policy.applied.name'} | ${'united.endpoint.Endpoint.policy.applied.name'}
+ `('correctly maps field $inputField', async ({ inputField, mappedField }) => {
+ const query = await buildUnitedIndexQuery(soClient, {
+ page: 1,
+ pageSize: 10,
+ sortField: inputField,
+ sortDirection: 'asc',
+ });
+
+ expect(query.body.sort).toEqual([{ [mappedField]: 'asc' }]);
+ });
+
+ it.each`
+ inputField | mappedField
+ ${EndpointSortableField.LAST_SEEN} | ${EndpointSortableField.LAST_SEEN}
+ ${EndpointSortableField.ENROLLED_AT} | ${'united.agent.enrolled_at'}
+ `('correctly maps date field $inputField', async ({ inputField, mappedField }) => {
+ const query = await buildUnitedIndexQuery(soClient, {
+ page: 1,
+ pageSize: 10,
+ sortField: inputField,
+ sortDirection: 'asc',
+ });
+
+ expect(query.body.sort).toEqual([
+ { [mappedField]: { order: 'asc', unmapped_type: 'date' } },
+ ]);
+ });
+ });
});
});
diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/query_builders.ts b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/query_builders.ts
index b790283c03c57..e51655010b40c 100644
--- a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/query_builders.ts
+++ b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/query_builders.ts
@@ -9,9 +9,12 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query';
import { buildAgentStatusRuntimeField } from '@kbn/fleet-plugin/server';
import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server';
+import { EndpointSortableField } from '../../../../common/endpoint/types';
import {
ENDPOINT_DEFAULT_PAGE,
ENDPOINT_DEFAULT_PAGE_SIZE,
+ ENDPOINT_DEFAULT_SORT_DIRECTION,
+ ENDPOINT_DEFAULT_SORT_FIELD,
metadataCurrentIndexPattern,
METADATA_UNITED_INDEX,
} from '../../../../common/endpoint/constants';
@@ -55,9 +58,25 @@ export const MetadataSortMethod: estypes.SortCombinations[] = [
},
];
-const UnitedMetadataSortMethod: estypes.SortCombinations[] = [
- { 'united.agent.enrolled_at': { order: 'desc', unmapped_type: 'date' } },
-];
+const getUnitedMetadataSortMethod = (
+ sortField: EndpointSortableField,
+ sortDirection: 'asc' | 'desc'
+): estypes.SortCombinations[] => {
+ const DATE_FIELDS = [EndpointSortableField.LAST_SEEN, EndpointSortableField.ENROLLED_AT];
+
+ const mappedUnitedMetadataSortField =
+ sortField === EndpointSortableField.HOST_STATUS
+ ? 'status'
+ : sortField === EndpointSortableField.ENROLLED_AT
+ ? 'united.agent.enrolled_at'
+ : sortField.replace('metadata.', 'united.endpoint.');
+
+ if (DATE_FIELDS.includes(sortField)) {
+ return [{ [mappedUnitedMetadataSortField]: { order: sortDirection, unmapped_type: 'date' } }];
+ } else {
+ return [{ [mappedUnitedMetadataSortField]: sortDirection }];
+ }
+};
export function getESQueryHostMetadataByID(agentID: string): estypes.SearchRequest {
return {
@@ -128,6 +147,17 @@ export function getESQueryHostMetadataByIDs(agentIDs: string[]) {
};
}
+const lastCheckinRuntimeField = {
+ last_checkin: {
+ type: 'date',
+ script: {
+ lang: 'painless',
+ source:
+ "emit(doc['united.agent.last_checkin'].size() > 0 ? doc['united.agent.last_checkin'].value.toInstant().toEpochMilli() : doc['united.endpoint.@timestamp'].value.toInstant().toEpochMilli());",
+ },
+ },
+};
+
interface BuildUnitedIndexQueryResponse {
body: {
query: Record;
@@ -151,6 +181,8 @@ export async function buildUnitedIndexQuery(
pageSize = ENDPOINT_DEFAULT_PAGE_SIZE,
hostStatuses = [],
kuery = '',
+ sortField = ENDPOINT_DEFAULT_SORT_FIELD,
+ sortDirection = ENDPOINT_DEFAULT_SORT_DIRECTION,
} = queryOptions || {};
const statusesKuery = buildStatusesKuery(hostStatuses);
@@ -204,13 +236,15 @@ export async function buildUnitedIndexQuery(
};
}
- const runtimeMappings = await buildAgentStatusRuntimeField(soClient, 'united.agent.');
+ const statusRuntimeField = await buildAgentStatusRuntimeField(soClient, 'united.agent.');
+ const runtimeMappings = { ...statusRuntimeField, ...lastCheckinRuntimeField };
+
const fields = Object.keys(runtimeMappings);
return {
body: {
query,
track_total_hits: true,
- sort: UnitedMetadataSortMethod,
+ sort: getUnitedMetadataSortMethod(sortField as EndpointSortableField, sortDirection),
fields,
runtime_mappings: runtimeMappings,
},
diff --git a/x-pack/plugins/security_solution/server/endpoint/services/metadata/endpoint_metadata_service.ts b/x-pack/plugins/security_solution/server/endpoint/services/metadata/endpoint_metadata_service.ts
index 61008a99b5515..d5a973593f225 100644
--- a/x-pack/plugins/security_solution/server/endpoint/services/metadata/endpoint_metadata_service.ts
+++ b/x-pack/plugins/security_solution/server/endpoint/services/metadata/endpoint_metadata_service.ts
@@ -13,7 +13,7 @@ import type {
} from '@kbn/core/server';
import type { SearchResponse, SearchTotalHits } from '@elastic/elasticsearch/lib/api/types';
-import type { Agent, AgentPolicy, AgentStatus, PackagePolicy } from '@kbn/fleet-plugin/common';
+import type { Agent, AgentPolicy, PackagePolicy } from '@kbn/fleet-plugin/common';
import type { AgentPolicyServiceInterface, PackagePolicyClient } from '@kbn/fleet-plugin/server';
import { AgentNotFoundError } from '@kbn/fleet-plugin/server';
import type {
@@ -295,7 +295,7 @@ export class EndpointMetadataService {
},
},
last_checkin:
- _fleetAgent?.last_checkin || new Date(endpointMetadata['@timestamp']).toISOString(),
+ fleetAgent?.last_checkin || new Date(endpointMetadata['@timestamp']).toISOString(),
};
}
@@ -438,12 +438,16 @@ export class EndpointMetadataService {
const agentPolicy = agentPoliciesMap[_agent.policy_id!];
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const endpointPolicy = endpointPoliciesMap[_agent.policy_id!];
- // add the agent status from the fleet runtime field to
- // the agent object
+
+ const runtimeFields: Partial = {
+ status: doc?.fields?.status?.[0],
+ last_checkin: doc?.fields?.last_checkin?.[0],
+ };
const agent: typeof _agent = {
..._agent,
- status: doc?.fields?.status?.[0] as AgentStatus,
+ ...runtimeFields,
};
+
hosts.push(
await this.enrichHostMetadata(fleetServices, metadata, agent, agentPolicy, endpointPolicy)
);
diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/metadata.fixtures.ts b/x-pack/test/security_solution_endpoint_api_int/apis/metadata.fixtures.ts
index 3a81ad1c71dcb..fd67cd0a1d8bd 100644
--- a/x-pack/test/security_solution_endpoint_api_int/apis/metadata.fixtures.ts
+++ b/x-pack/test/security_solution_endpoint_api_int/apis/metadata.fixtures.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-export function generateAgentDocs(timestamp: number, policyId: string) {
+export function generateAgentDocs(timestamps: number[], policyId: string) {
return [
{
access_api_key_id: 'w4zJBHwBfQcM6aSYIRjO',
@@ -15,7 +15,7 @@ export function generateAgentDocs(timestamp: number, policyId: string) {
id: '963b081e-60d1-482c-befd-a5815fa8290f',
version: '8.0.0',
},
- enrolled_at: timestamp,
+ enrolled_at: timestamps[0],
local_metadata: {
elastic: {
agent: {
@@ -53,9 +53,9 @@ export function generateAgentDocs(timestamp: number, policyId: string) {
default_api_key_id: 'x4zJBHwBfQcM6aSYYxiY',
policy_revision_idx: 1,
policy_coordinator_idx: 1,
- updated_at: timestamp,
+ updated_at: timestamps[0],
last_checkin_status: 'online',
- last_checkin: timestamp,
+ last_checkin: timestamps[0],
},
{
access_api_key_id: 'w4zJBHwBfQcM6aSYIRjO',
@@ -65,7 +65,7 @@ export function generateAgentDocs(timestamp: number, policyId: string) {
id: '3838df35-a095-4af4-8fce-0b6d78793f2e',
version: '8.0.0',
},
- enrolled_at: timestamp,
+ enrolled_at: timestamps[1],
local_metadata: {
elastic: {
agent: {
@@ -103,9 +103,9 @@ export function generateAgentDocs(timestamp: number, policyId: string) {
default_api_key_id: 'x4zJBHwBfQcM6aSYYxiY',
policy_revision_idx: 1,
policy_coordinator_idx: 1,
- updated_at: timestamp,
+ updated_at: timestamps[1],
last_checkin_status: 'online',
- last_checkin: timestamp,
+ last_checkin: timestamps[1],
},
];
}
diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts b/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts
index 6e1fb2bcd5c13..b92a26e785127 100644
--- a/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts
+++ b/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts
@@ -15,12 +15,18 @@ import {
METADATA_UNITED_TRANSFORM,
METADATA_TRANSFORMS_STATUS_ROUTE,
metadataTransformPrefix,
+ ENDPOINT_DEFAULT_SORT_FIELD,
+ ENDPOINT_DEFAULT_SORT_DIRECTION,
} from '@kbn/security-solution-plugin/common/endpoint/constants';
import { AGENTS_INDEX } from '@kbn/fleet-plugin/common';
import { indexFleetEndpointPolicy } from '@kbn/security-solution-plugin/common/endpoint/data_loaders/index_fleet_endpoint_policy';
import { TRANSFORM_STATES } from '@kbn/security-solution-plugin/common/constants';
import type { IndexedHostsAndAlertsResponse } from '@kbn/security-solution-plugin/common/endpoint/index_data';
+import {
+ EndpointSortableField,
+ MetadataListResponse,
+} from '@kbn/security-solution-plugin/common/endpoint/types';
import { generateAgentDocs, generateMetadataDocs } from './metadata.fixtures';
import {
deleteAllDocsFromMetadataCurrentIndex,
@@ -40,6 +46,9 @@ export default function ({ getService }: FtrProviderContext) {
describe('test metadata apis', () => {
describe('list endpoints GET route', () => {
const numberOfHostsInFixture = 2;
+ let agent1Timestamp: number;
+ let agent2Timestamp: number;
+ let metadataTimestamp: number;
before(async () => {
await deleteAllDocsFromFleetAgents(getService);
@@ -56,10 +65,12 @@ export default function ({ getService }: FtrProviderContext) {
'1.1.1'
);
const policyId = policy.integrationPolicies[0].policy_id;
- const currentTime = new Date().getTime();
+ agent1Timestamp = new Date().getTime();
+ agent2Timestamp = agent1Timestamp + 33;
+ metadataTimestamp = agent1Timestamp + 666;
- const agentDocs = generateAgentDocs(currentTime, policyId);
- const metadataDocs = generateMetadataDocs(currentTime);
+ const agentDocs = generateAgentDocs([agent1Timestamp, agent2Timestamp], policyId);
+ const metadataDocs = generateMetadataDocs(metadataTimestamp);
await Promise.all([
bulkIndex(getService, AGENTS_INDEX, agentDocs),
@@ -294,6 +305,92 @@ export default function ({ getService }: FtrProviderContext) {
expect(body.page).to.eql(0);
expect(body.pageSize).to.eql(10);
});
+
+ describe('`last_checkin` runtime field', () => {
+ it('should sort based on `last_checkin` - because it is a runtime field', async () => {
+ const { body: bodyAsc }: { body: MetadataListResponse } = await supertest
+ .get(HOST_METADATA_LIST_ROUTE)
+ .set('kbn-xsrf', 'xxx')
+ .set('Elastic-Api-Version', '2023-10-31')
+ .query({
+ sortField: 'last_checkin',
+ sortDirection: 'asc',
+ })
+ .expect(200);
+
+ expect(bodyAsc.data[0].last_checkin).to.eql(new Date(agent1Timestamp).toISOString());
+ expect(bodyAsc.data[1].last_checkin).to.eql(new Date(agent2Timestamp).toISOString());
+
+ const { body: bodyDesc }: { body: MetadataListResponse } = await supertest
+ .get(HOST_METADATA_LIST_ROUTE)
+ .set('kbn-xsrf', 'xxx')
+ .set('Elastic-Api-Version', '2023-10-31')
+ .query({
+ sortField: 'last_checkin',
+ sortDirection: 'desc',
+ })
+ .expect(200);
+
+ expect(bodyDesc.data[0].last_checkin).to.eql(new Date(agent2Timestamp).toISOString());
+ expect(bodyDesc.data[1].last_checkin).to.eql(new Date(agent1Timestamp).toISOString());
+ });
+ });
+
+ describe('sorting', () => {
+ it('metadata api should return 400 with not supported sorting field', async () => {
+ await supertest
+ .get(HOST_METADATA_LIST_ROUTE)
+ .set('kbn-xsrf', 'xxx')
+ .set('Elastic-Api-Version', '2023-10-31')
+ .query({
+ sortField: 'abc',
+ })
+ .expect(400);
+ });
+
+ it('metadata api should sort by enrollment date by default', async () => {
+ const { body }: { body: MetadataListResponse } = await supertest
+ .get(HOST_METADATA_LIST_ROUTE)
+ .set('kbn-xsrf', 'xxx')
+ .set('Elastic-Api-Version', '2023-10-31')
+ .expect(200);
+
+ expect(body.sortDirection).to.eql(ENDPOINT_DEFAULT_SORT_DIRECTION);
+ expect(body.sortField).to.eql(ENDPOINT_DEFAULT_SORT_FIELD);
+ });
+
+ for (const field of Object.values(EndpointSortableField)) {
+ it(`metadata api should be able to sort by ${field}`, async () => {
+ let body: MetadataListResponse;
+
+ ({ body } = await supertest
+ .get(HOST_METADATA_LIST_ROUTE)
+ .set('kbn-xsrf', 'xxx')
+ .set('Elastic-Api-Version', '2023-10-31')
+ .query({
+ sortField: field,
+ sortDirection: 'asc',
+ })
+ .expect(200));
+
+ expect(body.sortDirection).to.eql('asc');
+ expect(body.sortField).to.eql(field);
+
+ ({ body } = await supertest
+ .get(HOST_METADATA_LIST_ROUTE)
+ .set('kbn-xsrf', 'xxx')
+ .set('Elastic-Api-Version', '2023-10-31')
+ .query({
+ sortField: field,
+ sortDirection: 'desc',
+ })
+ .expect(200));
+
+ expect(body.sortDirection).to.eql('desc');
+ expect(body.sortField).to.eql(field);
+ });
+ }
+ });
});
describe('get metadata transforms', () => {
From 987a850f1c40ff579583dda8fd8cb55c6b9861c1 Mon Sep 17 00:00:00 2001
From: Aleh Zasypkin
Date: Fri, 11 Aug 2023 16:49:26 +0200
Subject: [PATCH 21/46] Support logging out of Serverless projects. (#163154)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## Summary
The Serverless MVP project experience will not include support for
Single Log-out ("SLO"). This means that the cloud console and Kibana
will maintain independent sessions, which must be managed separately.
Due to this limitation, the user avatar menu should not feature an
explicit "Logout" link, as it could mistakenly suggest that we are
terminating their Elastic Session. In reality, we are only invalidating
the Kibana session.
This PR replace the existing "Logout" link with a "Close project" link,
when in Serverless. This link will invalidate the Kibana session
(similar to our current “Logout” link) and redirect the user to their
Serverless projects list.
~~__Blocked by: https://github.com/elastic/kibana/issues/163379__~~
## How to test
### Locally
```yaml
xpack.cloud.id: "foo"
xpack.cloud.base_url: "https://console.qa.cld.elstc.co"
xpack.cloud.projects_url: "/projects"
```
```bash
yarn es snapshot --license trial
yarn start --serverless
```
### MKI
```http
POST {{host}}/api/v1/serverless/projects/elasticsearch
Authorization: ApiKey {{api-key}}
Content-Type: application/json
{
"name": "xxxx",
"region_id": "local-k8s",
"overrides": {
"kibana": {
"docker_image": "docker.elastic.co/kibana-ci/kibana-serverless:pr-163154-697c0b749433-arm64"
}
}
}
```
__Fixes: https://github.com/elastic/kibana/issues/162887__
---
.../nav_control_component.test.tsx | 104 +++++++++++++++++-
.../nav_control/nav_control_component.tsx | 8 ++
.../nav_control/nav_control_service.test.ts | 12 +-
.../nav_control/nav_control_service.tsx | 4 +
x-pack/plugins/security/public/plugin.tsx | 5 +-
.../authentication_service.test.ts | 2 +
.../authentication/authentication_service.ts | 3 +
.../authentication/authenticator.test.ts | 30 +++++
.../server/authentication/authenticator.ts | 5 +
x-pack/plugins/security/server/plugin.ts | 7 ++
10 files changed, 168 insertions(+), 12 deletions(-)
diff --git a/x-pack/plugins/security/public/nav_control/nav_control_component.test.tsx b/x-pack/plugins/security/public/nav_control/nav_control_component.test.tsx
index c09eb20328c49..933eddbaae29b 100644
--- a/x-pack/plugins/security/public/nav_control/nav_control_component.test.tsx
+++ b/x-pack/plugins/security/public/nav_control/nav_control_component.test.tsx
@@ -57,7 +57,12 @@ describe('SecurityNavControl', () => {
it('should render an avatar when user profile has loaded', async () => {
const wrapper = shallow(
-
+
);
expect(useUserProfileMock).toHaveBeenCalledTimes(1);
@@ -106,7 +111,12 @@ describe('SecurityNavControl', () => {
});
const wrapper = shallow(
-
+
);
expect(useUserProfileMock).toHaveBeenCalledTimes(1);
@@ -134,7 +144,12 @@ describe('SecurityNavControl', () => {
it('should open popover when avatar is clicked', async () => {
const wrapper = shallow(
-
+
);
act(() => {
@@ -154,7 +169,12 @@ describe('SecurityNavControl', () => {
});
const wrapper = shallow(
-
+
);
act(() => {
@@ -186,6 +206,7 @@ describe('SecurityNavControl', () => {
},
])
}
+ buildFlavour={'traditional'}
/>
);
@@ -290,6 +311,7 @@ describe('SecurityNavControl', () => {
},
])
}
+ buildFlavour={'traditional'}
/>
);
@@ -352,6 +374,73 @@ describe('SecurityNavControl', () => {
`);
});
+ it('should render `Close project` link when in Serverless', async () => {
+ const wrapper = shallow(
+
+ );
+
+ expect(wrapper.find(EuiContextMenu).prop('panels')).toMatchInlineSnapshot(`
+ Array [
+ Object {
+ "content": ,
+ "name": ,
+ "onClick": [Function],
+ },
+ Object {
+ "content": undefined,
+ "data-test-subj": "userMenuLink__link1",
+ "href": "path-to-link-1",
+ "icon": ,
+ "name": "link1",
+ },
+ Object {
+ "data-test-subj": "logoutLink",
+ "href": "",
+ "icon": ,
+ "name": ,
+ },
+ ]
+ }
+ />,
+ "id": 0,
+ "title": "full name",
+ },
+ ]
+ `);
+ });
+
it('should render anonymous user', async () => {
useUserProfileMock.mockReturnValue({
loading: false,
@@ -367,7 +456,12 @@ describe('SecurityNavControl', () => {
});
const wrapper = shallow(
-
+
);
expect(wrapper.find(EuiContextMenu).prop('panels')).toMatchInlineSnapshot(`
diff --git a/x-pack/plugins/security/public/nav_control/nav_control_component.tsx b/x-pack/plugins/security/public/nav_control/nav_control_component.tsx
index 13bcb3bcb4341..b2f05f9c6d568 100644
--- a/x-pack/plugins/security/public/nav_control/nav_control_component.tsx
+++ b/x-pack/plugins/security/public/nav_control/nav_control_component.tsx
@@ -20,6 +20,7 @@ import React, { Fragment, useState } from 'react';
import useObservable from 'react-use/lib/useObservable';
import type { Observable } from 'rxjs';
+import type { BuildFlavor } from '@kbn/config/src/types';
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n-react';
import { UserAvatar, type UserProfileAvatarData } from '@kbn/user-profile-components';
@@ -72,12 +73,14 @@ interface SecurityNavControlProps {
editProfileUrl: string;
logoutUrl: string;
userMenuLinks$: Observable;
+ buildFlavour: BuildFlavor;
}
export const SecurityNavControl: FunctionComponent = ({
editProfileUrl,
logoutUrl,
userMenuLinks$,
+ buildFlavour,
}) => {
const userMenuLinks = useObservable(userMenuLinks$, []);
const [isPopoverOpen, setIsPopoverOpen] = useState(false);
@@ -157,6 +160,11 @@ export const SecurityNavControl: FunctionComponent = ({
id="xpack.security.navControlComponent.loginLinkText"
defaultMessage="Log in"
/>
+ ) : buildFlavour === 'serverless' ? (
+
) : (
{
const license$ = new BehaviorSubject(validLicense);
const coreStart = coreMock.createStart();
- const navControlService = new SecurityNavControlService();
+ const navControlService = new SecurityNavControlService('traditional');
navControlService.setup({
securityLicense: new SecurityLicenseService().setup({ license$ }).license,
logoutUrl: '/some/logout/url',
@@ -128,7 +128,7 @@ describe('SecurityNavControlService', () => {
const license$ = new BehaviorSubject({} as ILicense);
const coreStart = coreMock.createStart();
- const navControlService = new SecurityNavControlService();
+ const navControlService = new SecurityNavControlService('traditional');
navControlService.setup({
securityLicense: new SecurityLicenseService().setup({ license$ }).license,
logoutUrl: '/some/logout/url',
@@ -148,7 +148,7 @@ describe('SecurityNavControlService', () => {
const license$ = new BehaviorSubject(validLicense);
const coreStart = coreMock.createStart();
- const navControlService = new SecurityNavControlService();
+ const navControlService = new SecurityNavControlService('traditional');
navControlService.setup({
securityLicense: new SecurityLicenseService().setup({ license$ }).license,
logoutUrl: '/some/logout/url',
@@ -165,7 +165,7 @@ describe('SecurityNavControlService', () => {
const license$ = new BehaviorSubject(validLicense);
const coreStart = coreMock.createStart();
- const navControlService = new SecurityNavControlService();
+ const navControlService = new SecurityNavControlService('traditional');
navControlService.setup({
securityLicense: new SecurityLicenseService().setup({ license$ }).license,
logoutUrl: '/some/logout/url',
@@ -187,7 +187,7 @@ describe('SecurityNavControlService', () => {
const license$ = new BehaviorSubject(validLicense);
const coreStart = coreMock.createStart();
- const navControlService = new SecurityNavControlService();
+ const navControlService = new SecurityNavControlService('traditional');
navControlService.setup({
securityLicense: new SecurityLicenseService().setup({ license$ }).license,
logoutUrl: '/some/logout/url',
@@ -210,7 +210,7 @@ describe('SecurityNavControlService', () => {
const coreSetup = coreMock.createSetup();
const license$ = new BehaviorSubject({} as ILicense);
- navControlService = new SecurityNavControlService();
+ navControlService = new SecurityNavControlService('traditional');
navControlService.setup({
securityLicense: new SecurityLicenseService().setup({ license$ }).license,
logoutUrl: '/some/logout/url',
diff --git a/x-pack/plugins/security/public/nav_control/nav_control_service.tsx b/x-pack/plugins/security/public/nav_control/nav_control_service.tsx
index de87a5ea16625..0bcc3a58263fb 100644
--- a/x-pack/plugins/security/public/nav_control/nav_control_service.tsx
+++ b/x-pack/plugins/security/public/nav_control/nav_control_service.tsx
@@ -13,6 +13,7 @@ import type { Observable, Subscription } from 'rxjs';
import { BehaviorSubject, ReplaySubject } from 'rxjs';
import { map, takeUntil } from 'rxjs/operators';
+import type { BuildFlavor } from '@kbn/config/src/types';
import type { CoreStart, CoreTheme } from '@kbn/core/public';
import { I18nProvider } from '@kbn/i18n-react';
import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public';
@@ -60,6 +61,8 @@ export class SecurityNavControlService {
private readonly stop$ = new ReplaySubject(1);
private userMenuLinks$ = new BehaviorSubject([]);
+ constructor(private readonly buildFlavor: BuildFlavor) {}
+
public setup({ securityLicense, logoutUrl, securityApiClients }: SetupDeps) {
this.securityLicense = securityLicense;
this.logoutUrl = logoutUrl;
@@ -133,6 +136,7 @@ export class SecurityNavControlService {
editProfileUrl={core.http.basePath.prepend('/security/account')}
logoutUrl={this.logoutUrl}
userMenuLinks$={this.userMenuLinks$}
+ buildFlavour={this.buildFlavor}
/>
,
element
diff --git a/x-pack/plugins/security/public/plugin.tsx b/x-pack/plugins/security/public/plugin.tsx
index 2c9c4025129e4..eb5b2723f9eab 100644
--- a/x-pack/plugins/security/public/plugin.tsx
+++ b/x-pack/plugins/security/public/plugin.tsx
@@ -68,7 +68,7 @@ export class SecurityPlugin
private readonly config: ConfigType;
private sessionTimeout?: SessionTimeout;
private readonly authenticationService = new AuthenticationService();
- private readonly navControlService = new SecurityNavControlService();
+ private readonly navControlService;
private readonly securityLicenseService = new SecurityLicenseService();
private readonly managementService = new ManagementService();
private readonly securityCheckupService: SecurityCheckupService;
@@ -80,6 +80,9 @@ export class SecurityPlugin
constructor(private readonly initializerContext: PluginInitializerContext) {
this.config = this.initializerContext.config.get();
this.securityCheckupService = new SecurityCheckupService(this.config, localStorage);
+ this.navControlService = new SecurityNavControlService(
+ initializerContext.env.packageInfo.buildFlavor
+ );
}
public setup(
diff --git a/x-pack/plugins/security/server/authentication/authentication_service.test.ts b/x-pack/plugins/security/server/authentication/authentication_service.test.ts
index 7f79b8c7d54ba..4e81f0e4a5f13 100644
--- a/x-pack/plugins/security/server/authentication/authentication_service.test.ts
+++ b/x-pack/plugins/security/server/authentication/authentication_service.test.ts
@@ -78,6 +78,7 @@ describe('AuthenticationService', () => {
applicationName: 'kibana-.kibana';
kibanaFeatures: [];
isElasticCloudDeployment: jest.Mock;
+ customLogoutURL?: string;
};
beforeEach(() => {
logger = loggingSystemMock.createLogger();
@@ -121,6 +122,7 @@ describe('AuthenticationService', () => {
applicationName: 'kibana-.kibana',
kibanaFeatures: [],
isElasticCloudDeployment: jest.fn().mockReturnValue(false),
+ customLogoutURL: 'https://some-logout-origin/logout',
};
(mockStartAuthenticationParams.http.basePath.get as jest.Mock).mockImplementation(
() => mockStartAuthenticationParams.http.basePath.serverBasePath
diff --git a/x-pack/plugins/security/server/authentication/authentication_service.ts b/x-pack/plugins/security/server/authentication/authentication_service.ts
index 171b7ae4212b3..a26ac8943ee78 100644
--- a/x-pack/plugins/security/server/authentication/authentication_service.ts
+++ b/x-pack/plugins/security/server/authentication/authentication_service.ts
@@ -57,6 +57,7 @@ interface AuthenticationServiceStartParams {
applicationName: string;
kibanaFeatures: KibanaFeature[];
isElasticCloudDeployment: () => boolean;
+ customLogoutURL?: string;
}
export interface InternalAuthenticationServiceStart extends AuthenticationServiceStart {
@@ -328,6 +329,7 @@ export class AuthenticationService {
applicationName,
kibanaFeatures,
isElasticCloudDeployment,
+ customLogoutURL,
}: AuthenticationServiceStartParams): InternalAuthenticationServiceStart {
const apiKeys = new APIKeys({
clusterClient,
@@ -368,6 +370,7 @@ export class AuthenticationService {
license: this.license,
session,
isElasticCloudDeployment,
+ customLogoutURL,
});
return {
diff --git a/x-pack/plugins/security/server/authentication/authenticator.test.ts b/x-pack/plugins/security/server/authentication/authenticator.test.ts
index f0e1479362fdf..2de2fdbf4df2a 100644
--- a/x-pack/plugins/security/server/authentication/authenticator.test.ts
+++ b/x-pack/plugins/security/server/authentication/authenticator.test.ts
@@ -61,11 +61,13 @@ function getMockOptions({
http = {},
selector,
accessAgreementMessage,
+ customLogoutURL,
}: {
providers?: Record | string[];
http?: Partial;
selector?: AuthenticatorOptions['config']['authc']['selector'];
accessAgreementMessage?: string;
+ customLogoutURL?: string;
} = {}) {
const auditService = auditServiceMock.create();
auditLogger = auditLoggerMock.create();
@@ -95,6 +97,7 @@ function getMockOptions({
featureUsageService: securityFeatureUsageServiceMock.createStartContract(),
userProfileService: userProfileServiceMock.createStart(),
isElasticCloudDeployment: jest.fn().mockReturnValue(false),
+ customLogoutURL,
};
}
@@ -249,6 +252,33 @@ describe('Authenticator', () => {
'/mock-server-basepath/security/logged_out?next=%2Fapp%2Fml%2Fencode+me&msg=SESSION_EXPIRED'
);
});
+
+ it('points to a custom URL if `customLogoutURL` is specified', () => {
+ const authenticationProviderMock =
+ jest.requireMock(`./providers/saml`).SAMLAuthenticationProvider;
+ authenticationProviderMock.mockClear();
+ new Authenticator(
+ getMockOptions({
+ selector: { enabled: false },
+ providers: { saml: { saml1: { order: 0, realm: 'realm' } } },
+ customLogoutURL: 'https://some-logout-origin/logout',
+ })
+ );
+ const getLoggedOutURL = authenticationProviderMock.mock.calls[0][0].urls.loggedOut;
+
+ expect(getLoggedOutURL(httpServerMock.createKibanaRequest())).toBe(
+ 'https://some-logout-origin/logout'
+ );
+
+ // We don't forward any Kibana specific query string parameters to the external logout URL.
+ expect(
+ getLoggedOutURL(
+ httpServerMock.createKibanaRequest({
+ query: { next: '/app/ml/encode me', msg: 'SESSION_EXPIRED' },
+ })
+ )
+ ).toBe('https://some-logout-origin/logout');
+ });
});
describe('HTTP authentication provider', () => {
diff --git a/x-pack/plugins/security/server/authentication/authenticator.ts b/x-pack/plugins/security/server/authentication/authenticator.ts
index 3d1ffebabb513..24329c0e7575f 100644
--- a/x-pack/plugins/security/server/authentication/authenticator.ts
+++ b/x-pack/plugins/security/server/authentication/authenticator.ts
@@ -97,6 +97,7 @@ export interface AuthenticatorOptions {
session: PublicMethodsOf;
getServerBaseURL: () => string;
isElasticCloudDeployment: () => boolean;
+ customLogoutURL?: string;
}
/** @internal */
@@ -1013,6 +1014,10 @@ export class Authenticator {
* provider in the chain (default) is assumed.
*/
private getLoggedOutURL(request: KibanaRequest, providerType?: string) {
+ if (this.options.customLogoutURL) {
+ return this.options.customLogoutURL;
+ }
+
// The app that handles logout needs to know the reason of the logout and the URL we may need to
// redirect user to once they log in again (e.g. when session expires).
const searchParams = new URLSearchParams();
diff --git a/x-pack/plugins/security/server/plugin.ts b/x-pack/plugins/security/server/plugin.ts
index a022fdd418e6e..4f36c0bf508d0 100644
--- a/x-pack/plugins/security/server/plugin.ts
+++ b/x-pack/plugins/security/server/plugin.ts
@@ -408,6 +408,12 @@ export class SecurityPlugin
this.userProfileStart = this.userProfileService.start({ clusterClient, session });
this.userSettingServiceStart = this.userSettingService.start(this.userProfileStart);
+ // In serverless, we want to redirect users to the list of projects instead of standard "Logged Out" page.
+ const customLogoutURL =
+ this.initializerContext.env.packageInfo.buildFlavor === 'serverless'
+ ? cloud?.projectsUrl
+ : undefined;
+
const config = this.getConfig();
this.authenticationStart = this.authenticationService.start({
audit: this.auditSetup!,
@@ -421,6 +427,7 @@ export class SecurityPlugin
applicationName: this.authorizationSetup!.applicationName,
kibanaFeatures: features.getKibanaFeatures(),
isElasticCloudDeployment: () => cloud?.isCloudEnabled === true,
+ customLogoutURL,
});
this.authorizationService.start({
From 74911b647575838e5eebde80e2eb5b3b94eabb82 Mon Sep 17 00:00:00 2001
From: Julia Rechkunova
Date: Fri, 11 Aug 2023 17:10:55 +0200
Subject: [PATCH 22/46] [Discover] Fix dark theme issues by removing deprecated
components (#163387)
- Closes https://github.com/elastic/kibana/issues/163332
## Summary
This PR fixes dark mode issues which surfaced after
https://github.com/elastic/kibana/pull/161914 and
https://github.com/elastic/kibana/pull/163103
---------
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
---
packages/kbn-optimizer/limits.yml | 2 +-
.../sessions_mgmt/application/render.tsx | 6 +-
.../session/sessions_mgmt/components/main.tsx | 7 +--
src/plugins/data/tsconfig.json | 3 +-
.../data_view_editor/public/open_editor.tsx | 32 +++++-----
.../data_view_editor/public/plugin.test.tsx | 9 ++-
src/plugins/data_view_editor/tsconfig.json | 1 +
.../public/open_editor.tsx | 7 ++-
.../public/plugin.test.tsx | 8 +--
.../data_view_field_editor/tsconfig.json | 1 +
.../mount_management_section.tsx | 62 +++++++++++--------
.../data_view_management/tsconfig.json | 1 +
.../context/hooks/use_context_app_fetch.tsx | 33 +++++-----
.../discover/public/application/index.tsx | 21 ++++---
.../layout/discover_histogram_layout.test.tsx | 13 ++--
.../layout/discover_main_content.test.tsx | 13 ++--
.../components/top_nav/get_top_nav_links.tsx | 4 --
.../top_nav/open_alerts_popover.test.tsx | 5 +-
.../top_nav/open_alerts_popover.tsx | 31 ++++------
.../top_nav/show_open_search_panel.tsx | 17 ++---
.../main/hooks/use_alert_results_toast.tsx | 5 +-
.../application/not_found/not_found_route.tsx | 33 +++++-----
.../view_alert/view_alert_utils.tsx | 25 +++++---
.../embeddable/saved_search_embeddable.tsx | 54 ++++++++--------
src/plugins/discover/tsconfig.json | 2 +
25 files changed, 192 insertions(+), 203 deletions(-)
diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml
index d63b19f67f783..bb8c6855bc775 100644
--- a/packages/kbn-optimizer/limits.yml
+++ b/packages/kbn-optimizer/limits.yml
@@ -28,7 +28,7 @@ pageLoadAssetSize:
dashboard: 82025
dashboardEnhanced: 65646
data: 454087
- dataViewEditor: 12000
+ dataViewEditor: 13000
dataViewFieldEditor: 27000
dataViewManagement: 5000
dataViews: 47000
diff --git a/src/plugins/data/public/search/session/sessions_mgmt/application/render.tsx b/src/plugins/data/public/search/session/sessions_mgmt/application/render.tsx
index 87ceb6ee8a942..b8c2ca10ee7b0 100644
--- a/src/plugins/data/public/search/session/sessions_mgmt/application/render.tsx
+++ b/src/plugins/data/public/search/session/sessions_mgmt/application/render.tsx
@@ -8,6 +8,7 @@
import React from 'react';
import { render, unmountComponentAtNode } from 'react-dom';
+import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render';
import { createKibanaReactContext } from '@kbn/kibana-react-plugin/public';
import { AppDependencies } from '..';
import { SearchSessionsMgmtMain } from '../components/main';
@@ -20,18 +21,17 @@ export const renderApp = (
return () => undefined;
}
- const { Context: I18nContext } = i18n;
// uiSettings is required by the listing table to format dates in the timezone from Settings
const { Provider: KibanaReactContextProvider } = createKibanaReactContext({
uiSettings,
});
render(
-
+
- ,
+ ,
elem
);
diff --git a/src/plugins/data/public/search/session/sessions_mgmt/components/main.tsx b/src/plugins/data/public/search/session/sessions_mgmt/components/main.tsx
index 78da4972b49d4..69706b21dde80 100644
--- a/src/plugins/data/public/search/session/sessions_mgmt/components/main.tsx
+++ b/src/plugins/data/public/search/session/sessions_mgmt/components/main.tsx
@@ -6,11 +6,10 @@
* Side Public License, v 1.
*/
+import React from 'react';
import { EuiButtonEmpty, EuiPageHeader, EuiSpacer } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
import type { CoreStart, HttpStart } from '@kbn/core/public';
-import React from 'react';
-import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public';
import type { SearchSessionsMgmtAPI } from '../lib/api';
import type { AsyncSearchIntroDocumentation } from '../lib/documentation';
import { SearchSessionsMgmtTable } from './table';
@@ -30,7 +29,7 @@ interface Props {
export function SearchSessionsMgmtMain({ documentation, ...tableProps }: Props) {
return (
-
+ <>
-
+ >
);
}
diff --git a/src/plugins/data/tsconfig.json b/src/plugins/data/tsconfig.json
index 73eb71508a895..9d46f36ffd29c 100644
--- a/src/plugins/data/tsconfig.json
+++ b/src/plugins/data/tsconfig.json
@@ -48,7 +48,8 @@
"@kbn/core-application-browser",
"@kbn/core-saved-objects-server",
"@kbn/core-saved-objects-utils-server",
- "@kbn/data-service"
+ "@kbn/data-service",
+ "@kbn/react-kibana-context-render"
],
"exclude": [
"target/**/*",
diff --git a/src/plugins/data_view_editor/public/open_editor.tsx b/src/plugins/data_view_editor/public/open_editor.tsx
index 3f998601f38f1..04a60124ad1bf 100644
--- a/src/plugins/data_view_editor/public/open_editor.tsx
+++ b/src/plugins/data_view_editor/public/open_editor.tsx
@@ -8,11 +8,11 @@
import React from 'react';
import { CoreStart, OverlayRef } from '@kbn/core/public';
-import { I18nProvider } from '@kbn/i18n-react';
import type { DataViewsServicePublic } from '@kbn/data-views-plugin/public';
import type { DataView } from '@kbn/data-views-plugin/public';
-import { createKibanaReactContext, toMountPoint, DataPublicPluginStart } from './shared_imports';
+import { toMountPoint } from '@kbn/react-kibana-mount';
+import { createKibanaReactContext, DataPublicPluginStart } from './shared_imports';
import { CloseEditor, DataViewEditorContext, DataViewEditorProps } from './types';
import { DataViewEditorLazy } from './components/data_view_editor_lazy';
@@ -67,22 +67,20 @@ export const getEditorOpener =
overlayRef = overlays.openFlyout(
toMountPoint(
-
- {
- closeEditor();
- onCancel();
- }}
- editData={editData}
- defaultTypeIsRollup={defaultTypeIsRollup}
- requireTimestampField={requireTimestampField}
- allowAdHocDataView={allowAdHocDataView}
- showManagementLink={Boolean(editData && editData.isPersisted())}
- />
-
+ {
+ closeEditor();
+ onCancel();
+ }}
+ editData={editData}
+ defaultTypeIsRollup={defaultTypeIsRollup}
+ requireTimestampField={requireTimestampField}
+ allowAdHocDataView={allowAdHocDataView}
+ showManagementLink={Boolean(editData && editData.isPersisted())}
+ />
,
- { theme$: core.theme.theme$ }
+ { theme: core.theme, i18n: core.i18n }
),
{
hideCloseButton: true,
diff --git a/src/plugins/data_view_editor/public/plugin.test.tsx b/src/plugins/data_view_editor/public/plugin.test.tsx
index a95da2edc44f8..bc728a99a9ab7 100644
--- a/src/plugins/data_view_editor/public/plugin.test.tsx
+++ b/src/plugins/data_view_editor/public/plugin.test.tsx
@@ -64,16 +64,15 @@ describe('DataViewEditorPlugin', () => {
expect(openFlyout).toHaveBeenCalled();
- const [[arg]] = openFlyout.mock.calls;
- const i18nProvider = arg.props.children;
- expect(i18nProvider.props.children.type).toBe(DataViewEditorLazy);
+ const [[{ __reactMount__ }]] = openFlyout.mock.calls;
+ expect(__reactMount__.props.children.type).toBe(DataViewEditorLazy);
// We force call the "onSave" prop from the component
// and make sure that the the spy is being called.
// Note: we are testing implementation details, if we change or rename the "onSave" prop on
// the component, we will need to update this test accordingly.
- expect(i18nProvider.props.children.props.onSave).toBeDefined();
- i18nProvider.props.children.props.onSave();
+ expect(__reactMount__.props.children.props.onSave).toBeDefined();
+ __reactMount__.props.children.props.onSave();
expect(onSaveSpy).toHaveBeenCalled();
});
diff --git a/src/plugins/data_view_editor/tsconfig.json b/src/plugins/data_view_editor/tsconfig.json
index 99e066ee3fe66..2e7815ea009a8 100644
--- a/src/plugins/data_view_editor/tsconfig.json
+++ b/src/plugins/data_view_editor/tsconfig.json
@@ -18,6 +18,7 @@
"@kbn/test-jest-helpers",
"@kbn/ui-theme",
"@kbn/kibana-utils-plugin",
+ "@kbn/react-kibana-mount",
],
"exclude": [
"target/**/*",
diff --git a/src/plugins/data_view_field_editor/public/open_editor.tsx b/src/plugins/data_view_field_editor/public/open_editor.tsx
index ccc130ba04361..d898733c46dd2 100644
--- a/src/plugins/data_view_field_editor/public/open_editor.tsx
+++ b/src/plugins/data_view_field_editor/public/open_editor.tsx
@@ -6,9 +6,10 @@
* Side Public License, v 1.
*/
+import React from 'react';
import { CoreStart, OverlayRef } from '@kbn/core/public';
import { i18n } from '@kbn/i18n';
-import React from 'react';
+import { toMountPoint } from '@kbn/react-kibana-mount';
import { FieldEditorLoader } from './components/field_editor_loader';
import { euiFlyoutClassname } from './constants';
import type { ApiService } from './lib/api';
@@ -21,7 +22,7 @@ import type {
FieldFormatsStart,
DataViewField,
} from './shared_imports';
-import { createKibanaReactContext, toMountPoint } from './shared_imports';
+import { createKibanaReactContext } from './shared_imports';
import type { CloseEditor, Field, InternalFieldType, PluginStart } from './types';
/**
@@ -196,7 +197,7 @@ export const getFieldEditorOpener =
uiSettings={uiSettings}
/>
,
- { theme$: core.theme.theme$ }
+ { theme: core.theme, i18n: core.i18n }
),
{
className: euiFlyoutClassname,
diff --git a/src/plugins/data_view_field_editor/public/plugin.test.tsx b/src/plugins/data_view_field_editor/public/plugin.test.tsx
index 3a95f35569f07..a6609f0d7a607 100644
--- a/src/plugins/data_view_field_editor/public/plugin.test.tsx
+++ b/src/plugins/data_view_field_editor/public/plugin.test.tsx
@@ -67,15 +67,15 @@ describe('DataViewFieldEditorPlugin', () => {
expect(openFlyout).toHaveBeenCalled();
- const [[arg]] = openFlyout.mock.calls;
- expect(arg.props.children.type).toBe(FieldEditorLoader);
+ const [[{ __reactMount__ }]] = openFlyout.mock.calls;
+ expect(__reactMount__.props.children.type).toBe(FieldEditorLoader);
// We force call the "onSave" prop from the component
// and make sure that the the spy is being called.
// Note: we are testing implementation details, if we change or rename the "onSave" prop on
// the component, we will need to update this test accordingly.
- expect(arg.props.children.props.onSave).toBeDefined();
- arg.props.children.props.onSave();
+ expect(__reactMount__.props.children.props.onSave).toBeDefined();
+ __reactMount__.props.children.props.onSave();
expect(onSaveSpy).toHaveBeenCalled();
});
diff --git a/src/plugins/data_view_field_editor/tsconfig.json b/src/plugins/data_view_field_editor/tsconfig.json
index 264c9fdb59035..43512e56fe17f 100644
--- a/src/plugins/data_view_field_editor/tsconfig.json
+++ b/src/plugins/data_view_field_editor/tsconfig.json
@@ -26,6 +26,7 @@
"@kbn/field-types",
"@kbn/utility-types",
"@kbn/config-schema",
+ "@kbn/react-kibana-mount",
],
"exclude": [
"target/**/*",
diff --git a/src/plugins/data_view_management/public/management_app/mount_management_section.tsx b/src/plugins/data_view_management/public/management_app/mount_management_section.tsx
index c1125177b03db..d7b21b395fdde 100644
--- a/src/plugins/data_view_management/public/management_app/mount_management_section.tsx
+++ b/src/plugins/data_view_management/public/management_app/mount_management_section.tsx
@@ -12,10 +12,9 @@ import { Redirect } from 'react-router-dom';
import { Router, Routes, Route } from '@kbn/shared-ux-router';
import { i18n } from '@kbn/i18n';
-import { I18nProvider } from '@kbn/i18n-react';
import { StartServicesAccessor } from '@kbn/core/public';
-
-import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public';
+import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render';
+import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
import { ManagementAppMountParams } from '@kbn/management-plugin/public';
import {
IndexPatternTableWithRouter,
@@ -40,7 +39,18 @@ export async function mountManagementSection(
params: ManagementAppMountParams
) {
const [
- { application, chrome, uiSettings, settings, notifications, overlays, http, docLinks, theme },
+ {
+ application,
+ chrome,
+ uiSettings,
+ settings,
+ notifications,
+ overlays,
+ http,
+ docLinks,
+ theme,
+ i18n: coreI18n,
+ },
{
data,
dataViewFieldEditor,
@@ -83,29 +93,27 @@ export async function mountManagementSection(
};
ReactDOM.render(
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ,
params.element
);
diff --git a/src/plugins/data_view_management/tsconfig.json b/src/plugins/data_view_management/tsconfig.json
index 1f1ec7282f046..88b3e84cc23f3 100644
--- a/src/plugins/data_view_management/tsconfig.json
+++ b/src/plugins/data_view_management/tsconfig.json
@@ -34,6 +34,7 @@
"@kbn/config-schema",
"@kbn/shared-ux-router",
"@kbn/core-ui-settings-browser",
+ "@kbn/react-kibana-context-render",
],
"exclude": [
"target/**/*",
diff --git a/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx b/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx
index a2069f22c97c0..743e503227e78 100644
--- a/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx
+++ b/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx
@@ -7,7 +7,8 @@
*/
import React, { useCallback, useMemo, useState } from 'react';
import { i18n } from '@kbn/i18n';
-import { MarkdownSimple, toMountPoint, wrapWithTheme } from '@kbn/kibana-react-plugin/public';
+import { toMountPoint } from '@kbn/react-kibana-mount';
+import { MarkdownSimple } from '@kbn/kibana-react-plugin/public';
import type { DataView } from '@kbn/data-views-plugin/public';
import { SortDirection } from '@kbn/data-plugin/public';
import type { DataTableRecord } from '@kbn/discover-utils/types';
@@ -42,8 +43,7 @@ export function useContextAppFetch({
useNewFieldsApi,
}: ContextAppFetchProps) {
const services = useDiscoverServices();
- const { uiSettings: config, data, toastNotifications, filterManager, core } = services;
- const { theme$ } = core.theme;
+ const { uiSettings: config, data, toastNotifications, filterManager } = services;
const searchSource = useMemo(() => {
return data.search.searchSource.createEmpty();
@@ -70,16 +70,9 @@ export function useContextAppFetch({
setState(createError('anchorStatus', FailureReason.INVALID_TIEBREAKER));
toastNotifications.addDanger({
title: errorTitle,
- text: toMountPoint(
- wrapWithTheme(
-
- {i18n.translate('discover.context.invalidTieBreakerFiledSetting', {
- defaultMessage: 'Invalid tie breaker field setting',
- })}
- ,
- theme$
- )
- ),
+ text: i18n.translate('discover.context.invalidTieBreakerFiledSetting', {
+ defaultMessage: 'Invalid tie breaker field setting',
+ }),
});
return;
}
@@ -108,7 +101,10 @@ export function useContextAppFetch({
setState(createError('anchorStatus', FailureReason.UNKNOWN, error));
toastNotifications.addDanger({
title: errorTitle,
- text: toMountPoint(wrapWithTheme({error.message} , theme$)),
+ text: toMountPoint({error.message} , {
+ theme: services.core.theme,
+ i18n: services.core.i18n,
+ }),
});
}
}, [
@@ -120,7 +116,6 @@ export function useContextAppFetch({
anchorId,
searchSource,
useNewFieldsApi,
- theme$,
]);
const fetchSurroundingRows = useCallback(
@@ -161,9 +156,10 @@ export function useContextAppFetch({
setState(createError(statusKey, FailureReason.UNKNOWN, error));
toastNotifications.addDanger({
title: errorTitle,
- text: toMountPoint(
- wrapWithTheme({error.message} , theme$)
- ),
+ text: toMountPoint({error.message} , {
+ theme: services.core.theme,
+ i18n: services.core.i18n,
+ }),
});
}
},
@@ -177,7 +173,6 @@ export function useContextAppFetch({
dataView,
toastNotifications,
useNewFieldsApi,
- theme$,
data,
]
);
diff --git a/src/plugins/discover/public/application/index.tsx b/src/plugins/discover/public/application/index.tsx
index b8a24be2b2fcc..a9571e08e21ad 100644
--- a/src/plugins/discover/public/application/index.tsx
+++ b/src/plugins/discover/public/application/index.tsx
@@ -8,7 +8,7 @@
import React from 'react';
import { i18n } from '@kbn/i18n';
-import { toMountPoint, wrapWithTheme } from '@kbn/kibana-react-plugin/public';
+import { toMountPoint } from '@kbn/react-kibana-mount';
import { DiscoverRouter } from './discover_router';
import { DiscoverServices } from '../build_services';
import type { DiscoverProfileRegistry } from '../customizations/profile_registry';
@@ -36,15 +36,16 @@ export const renderApp = ({ element, services, profileRegistry, isDev }: RenderA
});
}
const unmount = toMountPoint(
- wrapWithTheme(
- ,
- core.theme.theme$
- )
+ ,
+ {
+ theme: core.theme,
+ i18n: core.i18n,
+ }
)(element);
return () => {
diff --git a/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.test.tsx b/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.test.tsx
index 48c9a3306dd12..d7066306ee8d1 100644
--- a/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.test.tsx
+++ b/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.test.tsx
@@ -20,12 +20,11 @@ import {
} from '../../services/discover_data_state_container';
import { discoverServiceMock } from '../../../../__mocks__/services';
import { FetchStatus } from '../../../types';
-import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public';
+import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render';
import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
import { buildDataTableRecord } from '@kbn/discover-utils';
import { DiscoverHistogramLayout, DiscoverHistogramLayoutProps } from './discover_histogram_layout';
import { SavedSearch, VIEW_MODE } from '@kbn/saved-search-plugin/public';
-import { CoreTheme } from '@kbn/core/public';
import { Storage } from '@kbn/kibana-utils-plugin/public';
import { createSearchSessionMock } from '../../../../__mocks__/search_session';
import { searchSourceInstanceMock } from '@kbn/data-plugin/common/search/search_source/mocks';
@@ -127,16 +126,14 @@ const mountComponent = async ({
};
stateContainer.searchSessionManager = createSearchSessionMock(session).searchSessionManager;
- const coreTheme$ = new BehaviorSubject({ darkMode: false });
-
const component = mountWithIntl(
-
-
+
+
-
-
+
+
);
// wait for lazy modules
diff --git a/src/plugins/discover/public/application/main/components/layout/discover_main_content.test.tsx b/src/plugins/discover/public/application/main/components/layout/discover_main_content.test.tsx
index 81b774a0aff0d..2901b49de1586 100644
--- a/src/plugins/discover/public/application/main/components/layout/discover_main_content.test.tsx
+++ b/src/plugins/discover/public/application/main/components/layout/discover_main_content.test.tsx
@@ -20,12 +20,11 @@ import {
} from '../../services/discover_data_state_container';
import { createDiscoverServicesMock } from '../../../../__mocks__/services';
import { FetchStatus } from '../../../types';
-import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public';
+import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render';
import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
import { buildDataTableRecord } from '@kbn/discover-utils';
import { DiscoverMainContent, DiscoverMainContentProps } from './discover_main_content';
import { SavedSearch, VIEW_MODE } from '@kbn/saved-search-plugin/public';
-import { CoreTheme } from '@kbn/core/public';
import { DocumentViewModeToggle } from '../../../../components/view_mode_toggle';
import { searchSourceInstanceMock } from '@kbn/data-plugin/common/search/search_source/mocks';
import { DiscoverDocuments } from './discover_documents';
@@ -105,16 +104,14 @@ const mountComponent = async ({
onAddFilter: jest.fn(),
};
- const coreTheme$ = new BehaviorSubject({ darkMode: false });
-
const component = mountWithIntl(
-
-
+
+
-
-
+
+
);
await act(async () => {
diff --git a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx
index ba2f3148075ce..2b406e6a45682 100644
--- a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx
+++ b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx
@@ -49,8 +49,6 @@ export const getTopNavLinks = ({
}),
run: async (anchorElement: HTMLElement) => {
openAlertsPopover({
- I18nContext: services.core.i18n.Context,
- theme$: services.core.theme.theme$,
anchorElement,
services,
stateContainer: state,
@@ -107,8 +105,6 @@ export const getTopNavLinks = ({
run: () =>
showOpenSearchPanel({
onOpenSavedSearch: state.actions.onOpenSavedSearch,
- I18nContext: services.core.i18n.Context,
- theme$: services.core.theme.theme$,
services,
}),
};
diff --git a/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.test.tsx b/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.test.tsx
index 60290869f3a05..03e5712df5e2e 100644
--- a/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.test.tsx
+++ b/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.test.tsx
@@ -6,7 +6,7 @@
* Side Public License, v 1.
*/
-import React, { ReactNode } from 'react';
+import React from 'react';
import { mountWithIntl } from '@kbn/test-jest-helpers';
import { findTestSubject } from '@elastic/eui/lib/test';
import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
@@ -16,8 +16,6 @@ import { dataViewWithTimefieldMock } from '../../../../__mocks__/data_view_with_
import { dataViewMock } from '@kbn/discover-utils/src/__mocks__';
import { getDiscoverStateMock } from '../../../../__mocks__/discover_state.mock';
-const Context = ({ children }: { children: ReactNode }) => <>{children}>;
-
const mount = (dataView = dataViewMock) => {
const stateContainer = getDiscoverStateMock({ isTimeBased: true });
stateContainer.actions.setDataView(dataView);
@@ -29,7 +27,6 @@ const mount = (dataView = dataViewMock) => {
adHocDataViews={[]}
services={discoverServiceMock}
onClose={jest.fn()}
- I18nContext={Context}
/>
);
diff --git a/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx b/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx
index f722bc5558bee..75202710945dd 100644
--- a/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx
+++ b/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx
@@ -8,12 +8,11 @@
import React, { useCallback, useState, useMemo } from 'react';
import ReactDOM from 'react-dom';
-import type { Observable } from 'rxjs';
-import type { CoreTheme, I18nStart } from '@kbn/core/public';
import { EuiWrappingPopover, EuiContextMenu } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
import type { DataView } from '@kbn/data-plugin/common';
-import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public';
+import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render';
+import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
import { DiscoverStateContainer } from '../../services/discover_state';
import { DiscoverServices } from '../../../../build_services';
@@ -28,7 +27,6 @@ interface AlertsPopoverProps {
stateContainer: DiscoverStateContainer;
savedQueryId?: string;
adHocDataViews: DataView[];
- I18nContext: I18nStart['Context'];
services: DiscoverServices;
}
@@ -163,15 +161,11 @@ function closeAlertsPopover() {
}
export function openAlertsPopover({
- I18nContext,
- theme$,
anchorElement,
stateContainer,
services,
adHocDataViews,
}: {
- I18nContext: I18nStart['Context'];
- theme$: Observable;
anchorElement: HTMLElement;
stateContainer: DiscoverStateContainer;
services: DiscoverServices;
@@ -186,20 +180,17 @@ export function openAlertsPopover({
document.body.appendChild(container);
const element = (
-
+
-
-
-
+
-
+
);
ReactDOM.render(element, container);
}
diff --git a/src/plugins/discover/public/application/main/components/top_nav/show_open_search_panel.tsx b/src/plugins/discover/public/application/main/components/top_nav/show_open_search_panel.tsx
index b437a753af37d..c9d5dd12b544e 100644
--- a/src/plugins/discover/public/application/main/components/top_nav/show_open_search_panel.tsx
+++ b/src/plugins/discover/public/application/main/components/top_nav/show_open_search_panel.tsx
@@ -8,23 +8,18 @@
import React from 'react';
import ReactDOM from 'react-dom';
-import { CoreTheme, I18nStart } from '@kbn/core/public';
-import { Observable } from 'rxjs';
-import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public';
+import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render';
+import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
import { DiscoverServices } from '../../../../build_services';
import { OpenSearchPanel } from './open_search_panel';
let isOpen = false;
export function showOpenSearchPanel({
- I18nContext,
onOpenSavedSearch,
- theme$,
services,
}: {
- I18nContext: I18nStart['Context'];
onOpenSavedSearch: (id: string) => void;
- theme$: Observable;
services: DiscoverServices;
}) {
if (isOpen) {
@@ -41,13 +36,11 @@ export function showOpenSearchPanel({
document.body.appendChild(container);
const element = (
-
+
-
-
-
+
-
+
);
ReactDOM.render(element, container);
}
diff --git a/src/plugins/discover/public/application/main/hooks/use_alert_results_toast.tsx b/src/plugins/discover/public/application/main/hooks/use_alert_results_toast.tsx
index 424cd554ecd15..f0140a275da18 100644
--- a/src/plugins/discover/public/application/main/hooks/use_alert_results_toast.tsx
+++ b/src/plugins/discover/public/application/main/hooks/use_alert_results_toast.tsx
@@ -6,10 +6,9 @@
* Side Public License, v 1.
*/
+import { useEffect } from 'react';
import { ToastsStart } from '@kbn/core/public';
import { i18n } from '@kbn/i18n';
-import { MarkdownSimple, toMountPoint } from '@kbn/kibana-react-plugin/public';
-import React, { useEffect } from 'react';
export const displayPossibleDocsDiffInfoAlert = (toastNotifications: ToastsStart) => {
const infoTitle = i18n.translate('discover.viewAlert.documentsMayVaryInfoTitle', {
@@ -22,7 +21,7 @@ export const displayPossibleDocsDiffInfoAlert = (toastNotifications: ToastsStart
toastNotifications.addInfo({
title: infoTitle,
- text: toMountPoint({infoDescription} ),
+ text: infoDescription,
});
};
diff --git a/src/plugins/discover/public/application/not_found/not_found_route.tsx b/src/plugins/discover/public/application/not_found/not_found_route.tsx
index e3a6e665e95ae..4b2aa2b990221 100644
--- a/src/plugins/discover/public/application/not_found/not_found_route.tsx
+++ b/src/plugins/discover/public/application/not_found/not_found_route.tsx
@@ -10,7 +10,7 @@ import { i18n } from '@kbn/i18n';
import { EuiCallOut } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
import { Redirect } from 'react-router-dom';
-import { toMountPoint, wrapWithTheme } from '@kbn/kibana-react-plugin/public';
+import { toMountPoint } from '@kbn/react-kibana-mount';
import { getUrlTracker } from '../../kibana_services';
import { useDiscoverServices } from '../../hooks/use_discover_services';
@@ -33,20 +33,21 @@ export function NotFoundRoute() {
bannerId = core.overlays.banners.replace(
bannerId,
toMountPoint(
- wrapWithTheme(
-
-
-
-
- ,
- core.theme.theme$
- )
+
+
+
+
+ ,
+ {
+ theme: core.theme,
+ i18n: core.i18n,
+ }
)
);
@@ -56,7 +57,7 @@ export function NotFoundRoute() {
core.overlays.banners.remove(bannerId);
}
}, 15000);
- }, [core.overlays.banners, history, urlForwarding, core.theme.theme$]);
+ }, [core, history, urlForwarding]);
return ;
}
diff --git a/src/plugins/discover/public/application/view_alert/view_alert_utils.tsx b/src/plugins/discover/public/application/view_alert/view_alert_utils.tsx
index f29fd7d40b51b..d8a7bfeae9b34 100644
--- a/src/plugins/discover/public/application/view_alert/view_alert_utils.tsx
+++ b/src/plugins/discover/public/application/view_alert/view_alert_utils.tsx
@@ -14,7 +14,8 @@ import type { Rule } from '@kbn/alerting-plugin/common';
import type { RuleTypeParams } from '@kbn/alerting-plugin/common';
import { ISearchSource, SerializedSearchSourceFields, getTime } from '@kbn/data-plugin/common';
import type { DataPublicPluginStart } from '@kbn/data-plugin/public';
-import { MarkdownSimple, toMountPoint } from '@kbn/kibana-react-plugin/public';
+import { MarkdownSimple } from '@kbn/kibana-react-plugin/public';
+import { toMountPoint } from '@kbn/react-kibana-mount';
import { Filter } from '@kbn/es-query';
import { DiscoverAppLocatorParams } from '../../../common/locator';
@@ -55,13 +56,15 @@ export const getAlertUtils = (
const errorTitle = i18n.translate('discover.viewAlert.dataViewErrorTitle', {
defaultMessage: 'Error fetching data view',
});
+ const errorText = i18n.translate('discover.viewAlert.dataViewErrorText', {
+ defaultMessage: 'Data view failure of the alert rule with id {alertId}.',
+ values: {
+ alertId,
+ },
+ });
toastNotifications.addDanger({
title: errorTitle,
- text: toMountPoint(
-
- {new Error(`Data view failure of the alert rule with id ${alertId}.`).message}
-
- ),
+ text: errorText,
});
};
@@ -76,7 +79,10 @@ export const getAlertUtils = (
});
toastNotifications.addDanger({
title: errorTitle,
- text: toMountPoint({error.message} ),
+ text: toMountPoint({error.message} , {
+ theme: core.theme,
+ i18n: core.i18n,
+ }),
});
throw new Error(errorTitle);
}
@@ -96,7 +102,10 @@ export const getAlertUtils = (
});
toastNotifications.addDanger({
title: errorTitle,
- text: toMountPoint({error.message} ),
+ text: toMountPoint({error.message} , {
+ theme: core.theme,
+ i18n: core.i18n,
+ }),
});
throw new Error(errorTitle);
}
diff --git a/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx b/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx
index f65582ee38290..23e22de975ec3 100644
--- a/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx
+++ b/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx
@@ -18,7 +18,6 @@ import React from 'react';
import ReactDOM, { unmountComponentAtNode } from 'react-dom';
import { i18n } from '@kbn/i18n';
import { isEqual } from 'lodash';
-import { I18nProvider } from '@kbn/i18n-react';
import type { KibanaExecutionContext } from '@kbn/core/public';
import {
Container,
@@ -41,7 +40,8 @@ import {
import type { ISearchSource } from '@kbn/data-plugin/public';
import type { DataView, DataViewField } from '@kbn/data-views-plugin/public';
import type { UiActionsStart } from '@kbn/ui-actions-plugin/public';
-import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public';
+import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render';
+import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
import type { SavedSearch } from '@kbn/saved-search-plugin/public';
import { METRIC_TYPE } from '@kbn/analytics';
import { CellActionsProvider } from '@kbn/cell-actions';
@@ -639,21 +639,22 @@ export class SavedSearchEmbeddable
Array.isArray(searchProps.columns)
) {
ReactDOM.render(
-
-
-
-
-
-
- ,
+
+
+
+
+ ,
domNode
);
@@ -678,15 +679,16 @@ export class SavedSearchEmbeddable
const { getTriggerCompatibleActions } = searchProps.services.uiActions;
ReactDOM.render(
-
-
-
-
-
-
-
-
- ,
+
+
+
+
+
+
+ ,
domNode
);
diff --git a/src/plugins/discover/tsconfig.json b/src/plugins/discover/tsconfig.json
index 9fcaaeccd7b91..6e3ccd93599d0 100644
--- a/src/plugins/discover/tsconfig.json
+++ b/src/plugins/discover/tsconfig.json
@@ -67,6 +67,8 @@
"@kbn/discover-utils",
"@kbn/search-response-warnings",
"@kbn/content-management-plugin",
+ "@kbn/react-kibana-mount",
+ "@kbn/react-kibana-context-render"
],
"exclude": [
"target/**/*"
From f73746d73b1e868d9962426dcf42196a0df3d4b8 Mon Sep 17 00:00:00 2001
From: Cristina Amico
Date: Fri, 11 Aug 2023 17:29:24 +0200
Subject: [PATCH 23/46] [Fleet] Remove unneeded deprecation from openapi specs
(#163717)
## Summary
In https://github.com/elastic/kibana/pull/161064 the deprecation of the
parameter `kuery` was removed but I forgot to update the openapi specs.
Here I'm fixing it.
### Checklist
- [ ]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
---
x-pack/plugins/fleet/common/openapi/bundled.json | 1 -
x-pack/plugins/fleet/common/openapi/bundled.yaml | 1 -
.../fleet/common/openapi/components/parameters/kuery.yaml | 1 -
3 files changed, 3 deletions(-)
diff --git a/x-pack/plugins/fleet/common/openapi/bundled.json b/x-pack/plugins/fleet/common/openapi/bundled.json
index 200cebba48cc7..7cc33b7dc96e8 100644
--- a/x-pack/plugins/fleet/common/openapi/bundled.json
+++ b/x-pack/plugins/fleet/common/openapi/bundled.json
@@ -5406,7 +5406,6 @@
"name": "kuery",
"in": "query",
"required": false,
- "deprecated": true,
"schema": {
"type": "string"
}
diff --git a/x-pack/plugins/fleet/common/openapi/bundled.yaml b/x-pack/plugins/fleet/common/openapi/bundled.yaml
index 6c216e464a104..c09c37146a37b 100644
--- a/x-pack/plugins/fleet/common/openapi/bundled.yaml
+++ b/x-pack/plugins/fleet/common/openapi/bundled.yaml
@@ -3363,7 +3363,6 @@ components:
name: kuery
in: query
required: false
- deprecated: true
schema:
type: string
show_inactive:
diff --git a/x-pack/plugins/fleet/common/openapi/components/parameters/kuery.yaml b/x-pack/plugins/fleet/common/openapi/components/parameters/kuery.yaml
index 0ef22394e5198..b96ffd54d37ce 100644
--- a/x-pack/plugins/fleet/common/openapi/components/parameters/kuery.yaml
+++ b/x-pack/plugins/fleet/common/openapi/components/parameters/kuery.yaml
@@ -1,6 +1,5 @@
name: kuery
in: query
required: false
-deprecated: true
schema:
type: string
From 4de61111b14b59d2b57758a35ef47618c3a9ba46 Mon Sep 17 00:00:00 2001
From: Devon Thomson
Date: Fri, 11 Aug 2023 12:15:18 -0400
Subject: [PATCH 24/46] [Dashboard] Fix missing state on short URL alias match
redirect (#163658)
Fixes an issue where URL state from short URLs could be lost on an alias match redirect.
---
.../create/create_dashboard.test.ts | 20 ++++++++++++++++++-
.../embeddable/create/create_dashboard.ts | 2 +-
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts b/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts
index 5c1165dc68c5d..43e8f5ea5933e 100644
--- a/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts
+++ b/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts
@@ -51,7 +51,7 @@ test('throws error when provided validation function returns invalid', async ()
}).rejects.toThrow('Dashboard failed saved object result validation');
});
-test('returns undefined when provided validation function returns redireted', async () => {
+test('returns undefined when provided validation function returns redirected', async () => {
const creationOptions: DashboardCreationOptions = {
validateLoadedSavedObject: jest.fn().mockImplementation(() => 'redirected'),
};
@@ -59,6 +59,24 @@ test('returns undefined when provided validation function returns redireted', as
expect(dashboard).toBeUndefined();
});
+/**
+ * Because the getInitialInput function may have side effects, we only want to call it once we are certain that the
+ * the loaded saved object passes validation.
+ *
+ * This is especially relevant in the Dashboard App case where calling the getInitialInput function removes the _a
+ * param from the URL. In alais match situations this caused a bug where the state from the URL wasn't properly applied
+ * after the redirect.
+ */
+test('does not get initial input when provided validation function returns redirected', async () => {
+ const creationOptions: DashboardCreationOptions = {
+ validateLoadedSavedObject: jest.fn().mockImplementation(() => 'redirected'),
+ getInitialInput: jest.fn(),
+ };
+ const dashboard = await createDashboard(creationOptions, 0, 'test-id');
+ expect(dashboard).toBeUndefined();
+ expect(creationOptions.getInitialInput).not.toHaveBeenCalled();
+});
+
test('pulls state from dashboard saved object when given a saved object id', async () => {
pluginServices.getServices().dashboardContentManagement.loadDashboardState = jest
.fn()
diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts b/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts
index a595bca8c1841..753b881e5a94e 100644
--- a/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts
+++ b/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts
@@ -137,7 +137,6 @@ export const initializeDashboard = async ({
useUnifiedSearchIntegration,
useSessionStorageIntegration,
} = creationOptions ?? {};
- const overrideInput = getInitialInput?.();
// --------------------------------------------------------------------------------------
// Run validation.
@@ -161,6 +160,7 @@ export const initializeDashboard = async ({
// --------------------------------------------------------------------------------------
// Combine input from saved object, session storage, & passed input to create initial input.
// --------------------------------------------------------------------------------------
+ const overrideInput = getInitialInput?.();
const initialInput: DashboardContainerInput = cloneDeep({
...DEFAULT_DASHBOARD_INPUT,
...(loadDashboardReturn?.dashboardInput ?? {}),
From 00ffe1d791bc0dca069f3d73bb600b162d29a911 Mon Sep 17 00:00:00 2001
From: Kerry Gallagher
Date: Fri, 11 Aug 2023 17:18:55 +0100
Subject: [PATCH 25/46] [Logs+] Create an integration while on-boarding logs
(#163219)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## Summary
This closes https://github.com/elastic/kibana/issues/161960, a basic
integration will now be created whilst onboarding logs (though the
custom logs flow).
This implements the *initial* version of this work, and does not include
things like adding a dataset to an existing integration.
## UI / UX
General:
![Screenshot 2023-08-07 at 15 20
21](https://github.com/elastic/kibana/assets/471693/3ca4e300-41c3-4554-a095-0f3dcf9e9523)
Naming conflict errors:
![Screenshot 2023-08-11 at 13 34
45](https://github.com/elastic/kibana/assets/471693/2a138eac-73e2-4cc9-b1e8-56c586b852ee)
![Screenshot 2023-08-11 at 13 34
59](https://github.com/elastic/kibana/assets/471693/6e651de9-debd-46aa-a3d5-2b6eb4e3bb4f)
Lack of permissions error:
![Screenshot 2023-08-09 at 17 10
35](https://github.com/elastic/kibana/assets/471693/d47b40c8-fe4a-4b86-abf8-d8fda51515fd)
General errors:
![Screenshot 2023-08-07 at 16 49
40](https://github.com/elastic/kibana/assets/471693/346c28d0-ec3e-4f7e-ae16-3f1adf440c21)
Success callout on the next panel:
![Screenshot 2023-08-07 at 17 20
45](https://github.com/elastic/kibana/assets/471693/03e78e45-871b-4224-9999-5b3d7e2ccdf0)
Delete previous flow (happens in the background):
![delete_process](https://github.com/elastic/kibana/assets/471693/44c18793-9df7-4228-b351-5668f098e138)
## Pointers for reviewers / next steps
- This PR also creates a new package for the `useTrackedPromise` hook,
as this is used in several places and I didn't want to just duplicate it
again (I haven't replaced other current uses in this PR, but will as a
followup).
- `useFetcher` was avoided as A) it's very tightly coupled with the
observability onboarding server route repository (and `callApi` is
scoped to this) and I wanted to call an "external" API in Fleet and B) I
wanted explicit control over when the request is dispatched (not on
mount), and whilst this can sort of be achieved by not returning a
promise from the callback it gets quite messy. I also wanted more
granular error handling control.
- Moving forward I think we'll need to enhance the state management of
the plugin. We'll want to add the ability to "add to existing
integration" and this is going to make the state more complex (even with
chunks of this functionality likely moved to it's own package). I did
actually have the Wizard state moved in to a constate container at one
point (as a starter) but I reverted this commit to make the changeset
less intrusive. It's for this same reason that, for now, I haven't
focussed too closely on extracting things like generating the friendly
error messages etc as we'll likely want to extract some of the "create
integration" hooks / UI in to a standalone package so they can be used
elsewhere (not just onboarding). There are also quite a few `
eslint-disable-next-line react-hooks/exhaustive-deps` rules in the
plugin at the moment due to the references not being stable, we could
improve that at the same time as any state changes.
- You can technically navigate directly to
`/fox/app/observabilityOnboarding/customLogs/installElasticAgent`, but
no state is stored in the URL, so nothing is rehydrated resulting in a
very empty configuration. I'm not entirely sure this is a behaviour we
want, but for now I've just made the callout conditional on state
existing (so coming from the previous panel).
- The Fleet custom integrations API now throws a 409 (conflict) when
using a name that already exists.
## Testing
- Head to `/app/observabilityOnboarding` to trigger the onboarding flow
- Select "Stream log files"
- When hitting "continue" an integration should be created in the
background (check the network requests for
`api/fleet/epm/custom_integrations`)
- When continuing (to install shipper), then going back **and** making
changes to your integration options, when clicking continue again there
should be a network request that deletes the previously created
integration (to clean things up). This should be seamless to the user.
- You should not be able to use a name that already exists (for an
existing custom integration)
- General errors (like permission issues, asset installation issues)
should display at the bottom
- When you hit the next panel (install shipper) there should be a
success callout that also contains the name of the integration that was
created
## In progress
~Two changes still in progress, but they don't need to hold up the
review (8.10 coming soon 👀):~
- ~To have a friendlier error for permissions issues (not just
"forbidden")~
- ~Fleet API integration test for the naming collision~
---------
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
---
.github/CODEOWNERS | 1 +
package.json | 1 +
packages/kbn-use-tracked-promise/README.md | 62 +++
packages/kbn-use-tracked-promise/index.ts | 9 +
.../kbn-use-tracked-promise/jest.config.js | 13 +
packages/kbn-use-tracked-promise/kibana.jsonc | 5 +
packages/kbn-use-tracked-promise/package.json | 6 +
.../kbn-use-tracked-promise/tsconfig.json | 17 +
.../use_tracked_promise.ts | 300 +++++++++++++++
tsconfig.base.json | 2 +
.../fleet/server/routes/epm/handlers.ts | 55 ++-
.../validation/check_naming_collision.ts | 88 +++++
.../server/services/epm/packages/install.ts | 4 +
.../app/custom_logs/wizard/configure_logs.tsx | 360 ++++++++++++++----
.../app/custom_logs/wizard/index.tsx | 4 +
.../wizard/install_elastic_agent.tsx | 19 +
.../public/hooks/use_create_integration.ts | 123 ++++++
.../observability_onboarding/tsconfig.json | 1 +
.../apis/epm/install_custom.ts | 87 ++++-
yarn.lock | 4 +
20 files changed, 1055 insertions(+), 106 deletions(-)
create mode 100644 packages/kbn-use-tracked-promise/README.md
create mode 100644 packages/kbn-use-tracked-promise/index.ts
create mode 100644 packages/kbn-use-tracked-promise/jest.config.js
create mode 100644 packages/kbn-use-tracked-promise/kibana.jsonc
create mode 100644 packages/kbn-use-tracked-promise/package.json
create mode 100644 packages/kbn-use-tracked-promise/tsconfig.json
create mode 100644 packages/kbn-use-tracked-promise/use_tracked_promise.ts
create mode 100644 x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/validation/check_naming_collision.ts
create mode 100644 x-pack/plugins/observability_onboarding/public/hooks/use_create_integration.ts
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 15a828ac76a94..669896f817592 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -752,6 +752,7 @@ src/plugins/url_forwarding @elastic/kibana-visualizations
packages/kbn-url-state @elastic/security-threat-hunting-investigations
src/plugins/usage_collection @elastic/kibana-core
test/plugin_functional/plugins/usage_collection @elastic/kibana-core
+packages/kbn-use-tracked-promise @elastic/infra-monitoring-ui
packages/kbn-user-profile-components @elastic/kibana-security
examples/user_profile_examples @elastic/kibana-security
x-pack/test/security_api_integration/plugins/user_profiles_consumer @elastic/kibana-security
diff --git a/package.json b/package.json
index 27016cdefdb0b..ce692cf389e2e 100644
--- a/package.json
+++ b/package.json
@@ -741,6 +741,7 @@
"@kbn/url-state": "link:packages/kbn-url-state",
"@kbn/usage-collection-plugin": "link:src/plugins/usage_collection",
"@kbn/usage-collection-test-plugin": "link:test/plugin_functional/plugins/usage_collection",
+ "@kbn/use-tracked-promise": "link:packages/kbn-use-tracked-promise",
"@kbn/user-profile-components": "link:packages/kbn-user-profile-components",
"@kbn/user-profile-examples-plugin": "link:examples/user_profile_examples",
"@kbn/user-profiles-consumer-plugin": "link:x-pack/test/security_api_integration/plugins/user_profiles_consumer",
diff --git a/packages/kbn-use-tracked-promise/README.md b/packages/kbn-use-tracked-promise/README.md
new file mode 100644
index 0000000000000..276f0ba0e9b5a
--- /dev/null
+++ b/packages/kbn-use-tracked-promise/README.md
@@ -0,0 +1,62 @@
+# @kbn/use-tracked-promise
+
+/**
+ * This hook manages a Promise factory and can create new Promises from it. The
+ * state of these Promises is tracked and they can be canceled when superseded
+ * to avoid race conditions.
+ *
+ * ```
+ * const [requestState, performRequest] = useTrackedPromise(
+ * {
+ * cancelPreviousOn: 'resolution',
+ * createPromise: async (url: string) => {
+ * return await fetchSomething(url)
+ * },
+ * onResolve: response => {
+ * setSomeState(response.data);
+ * },
+ * onReject: response => {
+ * setSomeError(response);
+ * },
+ * },
+ * [fetchSomething]
+ * );
+ * ```
+ *
+ * The `onResolve` and `onReject` handlers are registered separately, because
+ * the hook will inject a rejection when in case of a canellation. The
+ * `cancelPreviousOn` attribute can be used to indicate when the preceding
+ * pending promises should be canceled:
+ *
+ * 'never': No preceding promises will be canceled.
+ *
+ * 'creation': Any preceding promises will be canceled as soon as a new one is
+ * created.
+ *
+ * 'settlement': Any preceding promise will be canceled when a newer promise is
+ * resolved or rejected.
+ *
+ * 'resolution': Any preceding promise will be canceled when a newer promise is
+ * resolved.
+ *
+ * 'rejection': Any preceding promise will be canceled when a newer promise is
+ * rejected.
+ *
+ * Any pending promises will be canceled when the component using the hook is
+ * unmounted, but their status will not be tracked to avoid React warnings
+ * about memory leaks.
+ *
+ * The last argument is a normal React hook dependency list that indicates
+ * under which conditions a new reference to the configuration object should be
+ * used.
+ *
+ * The `onResolve`, `onReject` and possible uncatched errors are only triggered
+ * if the underlying component is mounted. To ensure they always trigger (i.e.
+ * if the promise is called in a `useLayoutEffect`) use the `triggerOrThrow`
+ * attribute:
+ *
+ * 'whenMounted': (default) they are called only if the component is mounted.
+ *
+ * 'always': they always call. The consumer is then responsible of ensuring no
+ * side effects happen if the underlying component is not mounted.
+ */
\ No newline at end of file
diff --git a/packages/kbn-use-tracked-promise/index.ts b/packages/kbn-use-tracked-promise/index.ts
new file mode 100644
index 0000000000000..fb7dece295579
--- /dev/null
+++ b/packages/kbn-use-tracked-promise/index.ts
@@ -0,0 +1,9 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+export { useTrackedPromise } from './use_tracked_promise';
diff --git a/packages/kbn-use-tracked-promise/jest.config.js b/packages/kbn-use-tracked-promise/jest.config.js
new file mode 100644
index 0000000000000..3cc6b8f82572f
--- /dev/null
+++ b/packages/kbn-use-tracked-promise/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-use-tracked-promise'],
+};
diff --git a/packages/kbn-use-tracked-promise/kibana.jsonc b/packages/kbn-use-tracked-promise/kibana.jsonc
new file mode 100644
index 0000000000000..a7b90045c462a
--- /dev/null
+++ b/packages/kbn-use-tracked-promise/kibana.jsonc
@@ -0,0 +1,5 @@
+{
+ "type": "shared-common",
+ "id": "@kbn/use-tracked-promise",
+ "owner": "@elastic/infra-monitoring-ui"
+}
diff --git a/packages/kbn-use-tracked-promise/package.json b/packages/kbn-use-tracked-promise/package.json
new file mode 100644
index 0000000000000..a099336423e87
--- /dev/null
+++ b/packages/kbn-use-tracked-promise/package.json
@@ -0,0 +1,6 @@
+{
+ "name": "@kbn/use-tracked-promise",
+ "private": true,
+ "version": "1.0.0",
+ "license": "SSPL-1.0 OR Elastic License 2.0"
+}
\ No newline at end of file
diff --git a/packages/kbn-use-tracked-promise/tsconfig.json b/packages/kbn-use-tracked-promise/tsconfig.json
new file mode 100644
index 0000000000000..2f9ddddbeea23
--- /dev/null
+++ b/packages/kbn-use-tracked-promise/tsconfig.json
@@ -0,0 +1,17 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "target/types",
+ "types": [
+ "jest",
+ "node"
+ ]
+ },
+ "include": [
+ "**/*.ts",
+ ],
+ "exclude": [
+ "target/**/*"
+ ],
+ "kbn_references": []
+}
diff --git a/packages/kbn-use-tracked-promise/use_tracked_promise.ts b/packages/kbn-use-tracked-promise/use_tracked_promise.ts
new file mode 100644
index 0000000000000..149c9feab06cd
--- /dev/null
+++ b/packages/kbn-use-tracked-promise/use_tracked_promise.ts
@@ -0,0 +1,300 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+/* eslint-disable max-classes-per-file */
+
+import { DependencyList, useEffect, useMemo, useRef, useState, useCallback } from 'react';
+import useMountedState from 'react-use/lib/useMountedState';
+
+interface UseTrackedPromiseArgs {
+ createPromise: (...args: Arguments) => Promise;
+ onResolve?: (result: Result) => void;
+ onReject?: (value: unknown) => void;
+ cancelPreviousOn?: 'creation' | 'settlement' | 'resolution' | 'rejection' | 'never';
+ triggerOrThrow?: 'always' | 'whenMounted';
+}
+
+/**
+ * This hook manages a Promise factory and can create new Promises from it. The
+ * state of these Promises is tracked and they can be canceled when superseded
+ * to avoid race conditions.
+ *
+ * ```
+ * const [requestState, performRequest] = useTrackedPromise(
+ * {
+ * cancelPreviousOn: 'resolution',
+ * createPromise: async (url: string) => {
+ * return await fetchSomething(url)
+ * },
+ * onResolve: response => {
+ * setSomeState(response.data);
+ * },
+ * onReject: response => {
+ * setSomeError(response);
+ * },
+ * },
+ * [fetchSomething]
+ * );
+ * ```
+ *
+ * The `onResolve` and `onReject` handlers are registered separately, because
+ * the hook will inject a rejection when in case of a canellation. The
+ * `cancelPreviousOn` attribute can be used to indicate when the preceding
+ * pending promises should be canceled:
+ *
+ * 'never': No preceding promises will be canceled.
+ *
+ * 'creation': Any preceding promises will be canceled as soon as a new one is
+ * created.
+ *
+ * 'settlement': Any preceding promise will be canceled when a newer promise is
+ * resolved or rejected.
+ *
+ * 'resolution': Any preceding promise will be canceled when a newer promise is
+ * resolved.
+ *
+ * 'rejection': Any preceding promise will be canceled when a newer promise is
+ * rejected.
+ *
+ * Any pending promises will be canceled when the component using the hook is
+ * unmounted, but their status will not be tracked to avoid React warnings
+ * about memory leaks.
+ *
+ * The last argument is a normal React hook dependency list that indicates
+ * under which conditions a new reference to the configuration object should be
+ * used.
+ *
+ * The `onResolve`, `onReject` and possible uncatched errors are only triggered
+ * if the underlying component is mounted. To ensure they always trigger (i.e.
+ * if the promise is called in a `useLayoutEffect`) use the `triggerOrThrow`
+ * attribute:
+ *
+ * 'whenMounted': (default) they are called only if the component is mounted.
+ *
+ * 'always': they always call. The consumer is then responsible of ensuring no
+ * side effects happen if the underlying component is not mounted.
+ */
+export const useTrackedPromise = (
+ {
+ createPromise,
+ onResolve = noOp,
+ onReject = noOp,
+ cancelPreviousOn = 'never',
+ triggerOrThrow = 'whenMounted',
+ }: UseTrackedPromiseArgs,
+ dependencies: DependencyList
+) => {
+ const isComponentMounted = useMountedState();
+ const shouldTriggerOrThrow = useCallback(() => {
+ switch (triggerOrThrow) {
+ case 'always':
+ return true;
+ case 'whenMounted':
+ return isComponentMounted();
+ }
+ }, [isComponentMounted, triggerOrThrow]);
+
+ /**
+ * If a promise is currently pending, this holds a reference to it and its
+ * cancellation function.
+ */
+ const pendingPromises = useRef>>([]);
+
+ /**
+ * The state of the promise most recently created by the `createPromise`
+ * factory. It could be uninitialized, pending, resolved or rejected.
+ */
+ const [promiseState, setPromiseState] = useState>({
+ state: 'uninitialized',
+ });
+
+ const reset = useCallback(() => {
+ setPromiseState({
+ state: 'uninitialized',
+ });
+ }, []);
+
+ const execute = useMemo(
+ () =>
+ (...args: Arguments) => {
+ let rejectCancellationPromise!: (value: any) => void;
+ const cancellationPromise = new Promise((_, reject) => {
+ rejectCancellationPromise = reject;
+ });
+
+ // remember the list of prior pending promises for cancellation
+ const previousPendingPromises = pendingPromises.current;
+
+ const cancelPreviousPendingPromises = () => {
+ previousPendingPromises.forEach((promise) => promise.cancel());
+ };
+
+ const newPromise = createPromise(...args);
+ const newCancelablePromise = Promise.race([newPromise, cancellationPromise]);
+
+ // track this new state
+ setPromiseState({
+ state: 'pending',
+ promise: newCancelablePromise,
+ });
+
+ if (cancelPreviousOn === 'creation') {
+ cancelPreviousPendingPromises();
+ }
+
+ const newPendingPromise: CancelablePromise = {
+ cancel: () => {
+ rejectCancellationPromise(new CanceledPromiseError());
+ },
+ cancelSilently: () => {
+ rejectCancellationPromise(new SilentCanceledPromiseError());
+ },
+ promise: newCancelablePromise.then(
+ (value) => {
+ if (['settlement', 'resolution'].includes(cancelPreviousOn)) {
+ cancelPreviousPendingPromises();
+ }
+
+ // remove itself from the list of pending promises
+ pendingPromises.current = pendingPromises.current.filter(
+ (pendingPromise) => pendingPromise.promise !== newPendingPromise.promise
+ );
+
+ if (onResolve && shouldTriggerOrThrow()) {
+ onResolve(value);
+ }
+
+ setPromiseState((previousPromiseState) =>
+ previousPromiseState.state === 'pending' &&
+ previousPromiseState.promise === newCancelablePromise
+ ? {
+ state: 'resolved',
+ promise: newPendingPromise.promise,
+ value,
+ }
+ : previousPromiseState
+ );
+
+ return value;
+ },
+ (value) => {
+ if (!(value instanceof SilentCanceledPromiseError)) {
+ if (['settlement', 'rejection'].includes(cancelPreviousOn)) {
+ cancelPreviousPendingPromises();
+ }
+
+ // remove itself from the list of pending promises
+ pendingPromises.current = pendingPromises.current.filter(
+ (pendingPromise) => pendingPromise.promise !== newPendingPromise.promise
+ );
+
+ if (shouldTriggerOrThrow()) {
+ if (onReject) {
+ onReject(value);
+ } else {
+ throw value;
+ }
+ }
+
+ setPromiseState((previousPromiseState) =>
+ previousPromiseState.state === 'pending' &&
+ previousPromiseState.promise === newCancelablePromise
+ ? {
+ state: 'rejected',
+ promise: newCancelablePromise,
+ value,
+ }
+ : previousPromiseState
+ );
+ }
+ }
+ ),
+ };
+
+ // add the new promise to the list of pending promises
+ pendingPromises.current = [...pendingPromises.current, newPendingPromise];
+
+ // silence "unhandled rejection" warnings
+ newPendingPromise.promise.catch(noOp);
+
+ return newPendingPromise.promise;
+ },
+ // the dependencies are managed by the caller
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ dependencies
+ );
+
+ /**
+ * Cancel any pending promises silently to avoid memory leaks and race
+ * conditions.
+ */
+ useEffect(
+ () => () => {
+ pendingPromises.current.forEach((promise) => promise.cancelSilently());
+ },
+ []
+ );
+
+ return [promiseState, execute, reset] as [typeof promiseState, typeof execute, typeof reset];
+};
+
+export interface UninitializedPromiseState {
+ state: 'uninitialized';
+}
+
+export interface PendingPromiseState {
+ state: 'pending';
+ promise: Promise;
+}
+
+export interface ResolvedPromiseState {
+ state: 'resolved';
+ promise: Promise;
+ value: ResolvedValue;
+}
+
+export interface RejectedPromiseState {
+ state: 'rejected';
+ promise: Promise;
+ value: RejectedValue;
+}
+
+export type SettledPromiseState =
+ | ResolvedPromiseState
+ | RejectedPromiseState;
+
+export type PromiseState =
+ | UninitializedPromiseState
+ | PendingPromiseState
+ | SettledPromiseState;
+
+export const isRejectedPromiseState = (
+ promiseState: PromiseState
+): promiseState is RejectedPromiseState => promiseState.state === 'rejected';
+
+interface CancelablePromise {
+ // reject the promise prematurely with a CanceledPromiseError
+ cancel: () => void;
+ // reject the promise prematurely with a SilentCanceledPromiseError
+ cancelSilently: () => void;
+ // the tracked promise
+ promise: Promise;
+}
+
+export class CanceledPromiseError extends Error {
+ public isCanceled = true;
+
+ constructor(message?: string) {
+ super(message);
+ Object.setPrototypeOf(this, new.target.prototype);
+ }
+}
+
+export class SilentCanceledPromiseError extends CanceledPromiseError {}
+
+const noOp = () => undefined;
diff --git a/tsconfig.base.json b/tsconfig.base.json
index 8efe5c62421de..5b7743964811a 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -1498,6 +1498,8 @@
"@kbn/usage-collection-plugin/*": ["src/plugins/usage_collection/*"],
"@kbn/usage-collection-test-plugin": ["test/plugin_functional/plugins/usage_collection"],
"@kbn/usage-collection-test-plugin/*": ["test/plugin_functional/plugins/usage_collection/*"],
+ "@kbn/use-tracked-promise": ["packages/kbn-use-tracked-promise"],
+ "@kbn/use-tracked-promise/*": ["packages/kbn-use-tracked-promise/*"],
"@kbn/user-profile-components": ["packages/kbn-user-profile-components"],
"@kbn/user-profile-components/*": ["packages/kbn-user-profile-components/*"],
"@kbn/user-profile-examples-plugin": ["examples/user_profile_examples"],
diff --git a/x-pack/plugins/fleet/server/routes/epm/handlers.ts b/x-pack/plugins/fleet/server/routes/epm/handlers.ts
index a0b6999f0feb6..e3e04820899d4 100644
--- a/x-pack/plugins/fleet/server/routes/epm/handlers.ts
+++ b/x-pack/plugins/fleet/server/routes/epm/handlers.ts
@@ -84,6 +84,7 @@ import type {
InstallationInfo,
} from '../../types';
import { getDataStreams } from '../../services/epm/data_streams';
+import { NamingCollisionError } from '../../services/epm/packages/custom_integrations/validation/check_naming_collision';
const CACHE_CONTROL_10_MINUTES_HEADER: HttpResponseOptions['headers'] = {
'cache-control': 'max-age=600',
@@ -419,28 +420,40 @@ export const createCustomIntegrationHandler: FleetRequestHandler<
const spaceId = fleetContext.spaceId;
const { integrationName, force, datasets } = request.body;
- const res = await installPackage({
- installSource: 'custom',
- savedObjectsClient,
- pkgName: integrationName,
- datasets,
- esClient,
- spaceId,
- force,
- authorizationHeader,
- kibanaVersion,
- });
+ try {
+ const res = await installPackage({
+ installSource: 'custom',
+ savedObjectsClient,
+ pkgName: integrationName,
+ datasets,
+ esClient,
+ spaceId,
+ force,
+ authorizationHeader,
+ kibanaVersion,
+ });
- if (!res.error) {
- const body: InstallPackageResponse = {
- items: res.assets || [],
- _meta: {
- install_source: res.installSource,
- },
- };
- return response.ok({ body });
- } else {
- return await defaultFleetErrorHandler({ error: res.error, response });
+ if (!res.error) {
+ const body: InstallPackageResponse = {
+ items: res.assets || [],
+ _meta: {
+ install_source: res.installSource,
+ },
+ };
+ return response.ok({ body });
+ } else {
+ return await defaultFleetErrorHandler({ error: res.error, response });
+ }
+ } catch (error) {
+ if (error instanceof NamingCollisionError) {
+ return response.customError({
+ statusCode: 409,
+ body: {
+ message: error.message,
+ },
+ });
+ }
+ return await defaultFleetErrorHandler({ error, response });
}
};
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/validation/check_naming_collision.ts b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/validation/check_naming_collision.ts
new file mode 100644
index 0000000000000..1b8c135ae129b
--- /dev/null
+++ b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/validation/check_naming_collision.ts
@@ -0,0 +1,88 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { nodeBuilder } from '@kbn/es-query';
+import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server';
+
+import { i18n } from '@kbn/i18n';
+
+import { auditLoggingService } from '../../../../audit_logging';
+import { PACKAGES_SAVED_OBJECT_TYPE, type Installation } from '../../../../../../common';
+import * as Registry from '../../../registry';
+
+export const checkForNamingCollision = async (
+ savedObjectsClient: SavedObjectsClientContract,
+ integrationName: string
+) => {
+ await checkForRegistryNamingCollision(savedObjectsClient, integrationName);
+ await checkForInstallationNamingCollision(savedObjectsClient, integrationName);
+};
+
+export const checkForRegistryNamingCollision = async (
+ savedObjectsClient: SavedObjectsClientContract,
+ integrationName: string
+) => {
+ const registryOrBundledPackage = await Registry.fetchFindLatestPackageOrUndefined(
+ integrationName
+ );
+ if (registryOrBundledPackage) {
+ const registryConflictMessage = i18n.translate(
+ 'xpack.fleet.customIntegrations.namingCollisionError.registryOrBundle',
+ {
+ defaultMessage:
+ 'Failed to create the integration as an integration with the name {integrationName} already exists in the package registry or as a bundled package.',
+ values: {
+ integrationName,
+ },
+ }
+ );
+ throw new NamingCollisionError(registryConflictMessage);
+ }
+};
+
+export const checkForInstallationNamingCollision = async (
+ savedObjectsClient: SavedObjectsClientContract,
+ integrationName: string
+) => {
+ const result = await savedObjectsClient.find({
+ type: PACKAGES_SAVED_OBJECT_TYPE,
+ perPage: 1,
+ filter: nodeBuilder.and([
+ nodeBuilder.is(`${PACKAGES_SAVED_OBJECT_TYPE}.attributes.name`, integrationName),
+ ]),
+ });
+
+ if (result.saved_objects.length > 0) {
+ const installationConflictMessage = i18n.translate(
+ 'xpack.fleet.customIntegrations.namingCollisionError.installationConflictMessage',
+ {
+ defaultMessage:
+ 'Failed to create the integration as an installation with the name {integrationName} already exists.',
+ values: {
+ integrationName,
+ },
+ }
+ );
+ throw new NamingCollisionError(installationConflictMessage);
+ }
+
+ for (const savedObject of result.saved_objects) {
+ auditLoggingService.writeCustomSoAuditLog({
+ action: 'find',
+ id: savedObject.id,
+ savedObjectType: PACKAGES_SAVED_OBJECT_TYPE,
+ });
+ }
+};
+
+export class NamingCollisionError extends Error {
+ constructor(message?: string) {
+ super(message);
+ Object.setPrototypeOf(this, new.target.prototype);
+ this.name = 'NamingCollisionError';
+ }
+}
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install.ts b/x-pack/plugins/fleet/server/services/epm/packages/install.ts
index 2efb841b75f3b..4bb77d03996c7 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install.ts
@@ -102,6 +102,7 @@ import { INITIAL_VERSION } from './custom_integrations/constants';
import { createAssets } from './custom_integrations';
import { cacheAssets } from './custom_integrations/assets/cache';
import { generateDatastreamEntries } from './custom_integrations/assets/dataset/utils';
+import { checkForNamingCollision } from './custom_integrations/validation/check_naming_collision';
export async function isPackageInstalled(options: {
savedObjectsClient: SavedObjectsClientContract;
@@ -781,6 +782,9 @@ export async function installCustomPackage(
kibanaVersion,
} = args;
+ // Validate that we can create this package, validations will throw if they don't pass
+ await checkForNamingCollision(savedObjectsClient, pkgName);
+
// Compose a packageInfo
const packageInfo = {
format_version: CUSTOM_INTEGRATION_PACKAGE_SPEC_VERSION,
diff --git a/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/configure_logs.tsx b/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/configure_logs.tsx
index e0dcb88064585..a29286f84336a 100644
--- a/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/configure_logs.tsx
+++ b/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/configure_logs.tsx
@@ -10,6 +10,7 @@ import {
EuiButton,
EuiButtonEmpty,
EuiButtonIcon,
+ EuiCallOut,
EuiFieldText,
EuiFlexGroup,
EuiFlexItem,
@@ -27,7 +28,12 @@ import {
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n-react';
import { isEmpty } from 'lodash';
-import React, { useState } from 'react';
+import React, { useCallback, useState } from 'react';
+import {
+ IntegrationError,
+ IntegrationOptions,
+ useCreateIntegration,
+} from '../../../../hooks/use_create_integration';
import { useWizard } from '.';
import { OptionalFormRow } from '../../../shared/optional_form_row';
import {
@@ -45,6 +51,13 @@ export function ConfigureLogs() {
const { goToStep, goBack, getState, setState } = useWizard();
const wizardState = getState();
+ const [integrationName, setIntegrationName] = useState(
+ wizardState.integrationName
+ );
+ const [integrationNameTouched, setIntegrationNameTouched] = useState(false);
+ const [integrationError, setIntegrationError] = useState<
+ IntegrationError | undefined
+ >();
const [datasetName, setDatasetName] = useState(wizardState.datasetName);
const [serviceName, setServiceName] = useState(wizardState.serviceName);
const [logFilePaths, setLogFilePaths] = useState(wizardState.logFilePaths);
@@ -52,20 +65,65 @@ export function ConfigureLogs() {
const [customConfigurations, setCustomConfigurations] = useState(
wizardState.customConfigurations
);
-
const logFilePathNotConfigured = logFilePaths.every((filepath) => !filepath);
- function onContinue() {
+ const onIntegrationCreationSuccess = useCallback(
+ (integration: IntegrationOptions) => {
+ setState((state) => ({
+ ...state,
+ lastCreatedIntegration: integration,
+ }));
+ goToStep('installElasticAgent');
+ },
+ [goToStep, setState]
+ );
+
+ const onIntegrationCreationFailure = useCallback(
+ (error: IntegrationError) => {
+ setIntegrationError(error);
+ },
+ [setIntegrationError]
+ );
+
+ const { createIntegration, createIntegrationRequest } = useCreateIntegration({
+ onIntegrationCreationSuccess,
+ onIntegrationCreationFailure,
+ initialLastCreatedIntegration: wizardState.lastCreatedIntegration,
+ });
+
+ const isCreatingIntegration = createIntegrationRequest.state === 'pending';
+ const hasFailedCreatingIntegration =
+ createIntegrationRequest.state === 'rejected';
+
+ const onContinue = useCallback(() => {
setState((state) => ({
...state,
datasetName,
+ integrationName,
serviceName,
logFilePaths: logFilePaths.filter((filepath) => !!filepath),
namespace,
customConfigurations,
}));
- goToStep('installElasticAgent');
- }
+ createIntegration({
+ integrationName,
+ datasets: [
+ {
+ name: datasetName,
+ type: 'logs' as const,
+ },
+ ],
+ });
+ }, [
+ createIntegration,
+ customConfigurations,
+ datasetName,
+ integrationName,
+ logFilePaths,
+ namespace,
+ serviceName,
+ setState,
+ ]);
function addLogFilePath() {
setLogFilePaths((prev) => [...prev, '']);
@@ -85,17 +143,30 @@ export function ConfigureLogs() {
);
if (index === 0) {
+ setIntegrationName(getFilename(filepath));
setDatasetName(getFilename(filepath));
}
}
- const isDatasetNameInvalid = datasetNameTouched && isEmpty(datasetName);
+ const hasNamingCollision =
+ integrationError && integrationError.type === 'NamingCollision';
+
+ const isIntegrationNameInvalid =
+ (integrationNameTouched &&
+ (isEmpty(integrationName) || !isLowerCase(integrationName))) ||
+ hasNamingCollision;
- const datasetNameError = i18n.translate(
- 'xpack.observability_onboarding.configureLogs.dataset.error',
- { defaultMessage: 'A dataset name is required.' }
+ const integrationNameError = getIntegrationNameError(
+ integrationName,
+ integrationNameTouched,
+ integrationError
);
+ const isDatasetNameInvalid =
+ datasetNameTouched && (isEmpty(datasetName) || !isLowerCase(datasetName));
+
+ const datasetNameError = getDatasetNameError(datasetName, datasetNameTouched);
+
return (
- {i18n.translate('xpack.observability_onboarding.steps.continue', {
- defaultMessage: 'Continue',
- })}
+ {isCreatingIntegration
+ ? i18n.translate(
+ 'xpack.observability_onboarding.steps.loading',
+ {
+ defaultMessage: 'Creating integration...',
+ }
+ )
+ : i18n.translate(
+ 'xpack.observability_onboarding.steps.continue',
+ {
+ defaultMessage: 'Continue',
+ }
+ )}
,
]}
/>
@@ -124,8 +206,7 @@ export function ConfigureLogs() {
{i18n.translate(
'xpack.observability_onboarding.configureLogs.description',
{
- defaultMessage:
- 'Fill the paths to the log files on your hosts.',
+ defaultMessage: 'Configure inputs',
}
)}
@@ -195,61 +276,6 @@ export function ConfigureLogs() {
-
-
- {i18n.translate(
- 'xpack.observability_onboarding.configureLogs.dataset.name',
- {
- defaultMessage: 'Dataset name',
- }
- )}
-
-
-
-
-
- }
- helpText={i18n.translate(
- 'xpack.observability_onboarding.configureLogs.dataset.helper',
- {
- defaultMessage:
- "All lowercase, max 100 chars, special characters will be replaced with '_'.",
- }
- )}
- isInvalid={isDatasetNameInvalid}
- error={datasetNameError}
- >
-
- setDatasetName(replaceSpecialChars(event.target.value))
- }
- isInvalid={isDatasetNameInvalid}
- onInput={() => setDatasetNameTouched(true)}
- />
-
-
+
+
+
+ {i18n.translate(
+ 'xpack.observability_onboarding.configureLogs.configureIntegrationDescription',
+ {
+ defaultMessage: 'Configure integration',
+ }
+ )}
+
+
+
+
+
+
+ {i18n.translate(
+ 'xpack.observability_onboarding.configureLogs.integration.name',
+ {
+ defaultMessage: 'Integration name',
+ }
+ )}
+
+
+
+
+
+ }
+ helpText={i18n.translate(
+ 'xpack.observability_onboarding.configureLogs.integration.helper',
+ {
+ defaultMessage:
+ "All lowercase, max 100 chars, special characters will be replaced with '_'.",
+ }
+ )}
+ isInvalid={isIntegrationNameInvalid}
+ error={integrationNameError}
+ >
+
+ setIntegrationName(replaceSpecialChars(event.target.value))
+ }
+ isInvalid={isIntegrationNameInvalid}
+ onInput={() => setIntegrationNameTouched(true)}
+ />
+
+
+
+ {i18n.translate(
+ 'xpack.observability_onboarding.configureLogs.dataset.name',
+ {
+ defaultMessage: 'Dataset name',
+ }
+ )}
+
+
+
+
+
+ }
+ helpText={i18n.translate(
+ 'xpack.observability_onboarding.configureLogs.dataset.helper',
+ {
+ defaultMessage:
+ "All lowercase, max 100 chars, special characters will be replaced with '_'.",
+ }
+ )}
+ isInvalid={isDatasetNameInvalid}
+ error={datasetNameError}
+ >
+
+ setDatasetName(replaceSpecialChars(event.target.value))
+ }
+ isInvalid={isDatasetNameInvalid}
+ onInput={() => setDatasetNameTouched(true)}
+ />
+
+
+ {hasFailedCreatingIntegration && integrationError && (
+ <>
+
+ {getIntegrationErrorCallout(integrationError)}
+ >
+ )}
);
}
+
+const getIntegrationErrorCallout = (integrationError: IntegrationError) => {
+ const title = i18n.translate(
+ 'xpack.observability_onboarding.configureLogs.integrationCreation.error.title',
+ { defaultMessage: 'Sorry, there was an error' }
+ );
+
+ switch (integrationError.type) {
+ case 'AuthorizationError':
+ const authorizationDescription = i18n.translate(
+ 'xpack.observability_onboarding.configureLogs.integrationCreation.error.authorization.description',
+ {
+ defaultMessage:
+ 'This user does not have permissions to create an integration.',
+ }
+ );
+ return (
+
+ {authorizationDescription}
+
+ );
+ case 'UnknownError':
+ return (
+
+ {integrationError.message}
+
+ );
+ }
+};
+
+const isLowerCase = (str: string) => str.toLowerCase() === str;
+
+const getIntegrationNameError = (
+ integrationName: string,
+ touched: boolean,
+ integrationError?: IntegrationError
+) => {
+ if (touched && isEmpty(integrationName)) {
+ return i18n.translate(
+ 'xpack.observability_onboarding.configureLogs.integration.emptyError',
+ { defaultMessage: 'An integration name is required.' }
+ );
+ }
+ if (touched && !isLowerCase(integrationName)) {
+ return i18n.translate(
+ 'xpack.observability_onboarding.configureLogs.integration.lowercaseError',
+ { defaultMessage: 'An integration name should be lowercase.' }
+ );
+ }
+ if (integrationError && integrationError.type === 'NamingCollision') {
+ return integrationError.message;
+ }
+};
+
+const getDatasetNameError = (datasetName: string, touched: boolean) => {
+ if (touched && isEmpty(datasetName)) {
+ return i18n.translate(
+ 'xpack.observability_onboarding.configureLogs.dataset.emptyError',
+ { defaultMessage: 'A dataset name is required.' }
+ );
+ }
+ if (touched && !isLowerCase(datasetName)) {
+ return i18n.translate(
+ 'xpack.observability_onboarding.configureLogs.dataset.lowercaseError',
+ { defaultMessage: 'A dataset name should be lowercase.' }
+ );
+ }
+};
diff --git a/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/index.tsx b/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/index.tsx
index ce4245dd00354..fecd9c4de8384 100644
--- a/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/index.tsx
+++ b/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/index.tsx
@@ -6,6 +6,7 @@
*/
import { i18n } from '@kbn/i18n';
+import { IntegrationOptions } from '../../../../hooks/use_create_integration';
import {
createWizardContext,
Step,
@@ -16,6 +17,8 @@ import { InstallElasticAgent } from './install_elastic_agent';
import { SelectLogs } from './select_logs';
interface WizardState {
+ integrationName: string;
+ lastCreatedIntegration?: IntegrationOptions;
datasetName: string;
serviceName: string;
logFilePaths: string[];
@@ -37,6 +40,7 @@ interface WizardState {
}
const initialState: WizardState = {
+ integrationName: '',
datasetName: '',
serviceName: '',
logFilePaths: [''],
diff --git a/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/install_elastic_agent.tsx b/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/install_elastic_agent.tsx
index 187724f68bbb8..b9a43545004b0 100644
--- a/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/install_elastic_agent.tsx
+++ b/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/install_elastic_agent.tsx
@@ -8,6 +8,7 @@
import {
EuiButton,
EuiButtonEmpty,
+ EuiCallOut,
EuiFlexGroup,
EuiFlexItem,
EuiSpacer,
@@ -267,6 +268,24 @@ export function InstallElasticAgent() {
+ {wizardState.integrationName && (
+ <>
+
+
+ >
+ )}
{apiKeyEncoded && onboardingId ? (
;
+}
+
+// Errors
+const GENERIC_ERROR_MESSAGE = i18n.translate(
+ 'xpack.observability_onboarding.useCreateIntegration.integrationError.genericError',
+ {
+ defaultMessage: 'Unable to create an integration',
+ }
+);
+
+type ErrorType = 'NamingCollision' | 'AuthorizationError' | 'UnknownError';
+export interface IntegrationError {
+ type: ErrorType;
+ message: string;
+}
+
+export const useCreateIntegration = ({
+ onIntegrationCreationSuccess,
+ onIntegrationCreationFailure,
+ initialLastCreatedIntegration,
+ deletePreviousIntegration = true,
+}: {
+ integrationOptions?: IntegrationOptions;
+ onIntegrationCreationSuccess: (integration: IntegrationOptions) => void;
+ onIntegrationCreationFailure: (error: IntegrationError) => void;
+ initialLastCreatedIntegration?: IntegrationOptions;
+ deletePreviousIntegration?: boolean;
+}) => {
+ const {
+ services: { http },
+ } = useKibana();
+ const [lastCreatedIntegration, setLastCreatedIntegration] = useState<
+ IntegrationOptions | undefined
+ >(initialLastCreatedIntegration);
+
+ const [createIntegrationRequest, callCreateIntegration] = useTrackedPromise(
+ {
+ cancelPreviousOn: 'creation',
+ createPromise: async (integrationOptions) => {
+ if (lastCreatedIntegration && deletePreviousIntegration) {
+ await http?.delete(
+ `/api/fleet/epm/packages/${lastCreatedIntegration.integrationName}/1.0.0`,
+ {}
+ );
+ }
+ await http?.post('/api/fleet/epm/custom_integrations', {
+ body: JSON.stringify(integrationOptions),
+ });
+
+ return integrationOptions;
+ },
+ onResolve: (integrationOptions: IntegrationOptions) => {
+ setLastCreatedIntegration(integrationOptions);
+ onIntegrationCreationSuccess(integrationOptions!);
+ },
+ onReject: (requestError: any) => {
+ if (requestError?.body?.statusCode === 409) {
+ onIntegrationCreationFailure({
+ type: 'NamingCollision' as const,
+ message: requestError.body.message,
+ });
+ } else if (requestError?.body?.statusCode === 403) {
+ onIntegrationCreationFailure({
+ type: 'AuthorizationError' as const,
+ message: requestError?.body?.message,
+ });
+ } else {
+ onIntegrationCreationFailure({
+ type: 'UnknownError' as const,
+ message: requestError?.body?.message ?? GENERIC_ERROR_MESSAGE,
+ });
+ }
+ },
+ },
+ [
+ lastCreatedIntegration,
+ deletePreviousIntegration,
+ onIntegrationCreationSuccess,
+ onIntegrationCreationFailure,
+ setLastCreatedIntegration,
+ ]
+ );
+
+ const createIntegration = useCallback(
+ (integrationOptions: IntegrationOptions) => {
+ // Bypass creating the integration again
+ if (deepEqual(integrationOptions, lastCreatedIntegration)) {
+ onIntegrationCreationSuccess(integrationOptions);
+ } else {
+ callCreateIntegration(integrationOptions);
+ }
+ },
+ [
+ callCreateIntegration,
+ lastCreatedIntegration,
+ onIntegrationCreationSuccess,
+ ]
+ );
+
+ return {
+ createIntegration,
+ createIntegrationRequest,
+ };
+};
diff --git a/x-pack/plugins/observability_onboarding/tsconfig.json b/x-pack/plugins/observability_onboarding/tsconfig.json
index 6bb24fde8c588..2119563923cb9 100644
--- a/x-pack/plugins/observability_onboarding/tsconfig.json
+++ b/x-pack/plugins/observability_onboarding/tsconfig.json
@@ -32,6 +32,7 @@
"@kbn/std",
"@kbn/data-views-plugin",
"@kbn/es-query",
+ "@kbn/use-tracked-promise",
],
"exclude": [
"target/**/*",
diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_custom.ts b/x-pack/test/fleet_api_integration/apis/epm/install_custom.ts
index 492d708da5ef7..88d71edb74d47 100644
--- a/x-pack/test/fleet_api_integration/apis/epm/install_custom.ts
+++ b/x-pack/test/fleet_api_integration/apis/epm/install_custom.ts
@@ -10,7 +10,7 @@ import { PACKAGES_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common';
import { FtrProviderContext } from '../../../api_integration/ftr_provider_context';
-const INTEGRATION_NAME = 'my_custom_nginx';
+const INTEGRATION_NAME = 'my_nginx';
const INTEGRATION_VERSION = '1.0.0';
export default function (providerContext: FtrProviderContext) {
@@ -21,7 +21,8 @@ export default function (providerContext: FtrProviderContext) {
const uninstallPackage = async () => {
await supertest
.delete(`/api/fleet/epm/packages/${INTEGRATION_NAME}/${INTEGRATION_VERSION}`)
- .set('kbn-xsrf', 'xxxx');
+ .set('kbn-xsrf', 'xxxx')
+ .send({ force: true });
};
describe('Installing custom integrations', async () => {
@@ -36,7 +37,7 @@ export default function (providerContext: FtrProviderContext) {
.type('application/json')
.send({
force: true,
- integrationName: 'my_custom_nginx',
+ integrationName: INTEGRATION_NAME,
datasets: [
{ name: 'access', type: 'logs' },
{ name: 'error', type: 'metrics' },
@@ -46,22 +47,22 @@ export default function (providerContext: FtrProviderContext) {
.expect(200);
const expectedIngestPipelines = [
- 'logs-my_custom_nginx.access-1.0.0',
- 'metrics-my_custom_nginx.error-1.0.0',
- 'logs-my_custom_nginx.warning-1.0.0',
+ `logs-${INTEGRATION_NAME}.access-1.0.0`,
+ `metrics-${INTEGRATION_NAME}.error-1.0.0`,
+ `logs-${INTEGRATION_NAME}.warning-1.0.0`,
];
const expectedIndexTemplates = [
- 'logs-my_custom_nginx.access',
- 'metrics-my_custom_nginx.error',
- 'logs-my_custom_nginx.warning',
+ `logs-${INTEGRATION_NAME}.access`,
+ `metrics-${INTEGRATION_NAME}.error`,
+ `logs-${INTEGRATION_NAME}.warning`,
];
const expectedComponentTemplates = [
- 'logs-my_custom_nginx.access@package',
- 'logs-my_custom_nginx.access@custom',
- 'metrics-my_custom_nginx.error@package',
- 'metrics-my_custom_nginx.error@custom',
- 'logs-my_custom_nginx.warning@package',
- 'logs-my_custom_nginx.warning@custom',
+ `logs-${INTEGRATION_NAME}.access@package`,
+ `logs-${INTEGRATION_NAME}.access@custom`,
+ `metrics-${INTEGRATION_NAME}.error@package`,
+ `metrics-${INTEGRATION_NAME}.error@custom`,
+ `logs-${INTEGRATION_NAME}.warning@package`,
+ `logs-${INTEGRATION_NAME}.warning@custom`,
];
expect(response.body._meta.install_source).to.be('custom');
@@ -92,11 +93,65 @@ export default function (providerContext: FtrProviderContext) {
type: PACKAGES_SAVED_OBJECT_TYPE,
id: INTEGRATION_NAME,
});
-
expect(installation.attributes.name).to.be(INTEGRATION_NAME);
expect(installation.attributes.version).to.be(INTEGRATION_VERSION);
expect(installation.attributes.install_source).to.be('custom');
expect(installation.attributes.install_status).to.be('installed');
});
+
+ it('Throws an error when there is a naming collision with a current package installation', async () => {
+ await supertest
+ .post(`/api/fleet/epm/custom_integrations`)
+ .set('kbn-xsrf', 'xxxx')
+ .type('application/json')
+ .send({
+ force: true,
+ integrationName: INTEGRATION_NAME,
+ datasets: [
+ { name: 'access', type: 'logs' },
+ { name: 'error', type: 'metrics' },
+ { name: 'warning', type: 'logs' },
+ ],
+ })
+ .expect(200);
+
+ const response = await supertest
+ .post(`/api/fleet/epm/custom_integrations`)
+ .set('kbn-xsrf', 'xxxx')
+ .type('application/json')
+ .send({
+ force: true,
+ integrationName: INTEGRATION_NAME,
+ datasets: [
+ { name: 'access', type: 'logs' },
+ { name: 'error', type: 'metrics' },
+ { name: 'warning', type: 'logs' },
+ ],
+ })
+ .expect(409);
+
+ expect(response.body.message).to.be(
+ `Failed to create the integration as an installation with the name ${INTEGRATION_NAME} already exists.`
+ );
+ });
+
+ it('Throws an error when there is a naming collision with a registry package', async () => {
+ const pkgName = 'apache';
+
+ const response = await supertest
+ .post(`/api/fleet/epm/custom_integrations`)
+ .set('kbn-xsrf', 'xxxx')
+ .type('application/json')
+ .send({
+ force: true,
+ integrationName: pkgName,
+ datasets: [{ name: 'error', type: 'logs' }],
+ })
+ .expect(409);
+
+ expect(response.body.message).to.be(
+ `Failed to create the integration as an integration with the name ${pkgName} already exists in the package registry or as a bundled package.`
+ );
+ });
});
}
diff --git a/yarn.lock b/yarn.lock
index 945c81f6d566d..c0031944089cd 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5884,6 +5884,10 @@
version "0.0.0"
uid ""
+"@kbn/use-tracked-promise@link:packages/kbn-use-tracked-promise":
+ version "0.0.0"
+ uid ""
+
"@kbn/user-profile-components@link:packages/kbn-user-profile-components":
version "0.0.0"
uid ""
From 04d8a2646d01397260f57be1d6f0ffe16e524d14 Mon Sep 17 00:00:00 2001
From: Julia
Date: Fri, 11 Aug 2023 18:28:22 +0200
Subject: [PATCH 26/46] fix find tests (#163702)
## Summary
Fix flaky find rule e2e tests.
Tested using this tool:
https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/2858
---
.../security_and_spaces/group1/tests/alerting/find.ts | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/find.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/find.ts
index 2c7a55134c711..295350e6dc18e 100644
--- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/find.ts
+++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/find.ts
@@ -19,8 +19,7 @@ const findTestUtils = (
supertest: SuperTest,
supertestWithoutAuth: any
) => {
- // FLAKY: https://github.com/elastic/kibana/issues/148660
- describe.skip(describeType, () => {
+ describe(describeType, () => {
afterEach(() => objectRemover.removeAll());
for (const scenario of UserAtSpaceScenarios) {
@@ -60,6 +59,8 @@ const findTestUtils = (
})
)
.expect(200);
+ objectRemover.add(space.id, createdAlert.id, 'rule', 'alerting');
+
const response = await supertestWithoutAuth
.get(
`${getUrlPrefix(space.id)}/${
@@ -105,6 +106,7 @@ const findTestUtils = (
id: createdAction.id,
connector_type_id: 'test.noop',
params: {},
+ uuid: match.actions[0].uuid,
frequency: {
summary: false,
notify_when: 'onThrottleInterval',
@@ -121,6 +123,7 @@ const findTestUtils = (
notify_when: null,
updated_by: 'elastic',
api_key_owner: 'elastic',
+ api_key_created_by_user: false,
mute_all: false,
muted_alert_ids: [],
revision: 0,
@@ -328,6 +331,7 @@ const findTestUtils = (
params: {},
created_by: 'elastic',
throttle: '1m',
+ api_key_created_by_user: null,
updated_by: 'elastic',
api_key_owner: null,
mute_all: false,
From 1e7efae56a69254b2c9037d08e9cc0bda068ce2b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Efe=20G=C3=BCrkan=20YALAMAN?=
Date: Fri, 11 Aug 2023 19:00:40 +0200
Subject: [PATCH 27/46] [Enterprise Search] Reuse serverless panels on
Enterprise Search (#163179)
## Summary
Reuse Serverless panels for API index overview.
Updated Enterprise Search overview to latests designs.
Note: There will be another PR for layout changes on overview
afterwards.
https://github.com/elastic/kibana/assets/1410658/51537e57-e822-4b9f-b9ed-49d82d192690
https://github.com/elastic/kibana/assets/1410658/a3696897-40a5-4cb3-9fe6-53ce5b8f560f
https://github.com/elastic/kibana/assets/1410658/de752063-04ff-42a3-8538-7fb10a9df1ca
![Screenshot 2023-08-09 at 01 55
33](https://github.com/elastic/kibana/assets/1410658/083504c4-7fa6-424b-a833-89dd73c61e49)
### Checklist
Delete any items that are not applicable to this PR.
- [x] Any text added follows [EUI's writing
guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses
sentence case text and includes [i18n
support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md)
- [x]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
- [x] Any UI touched in this PR is usable by keyboard only (learn more
about [keyboard accessibility](https://webaim.org/techniques/keyboard/))
- [x] Any UI touched in this PR does not create any new axe failures
(run axe in browser:
[FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/),
[Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US))
- [ ] This renders correctly on smaller devices using a responsive
layout. (You can test this [in your
browser](https://www.browserstack.com/guide/responsive-testing-on-local-server))
- [ ] This was checked for [cross-browser
compatibility](https://www.elastic.co/support/matrix#matrix_browsers)
---------
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Liam Thompson <32779855+leemthompo@users.noreply.github.com>
---
.github/CODEOWNERS | 1 +
.i18nrc.json | 1 +
package.json | 1 +
packages/kbn-search-api-panels/README.md | 3 +
.../components/code_box.scss | 0
.../components/code_box.tsx | 62 +--
.../components}/github_link.tsx | 21 +-
.../components}/ingest_data.tsx | 74 ++-
.../components/install_client.tsx | 147 ++++++
.../components}/integrations_panel.tsx | 57 +-
.../components}/language_client_panel.tsx | 27 +-
.../components}/overview_panel.tsx | 22 +-
.../components}/select_client.scss | 0
.../components/select_client.tsx | 131 +++++
.../components/try_in_console_button.tsx | 25 +-
packages/kbn-search-api-panels/constants.ts | 19 +
packages/kbn-search-api-panels/index.tsx | 83 +++
packages/kbn-search-api-panels/jest.config.js | 13 +
packages/kbn-search-api-panels/kibana.jsonc | 5 +
packages/kbn-search-api-panels/package.json | 6 +
packages/kbn-search-api-panels/tsconfig.json | 25 +
.../kbn-search-api-panels}/types.ts | 5 +-
tsconfig.base.json | 2 +
.../__mocks__/kea_logic/kibana_logic.mock.ts | 1 +
.../getting_started/getting_started.tsx | 404 ++++++++++++++
.../getting_started/languages/console.ts | 32 ++
.../getting_started/languages/constants.ts | 10 +
.../getting_started/languages/curl.ts | 60 +++
.../getting_started/languages/go.ts | 71 +++
.../getting_started/languages/javascript.ts | 86 +++
.../getting_started/languages/languages.ts | 26 +
.../getting_started/languages/php.ts | 118 +++++
.../getting_started/languages/python.ts | 50 ++
.../getting_started/languages/ruby.ts | 38 ++
.../getting_started/languages/utils.ts | 23 +
.../manage_api_keys_popover/popover.tsx | 86 ---
.../search_index/generate_api_key_panel.tsx | 112 +---
.../assets/search_header.svg | 9 +
.../product_card/product_card.test.tsx | 40 +-
.../components/product_card/product_card.tsx | 67 +--
.../app_search_product_card.tsx | 40 ++
.../behavioral_analytics_product_card.tsx | 32 +-
.../elasticsearch_product_card.tsx | 76 +--
.../enterprise_search_product_card.tsx | 36 ++
.../product_selector/ingestion_selector.tsx | 120 +++++
.../product_selector/product_selector.scss | 8 +
.../product_selector.test.tsx | 27 +-
.../product_selector/product_selector.tsx | 147 ++++--
.../search_applications_product_card.tsx | 38 +-
.../workplace_search_product_card.tsx | 40 ++
.../public/applications/index.test.tsx | 1 +
.../public/applications/index.tsx | 4 +-
.../shared/doc_links/doc_links.ts | 6 +
.../shared/kibana/kibana_logic.ts | 3 +
.../public/assets/client_libraries/curl.svg | 6 +
.../public/assets/client_libraries/github.svg | 3 +
.../public/assets/client_libraries/index.ts | 2 +
.../public/assets/images/api_cloud.svg | 498 ++++++++++++++++++
.../public/assets/images/search_connector.svg | 365 +++++++++++++
.../public/assets/images/search_crawler.svg | 415 +++++++++++++++
.../enterprise_search/public/plugin.ts | 5 +-
.../plugins/enterprise_search/tsconfig.json | 1 +
.../application/components/indexing_api.tsx | 27 +-
.../components/languages/console.ts | 2 +-
.../application/components/languages/curl.ts | 2 +-
.../application/components/languages/go.ts | 2 +-
.../components/languages/javascript.ts | 2 +-
.../components/languages/languages.ts | 3 +-
.../application/components/languages/php.ts | 2 +-
.../components/languages/python.ts | 2 +-
.../application/components/languages/ruby.ts | 2 +-
.../application/components/languages/utils.ts | 22 +
.../application/components/overview.tsx | 123 ++---
.../overview_panels/ingest_data.scss | 3 -
.../overview_panels/install_client.tsx | 114 ----
.../overview_panels/select_client.tsx | 99 ----
.../plugins/serverless_search/tsconfig.json | 1 +
.../translations/translations/fr-FR.json | 58 --
.../translations/translations/ja-JP.json | 58 --
.../translations/translations/zh-CN.json | 58 --
yarn.lock | 4 +
81 files changed, 3383 insertions(+), 1037 deletions(-)
create mode 100644 packages/kbn-search-api-panels/README.md
rename {x-pack/plugins/serverless_search/public/application => packages/kbn-search-api-panels}/components/code_box.scss (100%)
rename {x-pack/plugins/serverless_search/public/application => packages/kbn-search-api-panels}/components/code_box.tsx (70%)
rename {x-pack/plugins/serverless_search/public/application/components/shared => packages/kbn-search-api-panels/components}/github_link.tsx (62%)
rename {x-pack/plugins/serverless_search/public/application/components/overview_panels => packages/kbn-search-api-panels/components}/ingest_data.tsx (59%)
create mode 100644 packages/kbn-search-api-panels/components/install_client.tsx
rename {x-pack/plugins/serverless_search/public/application/components/overview_panels => packages/kbn-search-api-panels/components}/integrations_panel.tsx (72%)
rename {x-pack/plugins/serverless_search/public/application/components/overview_panels => packages/kbn-search-api-panels/components}/language_client_panel.tsx (76%)
rename {x-pack/plugins/serverless_search/public/application/components/overview_panels => packages/kbn-search-api-panels/components}/overview_panel.tsx (71%)
rename {x-pack/plugins/serverless_search/public/application/components/overview_panels => packages/kbn-search-api-panels/components}/select_client.scss (100%)
create mode 100644 packages/kbn-search-api-panels/components/select_client.tsx
rename {x-pack/plugins/serverless_search/public/application => packages/kbn-search-api-panels}/components/try_in_console_button.tsx (63%)
create mode 100644 packages/kbn-search-api-panels/constants.ts
create mode 100644 packages/kbn-search-api-panels/index.tsx
create mode 100644 packages/kbn-search-api-panels/jest.config.js
create mode 100644 packages/kbn-search-api-panels/kibana.jsonc
create mode 100644 packages/kbn-search-api-panels/package.json
create mode 100644 packages/kbn-search-api-panels/tsconfig.json
rename {x-pack/plugins/serverless_search/public/application/components/languages => packages/kbn-search-api-panels}/types.ts (83%)
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/getting_started.tsx
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/console.ts
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/constants.ts
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/curl.ts
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/go.ts
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/javascript.ts
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/languages.ts
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/php.ts
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/python.ts
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/ruby.ts
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/utils.ts
delete mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/manage_api_keys_popover/popover.tsx
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/assets/search_header.svg
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/app_search_product_card.tsx
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/enterprise_search_product_card.tsx
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/ingestion_selector.tsx
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.scss
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/workplace_search_product_card.tsx
create mode 100644 x-pack/plugins/enterprise_search/public/assets/client_libraries/curl.svg
create mode 100644 x-pack/plugins/enterprise_search/public/assets/client_libraries/github.svg
create mode 100644 x-pack/plugins/enterprise_search/public/assets/images/api_cloud.svg
create mode 100644 x-pack/plugins/enterprise_search/public/assets/images/search_connector.svg
create mode 100644 x-pack/plugins/enterprise_search/public/assets/images/search_crawler.svg
create mode 100644 x-pack/plugins/serverless_search/public/application/components/languages/utils.ts
delete mode 100644 x-pack/plugins/serverless_search/public/application/components/overview_panels/ingest_data.scss
delete mode 100644 x-pack/plugins/serverless_search/public/application/components/overview_panels/install_client.tsx
delete mode 100644 x-pack/plugins/serverless_search/public/application/components/overview_panels/select_client.tsx
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 669896f817592..28b817c72abaf 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -588,6 +588,7 @@ examples/screenshot_mode_example @elastic/kibana-app-services
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/enterprise-search-frontend
examples/search_examples @elastic/kibana-data-discovery
packages/kbn-search-response-warnings @elastic/kibana-data-discovery
x-pack/plugins/searchprofiler @elastic/platform-deployment-management
diff --git a/.i18nrc.json b/.i18nrc.json
index 02337d5b8f0d4..2463d023971ed 100644
--- a/.i18nrc.json
+++ b/.i18nrc.json
@@ -92,6 +92,7 @@
"server": "src/legacy/server",
"share": "src/plugins/share",
"sharedUXPackages": "packages/shared-ux",
+ "searchApiPanels": "packages/kbn-search-api-panels/",
"searchResponseWarnings": "packages/kbn-search-response-warnings",
"securitySolutionPackages": "x-pack/packages/security-solution",
"serverlessPackages": "packages/serverless",
diff --git a/package.json b/package.json
index ce692cf389e2e..4cdb0324c75d6 100644
--- a/package.json
+++ b/package.json
@@ -591,6 +591,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/search-api-panels": "link:packages/kbn-search-api-panels",
"@kbn/search-examples-plugin": "link:examples/search_examples",
"@kbn/search-response-warnings": "link:packages/kbn-search-response-warnings",
"@kbn/searchprofiler-plugin": "link:x-pack/plugins/searchprofiler",
diff --git a/packages/kbn-search-api-panels/README.md b/packages/kbn-search-api-panels/README.md
new file mode 100644
index 0000000000000..dba35349a6787
--- /dev/null
+++ b/packages/kbn-search-api-panels/README.md
@@ -0,0 +1,3 @@
+# @kbn/search-api-panels
+
+Empty package generated by @kbn/generate
\ No newline at end of file
diff --git a/x-pack/plugins/serverless_search/public/application/components/code_box.scss b/packages/kbn-search-api-panels/components/code_box.scss
similarity index 100%
rename from x-pack/plugins/serverless_search/public/application/components/code_box.scss
rename to packages/kbn-search-api-panels/components/code_box.scss
diff --git a/x-pack/plugins/serverless_search/public/application/components/code_box.tsx b/packages/kbn-search-api-panels/components/code_box.tsx
similarity index 70%
rename from x-pack/plugins/serverless_search/public/application/components/code_box.tsx
rename to packages/kbn-search-api-panels/components/code_box.tsx
index 59d1dbe0bc143..55b8915328285 100644
--- a/x-pack/plugins/serverless_search/public/application/components/code_box.tsx
+++ b/packages/kbn-search-api-panels/components/code_box.tsx
@@ -1,10 +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 React, { useState } from 'react';
+
import {
EuiButtonEmpty,
EuiCodeBlock,
@@ -19,49 +22,46 @@ import {
EuiThemeProvider,
} from '@elastic/eui';
import { i18n } from '@kbn/i18n';
-import React, { useState } from 'react';
-import { PLUGIN_ID } from '../../../common';
-import { useKibanaServices } from '../hooks/use_kibana';
-import { consoleDefinition } from './languages/console';
-import { LanguageDefinition, LanguageDefinitionSnippetArguments } from './languages/types';
+import type { HttpStart } from '@kbn/core-http-browser';
+import type { ApplicationStart } from '@kbn/core-application-browser';
+import type { SharePluginStart } from '@kbn/share-plugin/public';
+
+import { LanguageDefinition } from '../types';
import { TryInConsoleButton } from './try_in_console_button';
import './code_box.scss';
interface CodeBoxProps {
languages: LanguageDefinition[];
- code: keyof LanguageDefinition;
- codeArgs: LanguageDefinitionSnippetArguments;
+ codeSnippet: string;
// overrides the language type for syntax highlighting
languageType?: string;
selectedLanguage: LanguageDefinition;
setSelectedLanguage: (language: LanguageDefinition) => void;
+ http: HttpStart;
+ pluginId: string;
+ application?: ApplicationStart;
+ sharePlugin: SharePluginStart;
+ showTryInConsole: boolean;
}
-const getCodeSnippet = (
- language: Partial,
- key: keyof LanguageDefinition,
- args: LanguageDefinitionSnippetArguments
-): string => {
- const snippetVal = language[key];
- if (snippetVal === undefined) return '';
- if (typeof snippetVal === 'string') return snippetVal;
- return snippetVal(args);
-};
-
export const CodeBox: React.FC = ({
- code,
- codeArgs,
- languages,
+ application,
+ codeSnippet,
+ http,
languageType,
+ languages,
+ pluginId,
selectedLanguage,
setSelectedLanguage,
+ sharePlugin,
+ showTryInConsole,
}) => {
const [isPopoverOpen, setIsPopoverOpen] = useState(false);
- const { http } = useKibanaServices();
+
const items = languages.map((language) => (
{
setSelectedLanguage(language);
setIsPopoverOpen(false);
@@ -74,7 +74,7 @@ export const CodeBox: React.FC = ({
const button = (
= ({
);
- const codeSnippet = getCodeSnippet(selectedLanguage, code, codeArgs);
- const showTryInConsole = code in consoleDefinition;
return (
@@ -110,7 +108,7 @@ export const CodeBox: React.FC = ({
{(copy) => (
- {i18n.translate('xpack.serverlessSearch.codeBox.copyButtonLabel', {
+ {i18n.translate('searchApiPanels.welcomeBanner.codeBox.copyButtonLabel', {
defaultMessage: 'Copy',
})}
@@ -119,7 +117,11 @@ export const CodeBox: React.FC = ({
{showTryInConsole && (
-
+
)}
diff --git a/x-pack/plugins/serverless_search/public/application/components/shared/github_link.tsx b/packages/kbn-search-api-panels/components/github_link.tsx
similarity index 62%
rename from x-pack/plugins/serverless_search/public/application/components/shared/github_link.tsx
rename to packages/kbn-search-api-panels/components/github_link.tsx
index f5214b1fe9474..19c7a83ed2de3 100644
--- a/x-pack/plugins/serverless_search/public/application/components/shared/github_link.tsx
+++ b/packages/kbn-search-api-panels/components/github_link.tsx
@@ -1,21 +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.
+ * 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 { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiText, EuiLink } from '@elastic/eui';
import React from 'react';
-import { PLUGIN_ID } from '../../../../common';
-import { useKibanaServices } from '../../hooks/use_kibana';
-export const GithubLink: React.FC<{ label: string; href: string }> = ({ label, href }) => {
- const { http } = useKibanaServices();
+import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiText, EuiLink } from '@elastic/eui';
+import { HttpStart } from '@kbn/core-http-browser';
+
+export const GithubLink: React.FC<{
+ label: string;
+ href: string;
+ http: HttpStart;
+ pluginId: string;
+}> = ({ label, href, http, pluginId }) => {
return (
-
+
diff --git a/x-pack/plugins/serverless_search/public/application/components/overview_panels/ingest_data.tsx b/packages/kbn-search-api-panels/components/ingest_data.tsx
similarity index 59%
rename from x-pack/plugins/serverless_search/public/application/components/overview_panels/ingest_data.tsx
rename to packages/kbn-search-api-panels/components/ingest_data.tsx
index 6dd7459b91783..9f82b91e76159 100644
--- a/x-pack/plugins/serverless_search/public/application/components/overview_panels/ingest_data.tsx
+++ b/packages/kbn-search-api-panels/components/ingest_data.tsx
@@ -1,51 +1,72 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
+ * 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, { useState } from 'react';
+
import { EuiCheckableCard, EuiFormFieldset, EuiSpacer, EuiText, EuiTitle } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
-import React, { useState } from 'react';
-import { docLinks } from '../../../../common/doc_links';
-import { CodeBox } from '../code_box';
-import { languageDefinitions } from '../languages/languages';
-import { LanguageDefinition, LanguageDefinitionSnippetArguments } from '../languages/types';
+import type { HttpStart } from '@kbn/core-http-browser';
+import type { ApplicationStart } from '@kbn/core-application-browser';
+import type { SharePluginStart } from '@kbn/share-plugin/public';
+import { CodeBox } from './code_box';
+import { LanguageDefinition } from '../types';
import { OverviewPanel } from './overview_panel';
import { IntegrationsPanel } from './integrations_panel';
interface IngestDataProps {
- codeArguments: LanguageDefinitionSnippetArguments;
+ codeSnippet: string;
selectedLanguage: LanguageDefinition;
setSelectedLanguage: (language: LanguageDefinition) => void;
+ docLinks: any;
+ http: HttpStart;
+ pluginId: string;
+ application?: ApplicationStart;
+ sharePlugin: SharePluginStart;
+ languages: LanguageDefinition[];
+ showTryInConsole: boolean;
}
export const IngestData: React.FC = ({
- codeArguments,
+ codeSnippet,
selectedLanguage,
setSelectedLanguage,
+ docLinks,
+ http,
+ pluginId,
+ application,
+ sharePlugin,
+ languages,
+ showTryInConsole,
}) => {
const [selectedIngestMethod, setSelectedIngestMethod] = useState<
'ingestViaApi' | 'ingestViaIntegration'
>('ingestViaApi');
return (
) : (
-
+
)
}
links={[
@@ -53,7 +74,7 @@ export const IngestData: React.FC = ({
? [
{
href: selectedLanguage.apiReference,
- label: i18n.translate('xpack.serverlessSearch.ingestData.clientDocLink', {
+ label: i18n.translate('searchApiPanels.welcomeBanner.ingestData.clientDocLink', {
defaultMessage: '{languageName} API reference',
values: { languageName: selectedLanguage.name },
}),
@@ -62,18 +83,18 @@ export const IngestData: React.FC = ({
: []),
{
href: docLinks.integrations,
- label: i18n.translate('xpack.serverlessSearch.ingestData.integrationsLink', {
+ label: i18n.translate('searchApiPanels.welcomeBanner.ingestData.integrationsLink', {
defaultMessage: 'About Integrations',
}),
},
]}
- title={i18n.translate('xpack.serverlessSearch.ingestData.title', {
+ title={i18n.translate('searchApiPanels.welcomeBanner.ingestData.title', {
defaultMessage: 'Ingest data',
})}
>
= ({
label={
- {i18n.translate('xpack.serverlessSearch.ingestData.ingestApiLabel', {
+ {i18n.translate('searchApiPanels.welcomeBanner.ingestData.ingestApiLabel', {
defaultMessage: 'Ingest via API',
})}
@@ -96,7 +117,7 @@ export const IngestData: React.FC = ({
onChange={() => setSelectedIngestMethod('ingestViaApi')}
>
- {i18n.translate('xpack.serverlessSearch.ingestData.ingestApiDescription', {
+ {i18n.translate('searchApiPanels.welcomeBanner.ingestData.ingestApiDescription', {
defaultMessage:
'The most flexible way to index data, enabling full control over your customization and optimization options.',
})}
@@ -109,7 +130,7 @@ export const IngestData: React.FC = ({
label={
- {i18n.translate('xpack.serverlessSearch.ingestData.ingestIntegrationLabel', {
+ {i18n.translate('searchApiPanels.welcomeBanner.ingestData.ingestIntegrationLabel', {
defaultMessage: 'Ingest via integration',
})}
@@ -120,10 +141,13 @@ export const IngestData: React.FC = ({
onChange={() => setSelectedIngestMethod('ingestViaIntegration')}
>
- {i18n.translate('xpack.serverlessSearch.ingestData.ingestIntegrationDescription', {
- defaultMessage:
- 'Specialized ingestion tools optimized for transforming data and shipping it to Elasticsearch.',
- })}
+ {i18n.translate(
+ 'searchApiPanels.welcomeBanner.ingestData.ingestIntegrationDescription',
+ {
+ defaultMessage:
+ 'Specialized ingestion tools optimized for transforming data and shipping it to Elasticsearch.',
+ }
+ )}
diff --git a/packages/kbn-search-api-panels/components/install_client.tsx b/packages/kbn-search-api-panels/components/install_client.tsx
new file mode 100644
index 0000000000000..9083cf902f885
--- /dev/null
+++ b/packages/kbn-search-api-panels/components/install_client.tsx
@@ -0,0 +1,147 @@
+/*
+ * Copyright 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 { EuiSpacer, EuiCallOut, EuiText, EuiPanelProps } from '@elastic/eui';
+import { i18n } from '@kbn/i18n';
+import type { HttpStart } from '@kbn/core-http-browser';
+import type { ApplicationStart } from '@kbn/core-application-browser';
+import type { SharePluginStart } from '@kbn/share-plugin/public';
+import { CodeBox } from './code_box';
+import { OverviewPanel } from './overview_panel';
+import { LanguageDefinition, Languages } from '../types';
+import { GithubLink } from './github_link';
+
+interface InstallClientProps {
+ codeSnippet: string;
+ showTryInConsole: boolean;
+ language: LanguageDefinition;
+ setSelectedLanguage: (language: LanguageDefinition) => void;
+ http: HttpStart;
+ pluginId: string;
+ application?: ApplicationStart;
+ sharePlugin: SharePluginStart;
+ isPanelLeft?: boolean;
+ languages: LanguageDefinition[];
+ overviewPanelProps?: Partial;
+}
+
+const Link: React.FC<{ language: Languages; http: HttpStart; pluginId: string }> = ({
+ language,
+ http,
+ pluginId,
+}) => {
+ switch (language) {
+ case Languages.CURL:
+ return (
+
+ );
+ case Languages.JAVASCRIPT:
+ return (
+
+ );
+ case Languages.RUBY:
+ return (
+
+ );
+ }
+ return null;
+};
+
+export const InstallClientPanel: React.FC = ({
+ codeSnippet,
+ showTryInConsole,
+ language,
+ languages,
+ setSelectedLanguage,
+ http,
+ pluginId,
+ application,
+ sharePlugin,
+ isPanelLeft = true,
+ overviewPanelProps,
+}) => {
+ const panelContent = (
+ <>
+
+
+
+
+
+
+ {i18n.translate('searchApiPanels.welcomeBanner.apiCallout.content', {
+ defaultMessage:
+ 'Console enables you to call Elasticsearch and Kibana REST APIs directly, without needing to install a language client.',
+ })}
+
+
+ >
+ );
+ return (
+
+ );
+};
diff --git a/x-pack/plugins/serverless_search/public/application/components/overview_panels/integrations_panel.tsx b/packages/kbn-search-api-panels/components/integrations_panel.tsx
similarity index 72%
rename from x-pack/plugins/serverless_search/public/application/components/overview_panels/integrations_panel.tsx
rename to packages/kbn-search-api-panels/components/integrations_panel.tsx
index f49c12d63d2a3..15a5f70375cec 100644
--- a/x-pack/plugins/serverless_search/public/application/components/overview_panels/integrations_panel.tsx
+++ b/packages/kbn-search-api-panels/components/integrations_panel.tsx
@@ -1,10 +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 React from 'react';
+
import {
EuiThemeProvider,
EuiPanel,
@@ -16,13 +19,22 @@ import {
EuiText,
EuiLink,
} from '@elastic/eui';
+import { HttpStart } from '@kbn/core-http-browser';
import { i18n } from '@kbn/i18n';
-import React from 'react';
-import { docLinks } from '../../../../common/doc_links';
-import { LEARN_MORE_LABEL } from '../../../../common/i18n_string';
-import { GithubLink } from '../shared/github_link';
+import { LEARN_MORE_LABEL } from '../constants';
+import { GithubLink } from './github_link';
-export const IntegrationsPanel: React.FC = () => {
+export interface IntegrationsPanelProps {
+ docLinks: any;
+ http: HttpStart;
+ pluginId: string;
+}
+
+export const IntegrationsPanel: React.FC = ({
+ docLinks,
+ http,
+ pluginId,
+}) => {
return (
@@ -33,7 +45,7 @@ export const IntegrationsPanel: React.FC = () => {
- {i18n.translate('xpack.serverlessSearch.ingestData.logstashTitle', {
+ {i18n.translate('searchApiPanels.welcomeBanner.ingestData.logstashTitle', {
defaultMessage: 'Logstash',
})}
@@ -42,7 +54,7 @@ export const IntegrationsPanel: React.FC = () => {
- {i18n.translate('xpack.serverlessSearch.ingestData.logstashDescription', {
+ {i18n.translate('searchApiPanels.welcomeBanner.ingestData.logstashDescription', {
defaultMessage:
'Add data to your data stream or index to make it searchable. Choose an ingestion method that fits your application and workflow.',
})}
@@ -60,9 +72,11 @@ export const IntegrationsPanel: React.FC = () => {
@@ -76,14 +90,14 @@ export const IntegrationsPanel: React.FC = () => {
- {i18n.translate('xpack.serverlessSearch.ingestData.beatsTitle', {
+ {i18n.translate('searchApiPanels.welcomeBanner.ingestData.beatsTitle', {
defaultMessage: 'Beats',
})}
- {i18n.translate('xpack.serverlessSearch.ingestData.beatsDescription', {
+ {i18n.translate('searchApiPanels.welcomeBanner.ingestData.beatsDescription', {
defaultMessage:
'Lightweight, single-purpose data shippers for Elasticsearch. Use Beats to send operational data from your servers.',
})}
@@ -100,9 +114,11 @@ export const IntegrationsPanel: React.FC = () => {
@@ -116,14 +132,14 @@ export const IntegrationsPanel: React.FC = () => {
- {i18n.translate('xpack.serverlessSearch.ingestData.connectorsTitle', {
+ {i18n.translate('searchApiPanels.welcomeBanner.ingestData.connectorsTitle', {
defaultMessage: 'Connector Client',
})}
- {i18n.translate('xpack.serverlessSearch.ingestData.connectorsDescription', {
+ {i18n.translate('searchApiPanels.welcomeBanner.ingestData.connectorsDescription', {
defaultMessage:
'Specialized integrations for syncing data from third-party sources to Elasticsearch. Use Elastic Connectors to sync content from a range of databases and object stores.',
})}
@@ -140,9 +156,14 @@ export const IntegrationsPanel: React.FC = () => {
diff --git a/x-pack/plugins/serverless_search/public/application/components/overview_panels/language_client_panel.tsx b/packages/kbn-search-api-panels/components/language_client_panel.tsx
similarity index 76%
rename from x-pack/plugins/serverless_search/public/application/components/overview_panels/language_client_panel.tsx
rename to packages/kbn-search-api-panels/components/language_client_panel.tsx
index ebadfdbb61a84..1a2cdab27a35c 100644
--- a/x-pack/plugins/serverless_search/public/application/components/overview_panels/language_client_panel.tsx
+++ b/packages/kbn-search-api-panels/components/language_client_panel.tsx
@@ -1,9 +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 React from 'react';
+
import {
EuiFlexGroup,
EuiFlexItem,
@@ -14,24 +18,29 @@ import {
useEuiTheme,
} from '@elastic/eui';
-import React from 'react';
-import { PLUGIN_ID } from '../../../../common';
-import { useKibanaServices } from '../../hooks/use_kibana';
-import { LanguageDefinition } from '../languages/types';
+import type { HttpStart } from '@kbn/core-http-browser';
+
+import { LanguageDefinition } from '../types';
import './select_client.scss';
+
interface SelectClientProps {
language: LanguageDefinition;
setSelectedLanguage: (language: LanguageDefinition) => void;
isSelectedLanguage: boolean;
+ http: HttpStart;
+ pluginId?: string;
+ src?: string;
}
export const LanguageClientPanel: React.FC = ({
language,
setSelectedLanguage,
isSelectedLanguage,
+ http,
+ pluginId,
+ src,
}) => {
const { euiTheme } = useEuiTheme();
- const { http } = useKibanaServices();
return (
@@ -51,7 +60,9 @@ export const LanguageClientPanel: React.FC = ({
diff --git a/x-pack/plugins/serverless_search/public/application/components/overview_panels/overview_panel.tsx b/packages/kbn-search-api-panels/components/overview_panel.tsx
similarity index 71%
rename from x-pack/plugins/serverless_search/public/application/components/overview_panels/overview_panel.tsx
rename to packages/kbn-search-api-panels/components/overview_panel.tsx
index def3f1e4c9359..56501fab19e37 100644
--- a/x-pack/plugins/serverless_search/public/application/components/overview_panels/overview_panel.tsx
+++ b/packages/kbn-search-api-panels/components/overview_panel.tsx
@@ -1,10 +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 React from 'react';
+
import {
EuiFlexGroup,
EuiFlexItem,
@@ -13,15 +16,17 @@ import {
EuiPanel,
EuiTitle,
EuiLink,
+ EuiPanelProps,
} from '@elastic/eui';
-import React from 'react';
-import { LEARN_MORE_LABEL } from '../../../../common/i18n_string';
+import { LEARN_MORE_LABEL } from '../constants';
interface OverviewPanelProps {
description?: React.ReactNode | string;
- leftPanelContent: React.ReactNode;
+ leftPanelContent?: React.ReactNode;
links?: Array<{ label: string; href: string }>;
+ rightPanelContent?: React.ReactNode;
title: string;
+ overviewPanelProps?: Partial;
}
export const OverviewPanel: React.FC = ({
@@ -29,15 +34,17 @@ export const OverviewPanel: React.FC = ({
description,
leftPanelContent,
links,
+ rightPanelContent,
title,
+ overviewPanelProps,
}) => {
return (
<>
- {leftPanelContent}
+ {leftPanelContent && {leftPanelContent} }
-
+
{title}
@@ -62,6 +69,7 @@ export const OverviewPanel: React.FC = ({
) : null}
+ {rightPanelContent && {rightPanelContent} }
>
diff --git a/x-pack/plugins/serverless_search/public/application/components/overview_panels/select_client.scss b/packages/kbn-search-api-panels/components/select_client.scss
similarity index 100%
rename from x-pack/plugins/serverless_search/public/application/components/overview_panels/select_client.scss
rename to packages/kbn-search-api-panels/components/select_client.scss
diff --git a/packages/kbn-search-api-panels/components/select_client.tsx b/packages/kbn-search-api-panels/components/select_client.tsx
new file mode 100644
index 0000000000000..1e9a3d294f760
--- /dev/null
+++ b/packages/kbn-search-api-panels/components/select_client.tsx
@@ -0,0 +1,131 @@
+/*
+ * Copyright 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 {
+ EuiCallOut,
+ EuiFlexGroup,
+ EuiFlexItem,
+ EuiLink,
+ EuiPanelProps,
+ EuiSpacer,
+ EuiText,
+} from '@elastic/eui';
+import { i18n } from '@kbn/i18n';
+import { FormattedMessage } from '@kbn/i18n-react';
+
+import type { HttpStart } from '@kbn/core-http-browser';
+import { OverviewPanel } from './overview_panel';
+import './select_client.scss';
+
+export interface SelectClientPanelProps {
+ docLinks: { elasticsearchClients: string; kibanaRunApiInConsole: string };
+ http: HttpStart;
+ isPanelLeft?: boolean;
+ overviewPanelProps?: Partial;
+}
+
+export const SelectClientPanel: React.FC = ({
+ docLinks,
+ children,
+ http,
+ isPanelLeft = true,
+ overviewPanelProps,
+}) => {
+ const panelContent = (
+ <>
+
+
+
+
+ {i18n.translate('searchApiPanels.welcomeBanner.selectClient.heading', {
+ defaultMessage: 'Choose one',
+ })}
+
+
+
+
+
+
+ {children}
+
+
+
+
+ {i18n.translate('searchApiPanels.welcomeBanner.selectClient.callout.description', {
+ defaultMessage:
+ 'With Console, you can get started right away with our REST API’s. No installation required. ',
+ })}
+
+
+
+ {i18n.translate('searchApiPanels.welcomeBanner.selectClient.callout.link', {
+ defaultMessage: 'Try Console now',
+ })}
+
+
+
+
+ >
+ );
+ return (
+
+ {i18n.translate(
+ 'searchApiPanels.welcomeBanner.selectClient.description.console.link',
+ {
+ defaultMessage: 'Console',
+ }
+ )}
+
+ ),
+ }}
+ />
+ }
+ leftPanelContent={isPanelLeft ? panelContent : undefined}
+ rightPanelContent={!isPanelLeft ? panelContent : undefined}
+ links={[
+ {
+ href: docLinks.elasticsearchClients,
+ label: i18n.translate(
+ 'searchApiPanels.welcomeBanner.selectClient.elasticsearchClientDocLink',
+ {
+ defaultMessage: 'Elasticsearch clients ',
+ }
+ ),
+ },
+ {
+ href: docLinks.kibanaRunApiInConsole,
+ label: i18n.translate(
+ 'searchApiPanels.welcomeBanner.selectClient.apiRequestConsoleDocLink',
+ {
+ defaultMessage: 'Run API requests in Console ',
+ }
+ ),
+ },
+ ]}
+ title={i18n.translate('searchApiPanels.welcomeBanner.selectClient.title', {
+ defaultMessage: 'Select your client',
+ })}
+ overviewPanelProps={overviewPanelProps}
+ />
+ );
+};
diff --git a/x-pack/plugins/serverless_search/public/application/components/try_in_console_button.tsx b/packages/kbn-search-api-panels/components/try_in_console_button.tsx
similarity index 63%
rename from x-pack/plugins/serverless_search/public/application/components/try_in_console_button.tsx
rename to packages/kbn-search-api-panels/components/try_in_console_button.tsx
index 9426e8f31ea78..35f6ef5d00184 100644
--- a/x-pack/plugins/serverless_search/public/application/components/try_in_console_button.tsx
+++ b/packages/kbn-search-api-panels/components/try_in_console_button.tsx
@@ -1,26 +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.
+ * 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 { EuiButtonEmpty } from '@elastic/eui';
+import type { ApplicationStart } from '@kbn/core-application-browser';
+import type { SharePluginStart } from '@kbn/share-plugin/public';
import { FormattedMessage } from '@kbn/i18n-react';
import { compressToEncodedURIComponent } from 'lz-string';
-import { useKibanaServices } from '../hooks/use_kibana';
-
export interface TryInConsoleButtonProps {
request: string;
+ application?: ApplicationStart;
+ sharePlugin: SharePluginStart;
}
-export const TryInConsoleButton = ({ request }: TryInConsoleButtonProps) => {
- const {
- application,
- share: { url },
- } = useKibanaServices();
+export const TryInConsoleButton = ({
+ request,
+ application,
+ sharePlugin,
+}: TryInConsoleButtonProps) => {
+ const { url } = sharePlugin;
const canShowDevtools = !!application?.capabilities?.dev_tools?.show;
if (!canShowDevtools || !url) return null;
@@ -37,7 +42,7 @@ export const TryInConsoleButton = ({ request }: TryInConsoleButtonProps) => {
return (
diff --git a/packages/kbn-search-api-panels/constants.ts b/packages/kbn-search-api-panels/constants.ts
new file mode 100644
index 0000000000000..dda3028ac96af
--- /dev/null
+++ b/packages/kbn-search-api-panels/constants.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 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import { i18n } from '@kbn/i18n';
+
+export const LEARN_MORE_LABEL: string = i18n.translate(
+ 'searchApiPanels.welcomeBanner.panels.learnMore',
+ {
+ defaultMessage: 'Learn more',
+ }
+);
+export const API_KEY_PLACEHOLDER = 'your_api_key';
+export const ELASTICSEARCH_URL_PLACEHOLDER = 'https://your_deployment_url';
+export const INDEX_NAME_PLACEHOLDER = 'index_name';
diff --git a/packages/kbn-search-api-panels/index.tsx b/packages/kbn-search-api-panels/index.tsx
new file mode 100644
index 0000000000000..d3781084eacae
--- /dev/null
+++ b/packages/kbn-search-api-panels/index.tsx
@@ -0,0 +1,83 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import React from 'react';
+import { EuiFlexGroup, EuiFlexItem, EuiTitle, EuiSpacer, EuiImage, EuiText } from '@elastic/eui';
+import { i18n } from '@kbn/i18n';
+
+export * from './components/code_box';
+export * from './components/github_link';
+export * from './components/ingest_data';
+export * from './components/integrations_panel';
+export * from './components/language_client_panel';
+export * from './components/overview_panel';
+export * from './components/select_client';
+export * from './components/try_in_console_button';
+export * from './components/install_client';
+
+export * from './types';
+
+export interface WelcomeBannerProps {
+ userProfile: {
+ user: {
+ full_name?: string;
+ username?: string;
+ };
+ };
+ assetBasePath?: string;
+ image?: string;
+ showDescription?: boolean;
+}
+
+export const WelcomeBanner: React.FC = ({
+ userProfile,
+ assetBasePath,
+ image,
+ showDescription = true,
+}) => (
+
+
+ {/* Reversing column direction here so screenreaders keep h1 as the first element */}
+
+
+
+
+ {i18n.translate('searchApiPanels.welcomeBanner.header.title', {
+ defaultMessage: 'Get started with Elasticsearch',
+ })}
+
+
+
+
+
+
+ {i18n.translate('searchApiPanels.welcomeBanner.header.greeting.title', {
+ defaultMessage: 'Hi {name}!',
+ values: { name: userProfile?.user?.full_name || userProfile?.user?.username },
+ })}
+
+
+
+
+
+ {showDescription && (
+
+ {i18n.translate('searchApiPanels.welcomeBanner.header.description', {
+ defaultMessage:
+ "Set up your programming language client, ingest some data, and you'll be ready to start searching within minutes.",
+ })}
+
+ )}
+
+
+
+
+
+
+
+);
diff --git a/packages/kbn-search-api-panels/jest.config.js b/packages/kbn-search-api-panels/jest.config.js
new file mode 100644
index 0000000000000..07a6db594c944
--- /dev/null
+++ b/packages/kbn-search-api-panels/jest.config.js
@@ -0,0 +1,13 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+module.exports = {
+ preset: '@kbn/test',
+ rootDir: '../..',
+ roots: ['/packages/kbn-search-api-panels'],
+};
diff --git a/packages/kbn-search-api-panels/kibana.jsonc b/packages/kbn-search-api-panels/kibana.jsonc
new file mode 100644
index 0000000000000..96c4e5beacf23
--- /dev/null
+++ b/packages/kbn-search-api-panels/kibana.jsonc
@@ -0,0 +1,5 @@
+{
+ "type": "shared-common",
+ "id": "@kbn/search-api-panels",
+ "owner": "@elastic/enterprise-search-frontend"
+}
diff --git a/packages/kbn-search-api-panels/package.json b/packages/kbn-search-api-panels/package.json
new file mode 100644
index 0000000000000..8bc3c22474800
--- /dev/null
+++ b/packages/kbn-search-api-panels/package.json
@@ -0,0 +1,6 @@
+{
+ "name": "@kbn/search-api-panels",
+ "private": true,
+ "version": "1.0.0",
+ "license": "SSPL-1.0 OR Elastic License 2.0"
+}
\ No newline at end of file
diff --git a/packages/kbn-search-api-panels/tsconfig.json b/packages/kbn-search-api-panels/tsconfig.json
new file mode 100644
index 0000000000000..82fd44f2cbb32
--- /dev/null
+++ b/packages/kbn-search-api-panels/tsconfig.json
@@ -0,0 +1,25 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "target/types",
+ "types": [
+ "jest",
+ "node",
+ "react"
+ ]
+ },
+ "include": [
+ "**/*.ts",
+ "**/*.tsx",
+ ],
+ "exclude": [
+ "target/**/*"
+ ],
+ "kbn_references": [
+ "@kbn/i18n",
+ "@kbn/core-http-browser",
+ "@kbn/core-application-browser",
+ "@kbn/share-plugin",
+ "@kbn/i18n-react"
+ ]
+}
diff --git a/x-pack/plugins/serverless_search/public/application/components/languages/types.ts b/packages/kbn-search-api-panels/types.ts
similarity index 83%
rename from x-pack/plugins/serverless_search/public/application/components/languages/types.ts
rename to packages/kbn-search-api-panels/types.ts
index 7849b800fc1a0..1d35f440673de 100644
--- a/x-pack/plugins/serverless_search/public/application/components/languages/types.ts
+++ b/packages/kbn-search-api-panels/types.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.
*/
export enum Languages {
diff --git a/tsconfig.base.json b/tsconfig.base.json
index 5b7743964811a..4767ea254f353 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -1170,6 +1170,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/search-api-panels": ["packages/kbn-search-api-panels"],
+ "@kbn/search-api-panels/*": ["packages/kbn-search-api-panels/*"],
"@kbn/search-examples-plugin": ["examples/search_examples"],
"@kbn/search-examples-plugin/*": ["examples/search_examples/*"],
"@kbn/search-response-warnings": ["packages/kbn-search-response-warnings"],
diff --git a/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea_logic/kibana_logic.mock.ts b/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea_logic/kibana_logic.mock.ts
index f374fe8b60666..2eb63fb974b44 100644
--- a/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea_logic/kibana_logic.mock.ts
+++ b/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea_logic/kibana_logic.mock.ts
@@ -61,6 +61,7 @@ export const mockKibanaValues = {
setDocTitle: jest.fn(),
share: sharePluginMock.createStartContract(),
uiSettings: uiSettingsServiceMock.createStartContract(),
+ userProfile: {},
};
jest.mock('../../shared/kibana', () => ({
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/getting_started.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/getting_started.tsx
new file mode 100644
index 0000000000000..15d6108de4cd8
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/getting_started.tsx
@@ -0,0 +1,404 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React, { useState } from 'react';
+
+import { css } from '@emotion/react';
+import { useActions, useValues } from 'kea';
+
+import {
+ EuiButton,
+ EuiCodeBlock,
+ EuiFlexGroup,
+ EuiFlexItem,
+ EuiPanel,
+ EuiSpacer,
+ EuiSplitPanel,
+ EuiText,
+ EuiThemeProvider,
+ EuiTitle,
+} from '@elastic/eui';
+
+import { i18n } from '@kbn/i18n';
+import { useKibana } from '@kbn/kibana-react-plugin/public';
+import {
+ SelectClientPanel,
+ LanguageClientPanel,
+ InstallClientPanel,
+ OverviewPanel,
+ CodeBox,
+} from '@kbn/search-api-panels';
+
+import { LanguageDefinition } from '@kbn/search-api-panels';
+
+import { KibanaDeps } from '../../../../../../../common/types';
+
+import { icons } from '../../../../../../assets/client_libraries';
+import { useCloudDetails } from '../../../../../shared/cloud_details/cloud_details';
+import { docLinks } from '../../../../../shared/doc_links';
+
+import { HttpLogic } from '../../../../../shared/http';
+import { KibanaLogic } from '../../../../../shared/kibana';
+import { IndexViewLogic } from '../../index_view_logic';
+import { OverviewLogic } from '../../overview.logic';
+import { GenerateApiKeyModal } from '../generate_api_key_modal/modal';
+
+import { javascriptDefinition } from './languages/javascript';
+import { languageDefinitions } from './languages/languages';
+import { getCodeSnippet, showTryInConsole } from './languages/utils';
+
+const DEFAULT_URL = 'https://localhost:9200';
+
+export const APIGettingStarted = () => {
+ const { http } = useValues(HttpLogic);
+ const { apiKey, isGenerateModalOpen } = useValues(OverviewLogic);
+ const { openGenerateModal, closeGenerateModal } = useActions(OverviewLogic);
+ const { indexName } = useValues(IndexViewLogic);
+ const { services } = useKibana();
+ const { isCloud } = useValues(KibanaLogic);
+
+ const cloudContext = useCloudDetails();
+
+ const codeArgs = {
+ apiKey,
+ url: cloudContext.elasticsearchUrl || DEFAULT_URL,
+ };
+
+ const [selectedLanguage, setSelectedLanguage] =
+ useState(javascriptDefinition);
+ return (
+ <>
+ {isGenerateModalOpen && (
+
+ )}
+
+
+ {i18n.translate('xpack.enterpriseSearch.content.overview.gettingStarted.pageTitle', {
+ defaultMessage: 'Getting Started with Elastic API',
+ })}
+
+
+
+ {languageDefinitions.map((language, index) => (
+
+
+
+ ))}
+
+
+
+
+
+
+
+
+ {i18n.translate(
+ 'xpack.enterpriseSearch.content.overview.gettingStarted.generateApiKeyPanel.apiKeytitle',
+ {
+ defaultMessage: 'Generate an API key',
+ }
+ )}
+
+
+
+
+ {i18n.translate(
+ 'xpack.enterpriseSearch.content.overview.gettingStarted.generateApiKeyPanel.apiKeydesc',
+ {
+ defaultMessage:
+ 'Your private, unique identifier for authentication and authorization.',
+ }
+ )}
+
+
+
+
+
+
+
+
+ {i18n.translate(
+ 'xpack.enterpriseSearch.content.overview.documementExample.generateApiKeyButton.createNew',
+ { defaultMessage: 'New' }
+ )}
+
+
+
+
+
+
+ KibanaLogic.values.navigateToUrl('/app/management/security/api_keys', {
+ shouldNotCreateHref: true,
+ })
+ }
+ >
+
+
+ {i18n.translate(
+ 'xpack.enterpriseSearch.content.overview.documementExample.generateApiKeyButton.viewAll',
+ { defaultMessage: 'Manage' }
+ )}
+
+
+
+
+
+
+
+
+ }
+ links={[]}
+ title={i18n.translate(
+ 'xpack.enterpriseSearch.content.overview.gettingStarted.generateApiKeyPanel.panelTitle',
+ {
+ defaultMessage: 'Generate an API key',
+ }
+ )}
+ overviewPanelProps={{ color: 'plain', hasShadow: false }}
+ />
+
+
+
+
+
+ {isCloud
+ ? i18n.translate(
+ 'xpack.enterpriseSearch.content.overview.gettingStarted.cloudId.cloudTitle',
+ {
+ defaultMessage: 'Store your unique Cloud ID',
+ }
+ )
+ : i18n.translate(
+ 'xpack.enterpriseSearch.content.overview.gettingStarted.cloudId.elasticTitle',
+ {
+ defaultMessage: 'Store your elasticsearch URL',
+ }
+ )}
+
+
+
+ {i18n.translate(
+ 'xpack.enterpriseSearch.content.overview.gettingStarted.cloudId.desc',
+ {
+ defaultMessage: 'Unique identifier for your deployment. ',
+ }
+ )}
+
+
+
+
+
+ {codeArgs.url}
+
+
+
+
+ }
+ links={[]}
+ title={
+ isCloud
+ ? i18n.translate(
+ 'xpack.enterpriseSearch.overview.gettingStarted.cloudId.panelTitleCloud',
+ {
+ defaultMessage: 'Copy your Cloud ID',
+ }
+ )
+ : i18n.translate(
+ 'xpack.enterpriseSearch.overview.gettingStarted.cloudId.panelTitleElastic',
+ {
+ defaultMessage: 'Copy your elasticsearch URL',
+ }
+ )
+ }
+ overviewPanelProps={{ color: 'plain', hasShadow: false }}
+ />
+
+
+ }
+ links={[]}
+ title={i18n.translate(
+ 'xpack.enterpriseSearch.overview.gettingStarted.configureClient.title',
+ {
+ defaultMessage: 'Configure your client',
+ }
+ )}
+ overviewPanelProps={{ color: 'plain', hasShadow: false }}
+ />
+
+
+ }
+ links={[]}
+ title={i18n.translate(
+ 'xpack.enterpriseSearch.overview.gettingStarted.testConnection.title',
+ {
+ defaultMessage: 'Test your connection',
+ }
+ )}
+ overviewPanelProps={{ color: 'plain', hasShadow: false }}
+ />
+
+ }
+ links={[]}
+ title={i18n.translate('xpack.enterpriseSearch.overview.gettingStarted.ingestData.title', {
+ defaultMessage: 'Ingest Data',
+ })}
+ overviewPanelProps={{ color: 'plain', hasShadow: false }}
+ />
+
+
+ }
+ links={[]}
+ title={i18n.translate('xpack.enterpriseSearch.overview.gettingStarted.searchQuery.title', {
+ defaultMessage: 'Build your first search query',
+ })}
+ overviewPanelProps={{ color: 'plain', hasShadow: false }}
+ />
+ >
+ );
+};
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/console.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/console.ts
new file mode 100644
index 0000000000000..afb685441e89f
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/console.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 { LanguageDefinition } from '@kbn/search-api-panels';
+
+export const consoleDefinition: Partial = {
+ buildSearchQuery: `POST /books/_search?pretty
+{
+ "query": {
+ "query_string": {
+ "query": "snow"
+ }
+ }
+}`,
+ ingestData: `POST _bulk?pretty
+{ "index" : { "_index" : "books" } }
+{"name": "Snow Crash", "author": "Neal Stephenson", "release_date": "1992-06-01", "page_count": 470}
+{ "index" : { "_index" : "books" } }
+{"name": "Revelation Space", "author": "Alastair Reynolds", "release_date": "2000-03-15", "page_count": 585}
+{ "index" : { "_index" : "books" } }
+{"name": "1984", "author": "George Orwell", "release_date": "1985-06-01", "page_count": 328}
+{ "index" : { "_index" : "books" } }
+{"name": "Fahrenheit 451", "author": "Ray Bradbury", "release_date": "1953-10-15", "page_count": 227}
+{ "index" : { "_index" : "books" } }
+{"name": "Brave New World", "author": "Aldous Huxley", "release_date": "1932-06-01", "page_count": 268}
+{ "index" : { "_index" : "books" } }
+{"name": "The Handmaid's Tale", "author": "Margaret Atwood", "release_date": "1985-06-01", "page_count": 311}`,
+};
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/constants.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/constants.ts
new file mode 100644
index 0000000000000..b0b122fa01b5c
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/constants.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.
+ */
+
+export const API_KEY_PLACEHOLDER = 'your_api_key';
+export const ELASTICSEARCH_URL_PLACEHOLDER = 'https://your_deployment_url';
+export const INDEX_NAME_PLACEHOLDER = 'index_name';
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/curl.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/curl.ts
new file mode 100644
index 0000000000000..607b85c7c6e7c
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/curl.ts
@@ -0,0 +1,60 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { i18n } from '@kbn/i18n';
+import { Languages, LanguageDefinition } from '@kbn/search-api-panels';
+
+import { docLinks } from '../../../../../../shared/doc_links';
+
+export const curlDefinition: LanguageDefinition = {
+ buildSearchQuery: `curl -X POST "\$\{ES_URL\}/books/_search?pretty" \\
+ -H "Authorization: ApiKey "\$\{API_KEY\}"" \\
+ -H "Content-Type: application/json" \\
+ -d'
+{
+ "query": {
+ "query_string": {
+ "query": "snow"
+ }
+ }
+}'`,
+ configureClient: ({ apiKey, url }) => `export ES_URL="${url}"
+export API_KEY="${apiKey}"`,
+ docLink: docLinks.restApis,
+ iconType: 'curl.svg',
+ id: Languages.CURL,
+ ingestData: `curl -X POST "\$\{ES_URL\}/_bulk?pretty" \\
+ -H "Authorization: ApiKey "\$\{API_KEY\}"" \\
+ -H "Content-Type: application/json" \\
+ -d'
+{ "index" : { "_index" : "books" } }
+{"name": "Snow Crash", "author": "Neal Stephenson", "release_date": "1992-06-01", "page_count": 470}
+{ "index" : { "_index" : "books" } }
+{"name": "Revelation Space", "author": "Alastair Reynolds", "release_date": "2000-03-15", "page_count": 585}
+{ "index" : { "_index" : "books" } }
+{"name": "1984", "author": "George Orwell", "release_date": "1985-06-01", "page_count": 328}
+{ "index" : { "_index" : "books" } }
+{"name": "Fahrenheit 451", "author": "Ray Bradbury", "release_date": "1953-10-15", "page_count": 227}
+{ "index" : { "_index" : "books" } }
+{"name": "Brave New World", "author": "Aldous Huxley", "release_date": "1932-06-01", "page_count": 268}
+{ "index" : { "_index" : "books" } }
+{"name": "The Handmaid'"'"'s Tale", "author": "Margaret Atwood", "release_date": "1985-06-01", "page_count": 311}
+'`,
+ ingestDataIndex: '',
+ installClient: `# if cURL is not already installed on your system
+# then install it with the package manager of your choice
+
+# example
+brew install curl`,
+ name: i18n.translate('xpack.enterpriseSearch.languages.cURL', {
+ defaultMessage: 'cURL',
+ }),
+ languageStyling: 'shell',
+ testConnection: `curl "\$\{ES_URL\}" \\
+ -H "Authorization: ApiKey "\$\{API_KEY\}"" \\
+ -H "Content-Type: application/json"`,
+};
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/go.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/go.ts
new file mode 100644
index 0000000000000..d75841a9ba1db
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/go.ts
@@ -0,0 +1,71 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license 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 { Languages, LanguageDefinition } from '@kbn/search-api-panels';
+
+import { docLinks } from '../../../../../../shared/doc_links';
+
+export const goDefinition: LanguageDefinition = {
+ buildSearchQuery: `searchResp, err := es.Search().
+ Index("books").
+ Q("snow").
+ Do(context.Background())
+
+fmt.Println(searchResp, err)`,
+ configureClient: ({ url, apiKey }) => `import (
+ "context"
+ "fmt"
+ "log"
+ "strings"
+
+ "github.com/elastic/elasticsearch-serverless-go"
+)
+
+func main() {
+ cfg := elasticsearch.Config{
+ Address: "${url}",
+ APIKey: "${apiKey}",
+ }
+ es, err := elasticsearch.NewClient(cfg)
+ if err != nil {
+ log.Fatalf("Error creating the client: %s", err)
+ }
+}`,
+ docLink: docLinks.clientsGoIndex,
+ iconType: 'go.svg',
+ id: Languages.GO,
+ ingestData: `ingestResult, err := es.Bulk().
+ Index("books").
+ Raw(strings.NewReader(\`
+{"index":{"_id":"9780553351927"}}
+{"name":"Snow Crash","author":"Neal Stephenson","release_date":"1992-06-01","page_count": 470}
+{ "index": { "_id": "9780441017225"}}
+{"name": "Revelation Space", "author": "Alastair Reynolds", "release_date": "2000-03-15", "page_count": 585}
+{ "index": { "_id": "9780451524935"}}
+{"name": "1984", "author": "George Orwell", "release_date": "1985-06-01", "page_count": 328}
+{ "index": { "_id": "9781451673319"}}
+{"name": "Fahrenheit 451", "author": "Ray Bradbury", "release_date": "1953-10-15", "page_count": 227}
+{ "index": { "_id": "9780060850524"}}
+{"name": "Brave New World", "author": "Aldous Huxley", "release_date": "1932-06-01", "page_count": 268}
+{ "index": { "_id": "9780385490818"}}
+{"name": "The Handmaid's Tale", "author": "Margaret Atwood", "release_date": "1985-06-01", "page_count": 311}\n\`)).
+ Do(context.Background())
+
+fmt.Println(ingestResult, err)`,
+ ingestDataIndex: '',
+ installClient: 'go get github.com/elastic/go-elasticsearch/v8@latest',
+ name: i18n.translate('xpack.enterpriseSearch.languages.go', {
+ defaultMessage: 'Go',
+ }),
+ testConnection: `infores, err := es.Info().Do(context.Background())
+ if err != nil {
+ log.Fatalf("Error getting response: %s", err)
+ }
+
+ fmt.Println(infores)`,
+};
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/javascript.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/javascript.ts
new file mode 100644
index 0000000000000..033dc9b3169df
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/javascript.ts
@@ -0,0 +1,86 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license 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 { Languages, LanguageDefinition } from '@kbn/search-api-panels';
+
+import { docLinks } from '../../../../../../shared/doc_links';
+
+export const javascriptDefinition: LanguageDefinition = {
+ buildSearchQuery: `// Let's search!
+const searchResult = await client.search({
+ index: 'my-index-name',
+ q: '9HY9SWR'
+});
+
+console.log(searchResult.hits.hits)
+`,
+ configureClient: ({ url, apiKey }) => `const { Client } = require('@elastic/elasticsearch');
+const client = new Client({
+ node: '${url}',
+ auth: {
+ apiKey: '${apiKey}'
+ }
+});`,
+ docLink: docLinks.clientsJsIntro,
+ iconType: 'javascript.svg',
+ id: Languages.JAVASCRIPT,
+ ingestData: `// Sample flight data
+const dataset = [
+ {'flight': '9HY9SWR', 'price': 841.2656419677076, 'delayed': false},
+ {'flight': 'X98CCZO', 'price': 882.9826615595518, 'delayed': false},
+ {'flight': 'UFK2WIZ', 'price': 190.6369038508356, 'delayed': true},
+];
+
+// Index with the bulk helper
+const result = await client.helpers.bulk({
+ datasource: dataset,
+ onDocument (doc) {
+ return { index: { _index: 'my-index-name' }};
+ }
+});
+
+console.log(result);
+/**
+{
+ total: 3,
+ failed: 0,
+ retry: 0,
+ successful: 3,
+ noop: 0,
+ time: 421,
+ bytes: 293,
+ aborted: false
+}
+*/`,
+ ingestDataIndex: '',
+ installClient: 'npm install @elastic/elasticsearch@8',
+ name: i18n.translate('xpack.enterpriseSearch.languages.javascript', {
+ defaultMessage: 'JavaScript',
+ }),
+ testConnection: `const resp = await client.info();
+
+console.log(resp);
+/**
+{
+ name: 'instance-0000000000',
+ cluster_name: 'd9dcd35d12fe46dfaa28ec813f65d57b',
+ cluster_uuid: 'iln8jaivThSezhTkzp0Knw',
+ version: {
+ build_flavor: 'default',
+ build_type: 'docker',
+ build_hash: 'c94b4700cda13820dad5aa74fae6db185ca5c304',
+ build_date: '2022-10-24T16:54:16.433628434Z',
+ build_snapshot: false,
+ lucene_version: '9.4.1',
+ minimum_wire_compatibility_version: '7.17.0',
+ minimum_index_compatibility_version: '7.0.0'
+ },
+ tagline: 'You Know, for Search'
+}
+*/`,
+};
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/languages.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/languages.ts
new file mode 100644
index 0000000000000..754b1c3386f8f
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/languages.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 { Languages, LanguageDefinition } from '@kbn/search-api-panels';
+
+import { curlDefinition } from './curl';
+import { goDefinition } from './go';
+import { javascriptDefinition } from './javascript';
+import { phpDefinition } from './php';
+import { pythonDefinition } from './python';
+import { rubyDefinition } from './ruby';
+
+const languageDefinitionRecords: Partial> = {
+ [Languages.CURL]: curlDefinition,
+ [Languages.PYTHON]: pythonDefinition,
+ [Languages.JAVASCRIPT]: javascriptDefinition,
+ [Languages.PHP]: phpDefinition,
+ [Languages.GO]: goDefinition,
+ [Languages.RUBY]: rubyDefinition,
+};
+
+export const languageDefinitions: LanguageDefinition[] = Object.values(languageDefinitionRecords);
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/php.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/php.ts
new file mode 100644
index 0000000000000..6b1abcae27954
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/php.ts
@@ -0,0 +1,118 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license 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 { Languages, LanguageDefinition } from '@kbn/search-api-panels';
+
+import { docLinks } from '../../../../../../shared/doc_links';
+
+export const phpDefinition: LanguageDefinition = {
+ buildSearchQuery: `$params = [
+ 'index' => 'books',
+ 'body' => [
+ 'q' => 'snow'
+ ]
+];
+
+$response = $client->search($params);
+print_r($response->asArray());`,
+ configureClient: ({ url, apiKey }) => `$client = ClientBuilder::create()
+ ->setHosts(['${url}'])
+ ->setApiKey('${apiKey}')
+ ->build();`,
+ docLink: docLinks.clientsPhpOverview,
+ iconType: 'php.svg',
+ id: Languages.PHP,
+ ingestData: `$params = [
+ 'body' => [
+ [
+ 'index' => [
+ '_index' => 'books',
+ '_id' => '9780553351927',
+ ],
+ ],
+ [
+ 'name' => 'Snow Crash',
+ 'author' => 'Neal Stephenson',
+ 'release_date' => '1992-06-01',
+ 'page_count' => 470,
+ ],
+ [
+ 'index' => [
+ '_index' => 'books',
+ '_id' => '9780441017225',
+ ],
+ ],
+ [
+ 'name' => 'Revelation Space',
+ 'author' => 'Alastair Reynolds',
+ 'release_date' => '2000-03-15',
+ 'page_count' => 585,
+ ],
+ [
+ 'index' => [
+ '_index' => 'books',
+ '_id' => '9780451524935',
+ ],
+ ],
+ [
+ 'name' => '1984',
+ 'author' => 'George Orwell',
+ 'release_date' => '1985-06-01',
+ 'page_count' => 328,
+ ],
+ [
+ 'index' => [
+ '_index' => 'books',
+ '_id' => '9781451673319',
+ ],
+ ],
+ [
+ 'name' => 'Fahrenheit 451',
+ 'author' => 'Ray Bradbury',
+ 'release_date' => '1953-10-15',
+ 'page_count' => 227,
+ ],
+ [
+ 'index' => [
+ '_index' => 'books',
+ '_id' => '9780060850524',
+ ],
+ ],
+ [
+ 'name' => 'Brave New World',
+ 'author' => 'Aldous Huxley',
+ 'release_date' => '1932-06-01',
+ 'page_count' => 268,
+ ],
+ [
+ 'index' => [
+ '_index' => 'books',
+ '_id' => '9780385490818',
+ ],
+ ],
+ [
+ 'name' => 'The Handmaid\'s Tale',
+ 'author' => 'Margaret Atwood',
+ 'release_date' => '1985-06-01',
+ 'page_count' => 311,
+ ],
+ ],
+ ];
+
+ $response = $client->bulk($params);
+ echo $response->getStatusCode();
+ echo (string) $response->getBody();`,
+ ingestDataIndex: '',
+ installClient: 'composer require elasticsearch/elasticsearch',
+ name: i18n.translate('xpack.enterpriseSearch.languages.php', {
+ defaultMessage: 'PHP',
+ }),
+ testConnection: `$response = $client->info();
+echo $response->getStatusCode();
+echo (string) $response->getBody();`,
+};
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/python.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/python.ts
new file mode 100644
index 0000000000000..c9d5ba67b26e4
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/python.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 { i18n } from '@kbn/i18n';
+import { Languages, LanguageDefinition } from '@kbn/search-api-panels';
+
+import { docLinks } from '../../../../../../shared/doc_links';
+
+export const pythonDefinition: LanguageDefinition = {
+ buildSearchQuery: `client.search(index="books", q="snow")`,
+ configureClient: ({ url, apiKey }) => `from elasticsearch import Elasticsearch
+
+client = Elasticsearch(
+ "${url}",
+ api_key="${apiKey}"
+)`,
+ docLink: docLinks.clientsPythonOverview,
+ iconType: 'python.svg',
+ id: Languages.PYTHON,
+ ingestData: `documents = [
+ { "index": { "_index": "books", "_id": "9780553351927"}},
+ {"name": "Snow Crash", "author": "Neal Stephenson", "release_date": "1992-06-01", "page_count": 470},
+ { "index": { "_index": "books", "_id": "9780441017225"}},
+ {"name": "Revelation Space", "author": "Alastair Reynolds", "release_date": "2000-03-15", "page_count": 585},
+ { "index": { "_index": "books", "_id": "9780451524935"}},
+ {"name": "1984", "author": "George Orwell", "release_date": "1985-06-01", "page_count": 328},
+ { "index": { "_index": "books", "_id": "9781451673319"}},
+ {"name": "Fahrenheit 451", "author": "Ray Bradbury", "release_date": "1953-10-15", "page_count": 227},
+ { "index": { "_index": "books", "_id": "9780060850524"}},
+ {"name": "Brave New World", "author": "Aldous Huxley", "release_date": "1932-06-01", "page_count": 268},
+ { "index": { "_index": "books", "_id": "9780385490818"}},
+ {"name": "The Handmaid's Tale", "author": "Margaret Atwood", "release_date": "1985-06-01", "page_count": 311},
+]
+
+client.bulk(operations=documents)`,
+ ingestDataIndex: '',
+ installClient: `python -m pip install elasticsearch
+
+# If your application uses async/await in Python you can install with the async extra
+# python -m pip install elasticsearch[async]
+ `,
+ name: i18n.translate('xpack.enterpriseSearch.languages.python', {
+ defaultMessage: 'Python',
+ }),
+ testConnection: `client.info()`,
+};
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/ruby.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/ruby.ts
new file mode 100644
index 0000000000000..6706323c96772
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/ruby.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 { i18n } from '@kbn/i18n';
+import { Languages, LanguageDefinition } from '@kbn/search-api-panels';
+
+import { docLinks } from '../../../../../../shared/doc_links';
+
+export const rubyDefinition: LanguageDefinition = {
+ buildSearchQuery: `client.search(index: 'books', q: 'snow')`,
+ configureClient: ({ url, apiKey }) => `client = ElasticsearchServerless::Client.new(
+ api_key: '${apiKey}',
+ url: '${url}'
+)
+`,
+ docLink: docLinks.clientsRubyOverview,
+ iconType: 'ruby.svg',
+ id: Languages.RUBY,
+ ingestData: `documents = [
+ { index: { _index: 'books', data: {name: "Snow Crash", "author": "Neal Stephenson", "release_date": "1992-06-01", "page_count": 470} } },
+ { index: { _index: 'books', data: {name: "Revelation Space", "author": "Alastair Reynolds", "release_date": "2000-03-15", "page_count": 585} } },
+ { index: { _index: 'books', data: {name: "1984", "author": "George Orwell", "release_date": "1985-06-01", "page_count": 328} } },
+ { index: { _index: 'books', data: {name: "Fahrenheit 451", "author": "Ray Bradbury", "release_date": "1953-10-15", "page_count": 227} } },
+ { index: { _index: 'books', data: {name: "Brave New World", "author": "Aldous Huxley", "release_date": "1932-06-01", "page_count": 268} } },
+ { index: { _index: 'books', data: {name: "The Handmaid's Tale", "author": "Margaret Atwood", "release_date": "1985-06-01", "page_count": 311} } }
+]
+client.bulk(body: documents)`,
+ ingestDataIndex: '',
+ installClient: `$ gem install elasticsearch -v x.x.x`,
+ name: i18n.translate('xpack.enterpriseSearch.languages.ruby', {
+ defaultMessage: 'Ruby',
+ }),
+ testConnection: `client.info`,
+};
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/utils.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/utils.ts
new file mode 100644
index 0000000000000..f973099a0947e
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/getting_started/languages/utils.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 { LanguageDefinition, LanguageDefinitionSnippetArguments } from '@kbn/search-api-panels';
+
+import { consoleDefinition } from './console';
+
+export const showTryInConsole = (code: keyof LanguageDefinition) => code in consoleDefinition;
+
+export const getCodeSnippet = (
+ language: Partial,
+ key: keyof LanguageDefinition,
+ args: LanguageDefinitionSnippetArguments
+): string => {
+ const snippetVal = language[key];
+ if (snippetVal === undefined) return '';
+ if (typeof snippetVal === 'string') return snippetVal;
+ return snippetVal(args);
+};
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/manage_api_keys_popover/popover.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/manage_api_keys_popover/popover.tsx
deleted file mode 100644
index e6385096c754d..0000000000000
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/manage_api_keys_popover/popover.tsx
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import React from 'react';
-
-import { useActions, useValues } from 'kea';
-
-import {
- EuiPopover,
- EuiButton,
- EuiContextMenuPanel,
- EuiContextMenuItem,
- EuiText,
-} from '@elastic/eui';
-
-import { i18n } from '@kbn/i18n';
-
-import { KibanaLogic } from '../../../../../shared/kibana';
-
-import { IndexViewLogic } from '../../index_view_logic';
-import { OverviewLogic } from '../../overview.logic';
-
-export const ManageKeysPopover: React.FC = () => {
- const { isManageKeysPopoverOpen } = useValues(OverviewLogic);
- const { ingestionMethod } = useValues(IndexViewLogic);
- const { toggleManageApiKeyPopover, openGenerateModal } = useActions(OverviewLogic);
-
- return (
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.overview.documentExample.generateApiKeyButton.label',
- { defaultMessage: 'Manage API keys' }
- )}
-
- }
- >
-
- KibanaLogic.values.navigateToUrl('/app/management/security/api_keys', {
- shouldNotCreateHref: true,
- })
- }
- >
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.overview.documementExample.generateApiKeyButton.viewAll',
- { defaultMessage: 'View all API keys' }
- )}
-
-
- ,
-
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.overview.documementExample.generateApiKeyButton.createNew',
- { defaultMessage: 'Create a new API key' }
- )}
-
-
- ,
- ]}
- />
-
- );
-};
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/generate_api_key_panel.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/generate_api_key_panel.tsx
index 0de71b834b6f0..f1470f37bc8f0 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/generate_api_key_panel.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/generate_api_key_panel.tsx
@@ -5,45 +5,24 @@
* 2.0.
*/
-import React, { useState } from 'react';
+import React from 'react';
import { useActions, useValues } from 'kea';
-import {
- EuiEmptyPrompt,
- EuiFlexGroup,
- EuiFlexItem,
- EuiLink,
- EuiPanel,
- EuiSwitch,
- EuiText,
- EuiTitle,
-} from '@elastic/eui';
+import { EuiEmptyPrompt, EuiFlexGroup, EuiFlexItem, EuiPanel } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
-import { FormattedMessage } from '@kbn/i18n-react';
-import { docLinks } from '../../../shared/doc_links';
-import { DOCUMENTS_API_JSON_EXAMPLE } from '../new_index/constants';
-
-import { SettingsLogic } from '../settings/settings_logic';
-
-import { ClientLibrariesPopover } from './components/client_libraries_popover/popover';
-import { CurlRequest } from './components/curl_request/curl_request';
import { GenerateApiKeyModal } from './components/generate_api_key_modal/modal';
-import { ManageKeysPopover } from './components/manage_api_keys_popover/popover';
+import { APIGettingStarted } from './components/getting_started/getting_started';
import { IndexViewLogic } from './index_view_logic';
import { OverviewLogic } from './overview.logic';
export const GenerateApiKeyPanel: React.FC = () => {
- const { apiKey, isGenerateModalOpen } = useValues(OverviewLogic);
- const { indexName, ingestionMethod, isHiddenIndex } = useValues(IndexViewLogic);
+ const { isGenerateModalOpen } = useValues(OverviewLogic);
+ const { indexName, isHiddenIndex } = useValues(IndexViewLogic);
const { closeGenerateModal } = useActions(OverviewLogic);
- const { defaultPipeline } = useValues(SettingsLogic);
-
- const [optimizedRequest, setOptimizedRequest] = useState(true);
-
return (
<>
{isGenerateModalOpen && (
@@ -51,7 +30,7 @@ export const GenerateApiKeyPanel: React.FC = () => {
)}
-
+
{isHiddenIndex ? (
{
}
/>
) : (
-
-
-
-
-
-
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.overview.documentExample.title',
- { defaultMessage: 'Adding documents to your index' }
- )}
-
-
-
-
-
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.overview.documentExample.description.clientsLink',
- { defaultMessage: 'programming language clients' }
- )}
-
- ),
- documentation: (
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.overview.documentExample.description.documentationLink',
- { defaultMessage: 'documentation' }
- )}
-
- ),
- }}
- />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- setOptimizedRequest(event.target.checked)}
- label={i18n.translate(
- 'xpack.enterpriseSearch.content.overview.optimizedRequest.label',
- { defaultMessage: 'View Search optimized request' }
- )}
- checked={optimizedRequest}
- />
-
-
-
-
-
+
)}
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/assets/search_header.svg b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/assets/search_header.svg
new file mode 100644
index 0000000000000..c11980cc595b8
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/assets/search_header.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.test.tsx
index acac9b2df20de..349b5cb0a935c 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.test.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.test.tsx
@@ -13,7 +13,7 @@ import { shallow } from 'enzyme';
import { snakeCase } from 'lodash';
-import { EuiListGroup, EuiPanel } from '@elastic/eui';
+import { EuiPanel } from '@elastic/eui';
import { EuiButtonTo, EuiButtonEmptyTo } from '../../../shared/react_router_helpers';
@@ -22,20 +22,10 @@ import { ProductCard, ProductCardProps } from './product_card';
const MOCK_VALUES: ProductCardProps = {
cta: 'Click me',
description: 'Mock description',
- features: ['first feature', 'second feature'],
icon: 'logoElasticsearch',
name: 'Mock product',
productId: 'mockProduct',
- resourceLinks: [
- {
- label: 'Link one',
- to: 'https://www.elastic.co/guide/one',
- },
- {
- label: 'Link twwo',
- to: 'https://www.elastic.co/guide/two',
- },
- ],
+ rightPanelItems: [
,
],
url: '/app/mock_app',
};
@@ -49,10 +39,8 @@ describe('ProductCard', () => {
const card = wrapper.find(EuiPanel);
expect(card.find('h3').text()).toEqual(MOCK_VALUES.name);
- expect(card.find(EuiListGroup).children()).toHaveLength(MOCK_VALUES.features.length);
- expect(card.find('[data-test-subj="productCard-resources"]').text()).toEqual('Resources');
- expect(card.find('[data-test-subj="productCard-resourceLinks"]').children()).toHaveLength(
- MOCK_VALUES.resourceLinks.length
+ expect(card.find('[data-test-subj="productCard-rightPanelItems"]').children()).toHaveLength(
+ MOCK_VALUES.rightPanelItems?.length ?? -1
);
const button = card.find(EuiButtonEmptyTo);
@@ -69,6 +57,26 @@ describe('ProductCard', () => {
});
});
+ it('renders a product card without panel', () => {
+ const wrapper = shallow( );
+ const card = wrapper.find(EuiPanel);
+
+ expect(card.find('[data-test-subj="productCard-rightPanelItems"]')).toHaveLength(0);
+
+ const button = card.find(EuiButtonEmptyTo);
+
+ expect(button).toHaveLength(1);
+ expect(button.prop('to')).toEqual(MOCK_VALUES.url);
+ expect(card.find(EuiButtonTo)).toHaveLength(0);
+
+ button.simulate('click');
+
+ expect(mockTelemetryActions.sendEnterpriseSearchTelemetry).toHaveBeenCalledWith({
+ action: 'clicked',
+ metric: snakeCase(MOCK_VALUES.productId),
+ });
+ });
+
it('renders an empty cta', () => {
const wrapper = shallow( );
const card = wrapper.find(EuiPanel);
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.tsx
index 959992ca4b270..3ba5fa2e1f52c 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.tsx
@@ -14,9 +14,6 @@ import {
EuiFlexGroup,
EuiFlexItem,
EuiIcon,
- EuiLink,
- EuiListGroup,
- EuiListGroupItem,
EuiPanel,
EuiSpacer,
EuiText,
@@ -25,30 +22,22 @@ import {
IconSize,
} from '@elastic/eui';
-import { i18n } from '@kbn/i18n';
-
import { EuiButtonTo, EuiButtonEmptyTo } from '../../../shared/react_router_helpers';
import { TelemetryLogic } from '../../../shared/telemetry';
import './product_card.scss';
-interface ProductResourceLink {
- label: string;
- to: string;
-}
-
export interface ProductCardProps {
cta?: string;
description: string;
emptyCta?: boolean;
- features: string[];
hasBorder?: boolean;
hasShadow?: boolean;
icon: IconType;
iconSize?: IconSize;
name: string;
productId: string;
- resourceLinks: ProductResourceLink[];
+ rightPanelItems?: React.ReactNode[];
url?: string;
}
@@ -56,14 +45,13 @@ export const ProductCard: React.FC = ({
cta,
description,
emptyCta = false,
- features,
hasBorder,
hasShadow,
icon,
iconSize,
productId,
+ rightPanelItems,
name,
- resourceLinks,
url,
}) => {
const { sendEnterpriseSearchTelemetry } = useActions(TelemetryLogic);
@@ -86,8 +74,8 @@ export const ProductCard: React.FC = ({
- {description}
-
+ {description}{' '}
+ {' '}
{cta && url && (
@@ -122,42 +110,19 @@ export const ProductCard: React.FC
= ({
)}
-
-
- {features.map((item: string, index: number) => (
- }
- />
- ))}
-
-
-
-
-
- {i18n.translate('xpack.enterpriseSearch.productCard.resourcesTitle', {
- defaultMessage: 'Resources',
+ {rightPanelItems ? (
+
+
+ {rightPanelItems.map((rightPanelItem) => {
+ return {rightPanelItem} ;
})}
-
-
-
-
- {resourceLinks.map((resource, index) => (
-
-
- {resource.label}
-
-
- ))}
-
-
+
+
+ ) : null}
);
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/app_search_product_card.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/app_search_product_card.tsx
new file mode 100644
index 0000000000000..f8dac98f048ad
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/app_search_product_card.tsx
@@ -0,0 +1,40 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React from 'react';
+
+import { i18n } from '@kbn/i18n';
+
+import { APP_SEARCH_PLUGIN } from '../../../../../common/constants';
+import { ProductCard } from '../product_card';
+
+export interface AppSearchProductCardProps {
+ hasBorder: boolean;
+ hasShadow: boolean;
+}
+
+export const AppSearchProductCard: React.FC = ({
+ hasBorder = true,
+ hasShadow = true,
+}) => (
+
+);
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/behavioral_analytics_product_card.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/behavioral_analytics_product_card.tsx
index 52d5f1ab3d5d6..31761b2e88502 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/behavioral_analytics_product_card.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/behavioral_analytics_product_card.tsx
@@ -10,12 +10,18 @@ import React from 'react';
import { i18n } from '@kbn/i18n';
import { ANALYTICS_PLUGIN } from '../../../../../common/constants';
-import { docLinks } from '../../../shared/doc_links';
import baLogo from '../../assets/behavioral_analytics_logo.svg';
import { ProductCard } from '../product_card';
-export const BehavioralAnalyticsProductCard = () => (
+export interface BehavioralAnalyticsProductCard {
+ hasBorder: boolean;
+ hasShadow: boolean;
+}
+
+export const BehavioralAnalyticsProductCard = ({ hasBorder = true, hasShadow = true }) => (
(
'Dashboards and tools for visualizing end-user behavior and measuring the performance of your search applications',
})}
emptyCta
- features={[
- i18n.translate('xpack.enterpriseSearch.behavioralAnalytics.features.tracking', {
- defaultMessage: "Track users' searching and clicking behavior",
- }),
- i18n.translate('xpack.enterpriseSearch.behavioralAnalytics.features.dashboard', {
- defaultMessage: 'Search management dashboards',
- }),
- i18n.translate('xpack.enterpriseSearch.behavioralAnalytics.features.contentGaps', {
- defaultMessage: 'Identify gaps in your content',
- }),
- ]}
icon={baLogo}
iconSize="l"
name={ANALYTICS_PLUGIN.NAME}
productId={ANALYTICS_PLUGIN.ID}
- resourceLinks={[
- {
- label: i18n.translate(
- 'xpack.enterpriseSearch.behavioralAnalytics.resources.gettingStartedLabel',
- {
- defaultMessage: 'Getting started with Behavioral Analytics',
- }
- ),
- to: docLinks.behavioralAnalytics,
- },
- ]}
url={ANALYTICS_PLUGIN.URL}
/>
);
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/elasticsearch_product_card.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/elasticsearch_product_card.tsx
index 70d5f2765b4cc..3c0609bcf5788 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/elasticsearch_product_card.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/elasticsearch_product_card.tsx
@@ -7,17 +7,15 @@
import React from 'react';
-import { useValues } from 'kea';
-
import { i18n } from '@kbn/i18n';
-import { ELASTICSEARCH_PLUGIN, SEARCH_EXPERIENCES_PLUGIN } from '../../../../../common/constants';
-import { docLinks } from '../../../shared/doc_links';
-import { HttpLogic } from '../../../shared/http';
+import { ELASTICSEARCH_PLUGIN } from '../../../../../common/constants';
import { ProductCard } from '../product_card';
+import { BehavioralAnalyticsProductCard } from './behavioral_analytics_product_card';
+import { SearchApplicationsProductCard } from './search_applications_product_card';
+
export const ElasticsearchProductCard = () => {
- const { http } = useValues(HttpLogic);
return (
{
defaultMessage:
'Ideal for bespoke applications, Elasticsearch helps you build highly customizable search and offers many different ingestion methods.',
})}
- features={[
- i18n.translate('xpack.enterpriseSearch.elasticsearch.features.integrate', {
- defaultMessage: 'Integrate with databases, websites, and more',
- }),
- i18n.translate('xpack.enterpriseSearch.elasticsearch.features.buildTooling', {
- defaultMessage: 'Build custom tooling',
- }),
- i18n.translate('xpack.enterpriseSearch.elasticsearch.features.buildSearchExperiences', {
- defaultMessage: 'Build custom search experiences',
- }),
- i18n.translate('xpack.enterpriseSearch.elasticsearch.features.esre', {
- defaultMessage: 'The Elasticsearch Relevance Engine™ (ESRE)',
- }),
- ]}
icon="logoElasticsearch"
name={ELASTICSEARCH_PLUGIN.NAME}
productId={ELASTICSEARCH_PLUGIN.ID}
- resourceLinks={[
- {
- label: i18n.translate(
- 'xpack.enterpriseSearch.elasticsearch.resources.gettingStartedLabel',
- {
- defaultMessage: 'Getting started with Elasticsearch',
- }
- ),
- to: docLinks.start,
- },
- {
- label: i18n.translate(
- 'xpack.enterpriseSearch.elasticsearch.resources.createNewIndexLabel',
- {
- defaultMessage: 'Create a new index',
- }
- ),
- to: docLinks.start,
- },
- {
- label: i18n.translate(
- 'xpack.enterpriseSearch.elasticsearch.resources.languageClientLabel',
- {
- defaultMessage: 'Set up a language client',
- }
- ),
- to: docLinks.languageClients,
- },
- {
- label: i18n.translate('xpack.enterpriseSearch.elasticsearch.resources.searchUILabel', {
- defaultMessage: 'Search UI for Elasticsearch',
- }),
- to: docLinks.searchUIElasticsearch,
- },
- {
- label: i18n.translate('xpack.enterpriseSearch.elasticsearch.resources.elserLabel', {
- defaultMessage: 'ELSER text expansion',
- }),
- to: docLinks.elser,
- },
- {
- label: i18n.translate(
- 'xpack.enterpriseSearch.elasticsearch.resources.searchExperiencesLabel',
- {
- defaultMessage: 'Search Experiences',
- }
- ),
- to: http.basePath.prepend(SEARCH_EXPERIENCES_PLUGIN.URL),
- },
+ rightPanelItems={[
+ ,
+ ,
]}
/>
);
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/enterprise_search_product_card.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/enterprise_search_product_card.tsx
new file mode 100644
index 0000000000000..b53203aade931
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/enterprise_search_product_card.tsx
@@ -0,0 +1,36 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React from 'react';
+
+import { i18n } from '@kbn/i18n';
+
+import {
+ ENTERPRISE_SEARCH_PRODUCT_NAME,
+ ENTERPRISE_SEARCH_CONTENT_PLUGIN,
+} from '../../../../../common/constants';
+import { ProductCard } from '../product_card';
+
+import { AppSearchProductCard } from './app_search_product_card';
+import { WorkplaceSearchProductCard } from './workplace_search_product_card';
+
+export const EnterpriseSearchProductCard = () => (
+ ,
+ ,
+ ]}
+ />
+);
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/ingestion_selector.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/ingestion_selector.tsx
new file mode 100644
index 0000000000000..8758506edd9b6
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/ingestion_selector.tsx
@@ -0,0 +1,120 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license 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 { generatePath } from 'react-router-dom';
+
+import { EuiButton, EuiCard, EuiFlexGroup, EuiFlexItem, EuiIcon } from '@elastic/eui';
+
+import { i18n } from '@kbn/i18n';
+
+import {
+ ENTERPRISE_SEARCH_CONTENT_PLUGIN,
+ INGESTION_METHOD_IDS,
+} from '../../../../../common/constants';
+
+import apiLogo from '../../../../assets/images/api_cloud.svg';
+import connectorLogo from '../../../../assets/images/search_connector.svg';
+import crawlerLogo from '../../../../assets/images/search_crawler.svg';
+
+import {
+ NEW_API_PATH,
+ NEW_INDEX_METHOD_PATH,
+ NEW_INDEX_SELECT_CONNECTOR_PATH,
+} from '../../../enterprise_search_content/routes';
+import { EuiLinkTo } from '../../../shared/react_router_helpers';
+
+const START_LABEL = i18n.translate('xpack.enterpriseSearch.ingestSelector.startButton', {
+ defaultMessage: 'Start',
+});
+
+export const IngestionSelector: React.FC = () => {
+ return (
+
+
+ }
+ textAlign="left"
+ title={i18n.translate('xpack.enterpriseSearch.ingestSelector.method.api', {
+ defaultMessage: 'API',
+ })}
+ description={i18n.translate(
+ 'xpack.enterpriseSearch.ingestSelector.method.api.description',
+ {
+ defaultMessage:
+ 'Add documents programmatically by connecting with the API using your preferred language client.',
+ }
+ )}
+ footer={
+
+ {START_LABEL}
+
+ }
+ />
+
+
+ }
+ textAlign="left"
+ title={i18n.translate('xpack.enterpriseSearch.ingestSelector.method.connectors', {
+ defaultMessage: 'Connectors',
+ })}
+ description={i18n.translate(
+ 'xpack.enterpriseSearch.ingestSelector.method.connectors.description',
+ {
+ defaultMessage:
+ 'Extract, transform, index and sync data from a third-party data source.',
+ }
+ )}
+ footer={
+
+ {START_LABEL}
+
+ }
+ />
+
+
+ }
+ textAlign="left"
+ title={i18n.translate('xpack.enterpriseSearch.ingestSelector.method.crawler', {
+ defaultMessage: 'Web Crawler',
+ })}
+ description={i18n.translate(
+ 'xpack.enterpriseSearch.ingestSelector.method.crawler.description',
+ {
+ defaultMessage:
+ 'Discover, extract, and index searchable content from websites and knowledge bases.',
+ }
+ )}
+ footer={
+
+ {START_LABEL}
+
+ }
+ />
+
+
+ );
+};
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.scss b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.scss
new file mode 100644
index 0000000000000..8d02868008375
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.scss
@@ -0,0 +1,8 @@
+.entSearchProductSelectorHeader {
+ background-color: $euiColorPrimary;
+}
+
+.entSearchProductSelectorHeader > div {
+ padding-bottom: 0;
+ padding-top: 0;
+}
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.test.tsx
index a1b2b80618c3f..8a37008c2d695 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.test.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.test.tsx
@@ -11,15 +11,13 @@ import React from 'react';
import { shallow } from 'enzyme';
-import { AddContentEmptyPrompt } from '../../../shared/add_content_empty_prompt';
import { ErrorStateCallout } from '../../../shared/error_state';
import { SetupGuideCta } from '../setup_guide';
import { TrialCallout } from '../trial_callout';
-import { BehavioralAnalyticsProductCard } from './behavioral_analytics_product_card';
import { ElasticsearchProductCard } from './elasticsearch_product_card';
-import { SearchApplicationsProductCard } from './search_applications_product_card';
+import { EnterpriseSearchProductCard } from './enterprise_search_product_card';
import { ProductSelector } from '.';
@@ -29,8 +27,7 @@ describe('ProductSelector', () => {
const wrapper = shallow( );
expect(wrapper.find(ElasticsearchProductCard)).toHaveLength(1);
- expect(wrapper.find(SearchApplicationsProductCard)).toHaveLength(1);
- expect(wrapper.find(BehavioralAnalyticsProductCard)).toHaveLength(1);
+ expect(wrapper.find(EnterpriseSearchProductCard)).toHaveLength(1);
expect(wrapper.find(SetupGuideCta)).toHaveLength(1);
});
@@ -58,23 +55,6 @@ describe('ProductSelector', () => {
expect(wrapper.find(ErrorStateCallout)).toHaveLength(1);
});
- it('renders add content', () => {
- setMockValues({ config: { canDeployEntSearch: true, host: 'localhost' } });
- const wrapper = shallow( );
-
- expect(wrapper.find(AddContentEmptyPrompt)).toHaveLength(1);
- });
-
- it('does not render add content when theres a connection error', () => {
- setMockValues({
- config: { canDeployEntSearch: true, host: 'localhost' },
- errorConnectingMessage: '502 Bad Gateway',
- });
- const wrapper = shallow( );
-
- expect(wrapper.find(AddContentEmptyPrompt)).toHaveLength(0);
- });
-
describe('access checks when host is set', () => {
beforeEach(() => {
setMockValues({ config: { canDeployEntSearch: true, host: 'localhost' } });
@@ -84,8 +64,7 @@ describe('ProductSelector', () => {
const wrapper = shallow( );
expect(wrapper.find(ElasticsearchProductCard)).toHaveLength(1);
- expect(wrapper.find(SearchApplicationsProductCard)).toHaveLength(1);
- expect(wrapper.find(BehavioralAnalyticsProductCard)).toHaveLength(1);
+ expect(wrapper.find(EnterpriseSearchProductCard)).toHaveLength(1);
expect(wrapper.find(SetupGuideCta)).toHaveLength(0);
});
});
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 400d5f572ae4d..001d34c1c5ad6 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
@@ -9,90 +9,121 @@ import React from 'react';
import { useValues } from 'kea';
-import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiTitle } from '@elastic/eui';
+import {
+ EuiFlexGroup,
+ EuiFlexItem,
+ EuiPageTemplate,
+ EuiSpacer,
+ EuiText,
+ EuiTitle,
+} from '@elastic/eui';
import { Chat } from '@kbn/cloud-chat-plugin/public';
import { i18n } from '@kbn/i18n';
+import { WelcomeBanner } from '@kbn/search-api-panels';
-import { AddContentEmptyPrompt } from '../../../shared/add_content_empty_prompt';
import { ErrorStateCallout } from '../../../shared/error_state';
import { HttpLogic } from '../../../shared/http';
import { KibanaLogic } from '../../../shared/kibana';
import { SetSearchChrome as SetPageChrome } from '../../../shared/kibana_chrome';
import { SendEnterpriseSearchTelemetry as SendTelemetry } from '../../../shared/telemetry';
+import headerImage from '../../assets/search_header.svg';
+
import { EnterpriseSearchOverviewPageTemplate } from '../layout';
import { SetupGuideCta } from '../setup_guide';
import { TrialCallout } from '../trial_callout';
-import { BehavioralAnalyticsProductCard } from './behavioral_analytics_product_card';
import { ElasticsearchProductCard } from './elasticsearch_product_card';
-import { SearchApplicationsProductCard } from './search_applications_product_card';
+import { EnterpriseSearchProductCard } from './enterprise_search_product_card';
+import { IngestionSelector } from './ingestion_selector';
+
+import './product_selector.scss';
export const ProductSelector: React.FC = () => {
- const { config } = useValues(KibanaLogic);
+ const { config, userProfile } = useValues(KibanaLogic);
const { errorConnectingMessage } = useValues(HttpLogic);
const showErrorConnecting = !!(config.host && errorConnectingMessage);
// The create index flow does not work without ent-search, when content is updated
// to no longer rely on ent-search we can always show the Add Content component
- const showAddContent = config.host && !errorConnectingMessage;
return (
-
-
-
-
- {showAddContent && (
- <>
-
+
+
+
+
+
+
+
+
+
+
+
+
+ {i18n.translate('xpack.enterpriseSearch.productSelector.overview.title', {
+ defaultMessage: 'Ingest your content',
+ })}
+
+
+
+
+
+ {i18n.translate('xpack.enterpriseSearch.productSelector.overview.description', {
+ defaultMessage:
+ 'The first step in building your search experience is to create a search-optimized Elasticsearch index and import your content into it. Elasticsearch offers several user-friendly options you can choose from that best match your technical expertise and data sources.',
})}
- buttonLabel={i18n.translate('xpack.enterpriseSearch.overview.emptyPromptButtonLabel', {
- defaultMessage: 'Create an Elasticsearch index',
+
+
+
+
+
+
+ {showErrorConnecting && (
+ <>
+
+
+ >
+ )}
+
+
+
+
+ {i18n.translate('xpack.enterpriseSearch.productSelector.overview.createCustom.title', {
+ defaultMessage: 'Create a custom search experience',
})}
- />
-
- >
- )}
- {showErrorConnecting && (
- <>
-
-
- >
- )}
-
-
- {i18n.translate('xpack.enterpriseSearch.overview.productSelector.title', {
- defaultMessage: "What's next?",
- })}
-
-
-
-
-
-
-
-
-
-
-
-
-
- {!config.host && config.canDeployEntSearch && (
+
+
+
+
+
+ {i18n.translate(
+ 'xpack.enterpriseSearch.productSelector.overview.createCustom.description',
+ {
+ defaultMessage:
+ "Once your index is created and populated, you'll be ready to use the full power of Elasticsearch. Build search applications using our out-of-the-box tools and programming language clients, all backed by a robust set of APIs.",
+ }
+ )}
+
+
+
+
+
+
-
+
- )}
-
-
-
+
+
+
+ {!config.host && config.canDeployEntSearch && (
+
+
+
+ )}
+
+
+
+ >
);
};
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/search_applications_product_card.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/search_applications_product_card.tsx
index e85645445449a..582387697d426 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/search_applications_product_card.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/search_applications_product_card.tsx
@@ -10,12 +10,21 @@ import React from 'react';
import { i18n } from '@kbn/i18n';
import { APPLICATIONS_PLUGIN } from '../../../../../common/constants';
-import { docLinks } from '../../../shared/doc_links';
import searchAppLogo from '../../assets/search_applications_logo.svg';
import { ProductCard } from '../product_card';
-export const SearchApplicationsProductCard = () => (
+export interface SearchApplicationProductCardProps {
+ hasBorder: boolean;
+ hasShadow: boolean;
+}
+
+export const SearchApplicationsProductCard: React.FC = ({
+ hasBorder = true,
+ hasShadow = true,
+}) => (
(
'Search Applications help make your Elasticsearch data easily searchable for end users',
})}
emptyCta
- features={[
- i18n.translate('xpack.enterpriseSearch.searchApplications.features.queries', {
- defaultMessage: 'Build queries using search templates and DLS',
- }),
- i18n.translate('xpack.enterpriseSearch.searchApplications.features.indices', {
- defaultMessage: 'Combine your Elasticsearch indices',
- }),
- i18n.translate('xpack.enterpriseSearch.searchApplications.features.docsExplorer', {
- defaultMessage: 'Easily preview your search results',
- }),
- i18n.translate('xpack.enterpriseSearch.searchApplications.features.api', {
- defaultMessage: 'Elasticsearch Search Application API',
- }),
- ]}
icon={searchAppLogo}
iconSize="l"
name={APPLICATIONS_PLUGIN.NAV_TITLE}
productId={APPLICATIONS_PLUGIN.ID}
- resourceLinks={[
- {
- label: i18n.translate(
- 'xpack.enterpriseSearch.searchApplications.resources.gettingStartedLabel',
- {
- defaultMessage: 'Getting started with Search Applications',
- }
- ),
- to: docLinks.searchApplications,
- },
- ]}
url={APPLICATIONS_PLUGIN.URL}
/>
);
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/workplace_search_product_card.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/workplace_search_product_card.tsx
new file mode 100644
index 0000000000000..6139d7a2f2b2c
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/workplace_search_product_card.tsx
@@ -0,0 +1,40 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React from 'react';
+
+import { i18n } from '@kbn/i18n';
+
+import { WORKPLACE_SEARCH_PLUGIN } from '../../../../../common/constants';
+import { ProductCard } from '../product_card';
+
+export interface WorkplaceSearchProductCardProps {
+ hasBorder: boolean;
+ hasShadow: boolean;
+}
+
+export const WorkplaceSearchProductCard: React.FC = ({
+ hasBorder = true,
+ hasShadow = true,
+}) => (
+
+);
diff --git a/x-pack/plugins/enterprise_search/public/applications/index.test.tsx b/x-pack/plugins/enterprise_search/public/applications/index.test.tsx
index 6f8a8df2d9ef8..81f092bb4dea5 100644
--- a/x-pack/plugins/enterprise_search/public/applications/index.test.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/index.test.tsx
@@ -38,6 +38,7 @@ describe('renderApp', () => {
licensing: licensingMock.createStart(),
security: securityMock.createStart(),
share: sharePluginMock.createStartContract(),
+ userProfile: { user: {} },
},
} as any;
const pluginData = {
diff --git a/x-pack/plugins/enterprise_search/public/applications/index.tsx b/x-pack/plugins/enterprise_search/public/applications/index.tsx
index 1d9ae419f5a76..0cee920d4ff7f 100644
--- a/x-pack/plugins/enterprise_search/public/applications/index.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/index.tsx
@@ -66,7 +66,7 @@ export const renderApp = (
const { history } = params;
const { application, chrome, http, uiSettings } = core;
const { capabilities, navigateToUrl } = application;
- const { charts, cloud, guidedOnboarding, lens, security, share } = plugins;
+ const { charts, cloud, guidedOnboarding, lens, security, share, userProfile } = plugins;
const entCloudHost = getCloudEnterpriseSearchHost(plugins.cloud);
externalUrl.enterpriseSearchUrl = publicUrl || entCloudHost || config.host || '';
@@ -84,7 +84,6 @@ export const renderApp = (
resetContext({ createStore: true });
const store = getContext().store;
-
const unmountKibanaLogic = mountKibanaLogic({
application,
capabilities,
@@ -109,6 +108,7 @@ export const renderApp = (
setDocTitle: chrome.docTitle.change,
share,
uiSettings,
+ userProfile,
});
const unmountLicensingLogic = mountLicensingLogic({
canManageLicense: core.application.capabilities.management?.stack?.license_management,
diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/doc_links/doc_links.ts b/x-pack/plugins/enterprise_search/public/applications/shared/doc_links/doc_links.ts
index c61deecb811d0..1b3492e719792 100644
--- a/x-pack/plugins/enterprise_search/public/applications/shared/doc_links/doc_links.ts
+++ b/x-pack/plugins/enterprise_search/public/applications/shared/doc_links/doc_links.ts
@@ -82,6 +82,7 @@ class DocLinks {
public connectorsSharepoint: string;
public connectorsSharepointOnline: string;
public connectorsWorkplaceSearch: string;
+ public consoleGuide: string;
public crawlerExtractionRules: string;
public crawlerManaging: string;
public crawlerOverview: string;
@@ -114,6 +115,7 @@ class DocLinks {
public mlDocumentEnrichment: string;
public pluginsIngestAttachment: string;
public queryDsl: string;
+ public restApis: string;
public rrf: string;
public searchApplications: string;
public searchApplicationsSearch: string;
@@ -238,6 +240,7 @@ class DocLinks {
this.connectorsSharepoint = '';
this.connectorsSharepointOnline = '';
this.connectorsWorkplaceSearch = '';
+ this.consoleGuide = '';
this.crawlerExtractionRules = '';
this.crawlerManaging = '';
this.crawlerOverview = '';
@@ -270,6 +273,7 @@ class DocLinks {
this.mlDocumentEnrichment = '';
this.pluginsIngestAttachment = '';
this.queryDsl = '';
+ this.restApis = '';
this.rrf = '';
this.searchUIAppSearch = '';
this.searchUIElasticsearch = '';
@@ -396,6 +400,7 @@ class DocLinks {
this.connectorsSharepoint = docLinks.links.enterpriseSearch.connectorsSharepoint;
this.connectorsSharepointOnline = docLinks.links.enterpriseSearch.connectorsSharepointOnline;
this.connectorsWorkplaceSearch = docLinks.links.enterpriseSearch.connectorsWorkplaceSearch;
+ this.consoleGuide = docLinks.links.console.guide;
this.crawlerExtractionRules = docLinks.links.enterpriseSearch.crawlerExtractionRules;
this.crawlerManaging = docLinks.links.enterpriseSearch.crawlerManaging;
this.crawlerOverview = docLinks.links.enterpriseSearch.crawlerOverview;
@@ -428,6 +433,7 @@ class DocLinks {
this.mlDocumentEnrichment = docLinks.links.enterpriseSearch.mlDocumentEnrichment;
this.pluginsIngestAttachment = docLinks.links.plugins.ingestAttachment;
this.queryDsl = docLinks.links.query.queryDsl;
+ this.restApis = docLinks.links.apis.restApis;
this.rrf = docLinks.links.elasticsearch.rrf;
this.searchUIAppSearch = docLinks.links.searchUI.appSearch;
this.searchUIElasticsearch = docLinks.links.searchUI.elasticsearch;
diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts b/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts
index d816c747e5027..c79ad565b2eb7 100644
--- a/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts
+++ b/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts
@@ -21,6 +21,7 @@ import {
import { DataPublicPluginStart } from '@kbn/data-plugin/public';
import { GuidedOnboardingPluginStart } from '@kbn/guided-onboarding-plugin/public';
import { LensPublicStart } from '@kbn/lens-plugin/public';
+import { GetUserProfileResponse, UserProfileData } from '@kbn/security-plugin/common';
import { SecurityPluginStart } from '@kbn/security-plugin/public';
import { SharePluginStart } from '@kbn/share-plugin/public';
@@ -53,6 +54,7 @@ interface KibanaLogicProps {
setDocTitle(title: string): void;
share: SharePluginStart;
uiSettings: IUiSettingsClient;
+ userProfile: GetUserProfileResponse;
}
export interface KibanaValues extends Omit {
@@ -93,6 +95,7 @@ export const KibanaLogic = kea>({
setDocTitle: [props.setDocTitle, {}],
share: [props.share, {}],
uiSettings: [props.uiSettings, {}],
+ userProfile: [props.userProfile, {}],
}),
selectors: ({ selectors }) => ({
isCloud: [() => [selectors.cloud], (cloud?: Partial) => !!cloud?.isCloudEnabled],
diff --git a/x-pack/plugins/enterprise_search/public/assets/client_libraries/curl.svg b/x-pack/plugins/enterprise_search/public/assets/client_libraries/curl.svg
new file mode 100644
index 0000000000000..e922b12283f7d
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/assets/client_libraries/curl.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/x-pack/plugins/enterprise_search/public/assets/client_libraries/github.svg b/x-pack/plugins/enterprise_search/public/assets/client_libraries/github.svg
new file mode 100644
index 0000000000000..94fb8d1ae09a9
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/assets/client_libraries/github.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/x-pack/plugins/enterprise_search/public/assets/client_libraries/index.ts b/x-pack/plugins/enterprise_search/public/assets/client_libraries/index.ts
index 0e0e774aa5bba..87cde9fe97244 100644
--- a/x-pack/plugins/enterprise_search/public/assets/client_libraries/index.ts
+++ b/x-pack/plugins/enterprise_search/public/assets/client_libraries/index.ts
@@ -5,6 +5,7 @@
* 2.0.
*/
+import curl from './curl.svg';
import dotnet from './dotnet.svg';
import go from './go.svg';
import java from './java.svg';
@@ -16,6 +17,7 @@ import ruby from './ruby.svg';
import rust from './rust.svg';
export const icons = {
+ curl,
dotnet,
go,
java,
diff --git a/x-pack/plugins/enterprise_search/public/assets/images/api_cloud.svg b/x-pack/plugins/enterprise_search/public/assets/images/api_cloud.svg
new file mode 100644
index 0000000000000..96ec0e633d734
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/assets/images/api_cloud.svg
@@ -0,0 +1,498 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/x-pack/plugins/enterprise_search/public/assets/images/search_connector.svg b/x-pack/plugins/enterprise_search/public/assets/images/search_connector.svg
new file mode 100644
index 0000000000000..ea1a85904bd72
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/assets/images/search_connector.svg
@@ -0,0 +1,365 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/x-pack/plugins/enterprise_search/public/assets/images/search_crawler.svg b/x-pack/plugins/enterprise_search/public/assets/images/search_crawler.svg
new file mode 100644
index 0000000000000..76fc74b74ea57
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/assets/images/search_crawler.svg
@@ -0,0 +1,415 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/x-pack/plugins/enterprise_search/public/plugin.ts b/x-pack/plugins/enterprise_search/public/plugin.ts
index 615805190a3bf..e0b86110125fb 100644
--- a/x-pack/plugins/enterprise_search/public/plugin.ts
+++ b/x-pack/plugins/enterprise_search/public/plugin.ts
@@ -22,6 +22,7 @@ import { GuidedOnboardingPluginStart } from '@kbn/guided-onboarding-plugin/publi
import type { HomePublicPluginSetup } from '@kbn/home-plugin/public';
import { LensPublicStart } from '@kbn/lens-plugin/public';
import { LicensingPluginStart } from '@kbn/licensing-plugin/public';
+import { GetUserProfileResponse, UserProfileData } from '@kbn/security-plugin/common';
import { SecurityPluginSetup, SecurityPluginStart } from '@kbn/security-plugin/public';
import { SharePluginStart } from '@kbn/share-plugin/public';
@@ -65,6 +66,7 @@ export interface PluginsStart {
licensing: LicensingPluginStart;
security: SecurityPluginStart;
share: SharePluginStart;
+ userProfile: GetUserProfileResponse;
}
export class EnterpriseSearchPlugin implements Plugin {
@@ -100,7 +102,8 @@ export class EnterpriseSearchPlugin implements Plugin {
cloudSetup && (pluginsStart as PluginsStart).cloud
? { ...cloudSetup, ...(pluginsStart as PluginsStart).cloud }
: undefined;
- const plugins = { ...pluginsStart, cloud } as PluginsStart;
+ const userProfile = await (pluginsStart as PluginsStart).security.userProfiles.getCurrent();
+ const plugins = { ...pluginsStart, cloud, userProfile } as PluginsStart;
coreStart.chrome
.getChromeStyle$()
diff --git a/x-pack/plugins/enterprise_search/tsconfig.json b/x-pack/plugins/enterprise_search/tsconfig.json
index 39758cb511103..25cc264924d47 100644
--- a/x-pack/plugins/enterprise_search/tsconfig.json
+++ b/x-pack/plugins/enterprise_search/tsconfig.json
@@ -62,5 +62,6 @@
"@kbn/logs-shared-plugin",
"@kbn/share-plugin",
"@kbn/core-saved-objects-migration-server-internal",
+ "@kbn/search-api-panels",
]
}
diff --git a/x-pack/plugins/serverless_search/public/application/components/indexing_api.tsx b/x-pack/plugins/serverless_search/public/application/components/indexing_api.tsx
index eb34e345be142..35674a82695b2 100644
--- a/x-pack/plugins/serverless_search/public/application/components/indexing_api.tsx
+++ b/x-pack/plugins/serverless_search/public/application/components/indexing_api.tsx
@@ -23,18 +23,20 @@ import {
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n-react';
import { useQuery } from '@tanstack/react-query';
+import { OverviewPanel, LanguageClientPanel, CodeBox } from '@kbn/search-api-panels';
+import type {
+ LanguageDefinition,
+ LanguageDefinitionSnippetArguments,
+} from '@kbn/search-api-panels';
+import { PLUGIN_ID } from '../../../common';
import { IndexData, FetchIndicesResult } from '../../../common/types';
import { FETCH_INDICES_PATH } from '../routes';
import { API_KEY_PLACEHOLDER, ELASTICSEARCH_URL_PLACEHOLDER } from '../constants';
import { useKibanaServices } from '../hooks/use_kibana';
-import { CodeBox } from './code_box';
import { javascriptDefinition } from './languages/javascript';
import { languageDefinitions } from './languages/languages';
-import { LanguageDefinition, LanguageDefinitionSnippetArguments } from './languages/types';
-
-import { OverviewPanel } from './overview_panels/overview_panel';
-import { LanguageClientPanel } from './overview_panels/language_client_panel';
+import { getCodeSnippet, showTryInConsole } from './languages/utils';
const NoIndicesContent = () => (
<>
@@ -115,7 +117,7 @@ const IndicesContent = ({
};
export const ElasticsearchIndexingApi = () => {
- const { cloud, http } = useKibanaServices();
+ const { cloud, http, share } = useKibanaServices();
const [selectedLanguage, setSelectedLanguage] =
useState(javascriptDefinition);
const [indexSearchQuery, setIndexSearchQuery] = useState(undefined);
@@ -200,17 +202,26 @@ export const ElasticsearchIndexingApi = () => {
language={language}
setSelectedLanguage={setSelectedLanguage}
isSelectedLanguage={selectedLanguage === language}
+ http={http}
+ pluginId={PLUGIN_ID}
/>
))}
>
}
diff --git a/x-pack/plugins/serverless_search/public/application/components/languages/console.ts b/x-pack/plugins/serverless_search/public/application/components/languages/console.ts
index c2fceaae4f85b..d234262d93f13 100644
--- a/x-pack/plugins/serverless_search/public/application/components/languages/console.ts
+++ b/x-pack/plugins/serverless_search/public/application/components/languages/console.ts
@@ -5,8 +5,8 @@
* 2.0.
*/
+import { LanguageDefinition } from '@kbn/search-api-panels';
import { INDEX_NAME_PLACEHOLDER } from '../../constants';
-import { LanguageDefinition } from './types';
export const consoleDefinition: Partial = {
buildSearchQuery: `POST /books/_search?pretty
diff --git a/x-pack/plugins/serverless_search/public/application/components/languages/curl.ts b/x-pack/plugins/serverless_search/public/application/components/languages/curl.ts
index cc98b35c87696..a0ed0f89723c9 100644
--- a/x-pack/plugins/serverless_search/public/application/components/languages/curl.ts
+++ b/x-pack/plugins/serverless_search/public/application/components/languages/curl.ts
@@ -5,9 +5,9 @@
* 2.0.
*/
+import { Languages, LanguageDefinition } from '@kbn/search-api-panels';
import { i18n } from '@kbn/i18n';
import { docLinks } from '../../../../common/doc_links';
-import { LanguageDefinition, Languages } from './types';
export const curlDefinition: LanguageDefinition = {
buildSearchQuery: `curl -X POST "\$\{ES_URL\}/books/_search?pretty" \\
diff --git a/x-pack/plugins/serverless_search/public/application/components/languages/go.ts b/x-pack/plugins/serverless_search/public/application/components/languages/go.ts
index f7cd2b3ac2cdc..00e70f7ce7a99 100644
--- a/x-pack/plugins/serverless_search/public/application/components/languages/go.ts
+++ b/x-pack/plugins/serverless_search/public/application/components/languages/go.ts
@@ -6,8 +6,8 @@
*/
import { i18n } from '@kbn/i18n';
+import { Languages, LanguageDefinition } from '@kbn/search-api-panels';
import { docLinks } from '../../../../common/doc_links';
-import { LanguageDefinition, Languages } from './types';
export const goDefinition: LanguageDefinition = {
advancedConfig: docLinks.goAdvancedConfig,
diff --git a/x-pack/plugins/serverless_search/public/application/components/languages/javascript.ts b/x-pack/plugins/serverless_search/public/application/components/languages/javascript.ts
index d2ed8c016df85..bac5452ca5105 100644
--- a/x-pack/plugins/serverless_search/public/application/components/languages/javascript.ts
+++ b/x-pack/plugins/serverless_search/public/application/components/languages/javascript.ts
@@ -5,9 +5,9 @@
* 2.0.
*/
+import { Languages, LanguageDefinition } from '@kbn/search-api-panels';
import { i18n } from '@kbn/i18n';
import { docLinks } from '../../../../common/doc_links';
-import { LanguageDefinition, Languages } from './types';
export const javascriptDefinition: LanguageDefinition = {
advancedConfig: docLinks.jsAdvancedConfig,
diff --git a/x-pack/plugins/serverless_search/public/application/components/languages/languages.ts b/x-pack/plugins/serverless_search/public/application/components/languages/languages.ts
index 38b7cf2beacb0..754b1c3386f8f 100644
--- a/x-pack/plugins/serverless_search/public/application/components/languages/languages.ts
+++ b/x-pack/plugins/serverless_search/public/application/components/languages/languages.ts
@@ -5,13 +5,14 @@
* 2.0.
*/
+import { Languages, LanguageDefinition } from '@kbn/search-api-panels';
+
import { curlDefinition } from './curl';
import { goDefinition } from './go';
import { javascriptDefinition } from './javascript';
import { phpDefinition } from './php';
import { pythonDefinition } from './python';
import { rubyDefinition } from './ruby';
-import { Languages, LanguageDefinition } from './types';
const languageDefinitionRecords: Partial> = {
[Languages.CURL]: curlDefinition,
diff --git a/x-pack/plugins/serverless_search/public/application/components/languages/php.ts b/x-pack/plugins/serverless_search/public/application/components/languages/php.ts
index 5e6824dc174b2..a13a1ea9b7177 100644
--- a/x-pack/plugins/serverless_search/public/application/components/languages/php.ts
+++ b/x-pack/plugins/serverless_search/public/application/components/languages/php.ts
@@ -6,9 +6,9 @@
*/
import { i18n } from '@kbn/i18n';
+import { Languages, LanguageDefinition } from '@kbn/search-api-panels';
import { docLinks } from '../../../../common/doc_links';
import { INDEX_NAME_PLACEHOLDER } from '../../constants';
-import { LanguageDefinition, Languages } from './types';
export const phpDefinition: LanguageDefinition = {
advancedConfig: docLinks.phpAdvancedConfig,
diff --git a/x-pack/plugins/serverless_search/public/application/components/languages/python.ts b/x-pack/plugins/serverless_search/public/application/components/languages/python.ts
index 9f5031a0993ca..4fa3da0323868 100644
--- a/x-pack/plugins/serverless_search/public/application/components/languages/python.ts
+++ b/x-pack/plugins/serverless_search/public/application/components/languages/python.ts
@@ -6,8 +6,8 @@
*/
import { i18n } from '@kbn/i18n';
+import { Languages, LanguageDefinition } from '@kbn/search-api-panels';
import { docLinks } from '../../../../common/doc_links';
-import { LanguageDefinition, Languages } from './types';
import { INDEX_NAME_PLACEHOLDER } from '../../constants';
export const pythonDefinition: LanguageDefinition = {
diff --git a/x-pack/plugins/serverless_search/public/application/components/languages/ruby.ts b/x-pack/plugins/serverless_search/public/application/components/languages/ruby.ts
index b6b8ce3c24428..4339d5f8261cc 100644
--- a/x-pack/plugins/serverless_search/public/application/components/languages/ruby.ts
+++ b/x-pack/plugins/serverless_search/public/application/components/languages/ruby.ts
@@ -6,9 +6,9 @@
*/
import { i18n } from '@kbn/i18n';
+import { Languages, LanguageDefinition } from '@kbn/search-api-panels';
import { docLinks } from '../../../../common/doc_links';
import { INDEX_NAME_PLACEHOLDER } from '../../constants';
-import { LanguageDefinition, Languages } from './types';
export const rubyDefinition: LanguageDefinition = {
advancedConfig: docLinks.rubyAdvancedConfig,
diff --git a/x-pack/plugins/serverless_search/public/application/components/languages/utils.ts b/x-pack/plugins/serverless_search/public/application/components/languages/utils.ts
new file mode 100644
index 0000000000000..84f575ea0cc02
--- /dev/null
+++ b/x-pack/plugins/serverless_search/public/application/components/languages/utils.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 { LanguageDefinition, LanguageDefinitionSnippetArguments } from '@kbn/search-api-panels';
+import { consoleDefinition } from './console';
+
+export const showTryInConsole = (code: keyof LanguageDefinition) => code in consoleDefinition;
+
+export const getCodeSnippet = (
+ language: Partial,
+ key: keyof LanguageDefinition,
+ args: LanguageDefinitionSnippetArguments
+): string => {
+ const snippetVal = language[key];
+ if (snippetVal === undefined) return '';
+ if (typeof snippetVal === 'string') return snippetVal;
+ return snippetVal(args);
+};
diff --git a/x-pack/plugins/serverless_search/public/application/components/overview.tsx b/x-pack/plugins/serverless_search/public/application/components/overview.tsx
index a683f64820785..79652e78e815e 100644
--- a/x-pack/plugins/serverless_search/public/application/components/overview.tsx
+++ b/x-pack/plugins/serverless_search/public/application/components/overview.tsx
@@ -19,33 +19,38 @@ import {
EuiTitle,
} from '@elastic/eui';
import { i18n } from '@kbn/i18n';
+import {
+ WelcomeBanner,
+ IngestData,
+ SelectClientPanel,
+ OverviewPanel,
+ CodeBox,
+ LanguageClientPanel,
+ InstallClientPanel,
+} from '@kbn/search-api-panels';
+
import React, { useMemo, useState } from 'react';
+import type {
+ LanguageDefinition,
+ LanguageDefinitionSnippetArguments,
+} from '@kbn/search-api-panels';
import { docLinks } from '../../../common/doc_links';
import { PLUGIN_ID } from '../../../common';
import { useKibanaServices } from '../hooks/use_kibana';
import { API_KEY_PLACEHOLDER, ELASTICSEARCH_URL_PLACEHOLDER } from '../constants';
-import { CodeBox } from './code_box';
import { javascriptDefinition } from './languages/javascript';
import { languageDefinitions } from './languages/languages';
-import { LanguageDefinition, LanguageDefinitionSnippetArguments } from './languages/types';
-import { InstallClientPanel } from './overview_panels/install_client';
-import { OverviewPanel } from './overview_panels/overview_panel';
import './overview.scss';
-import { IngestData } from './overview_panels/ingest_data';
-import { SelectClientPanel } from './overview_panels/select_client';
import { ApiKeyPanel } from './api_key/api_key';
-import { LanguageClientPanel } from './overview_panels/language_client_panel';
+import { getCodeSnippet, showTryInConsole } from './languages/utils';
export const ElasticsearchOverview = () => {
const [selectedLanguage, setSelectedLanguage] =
useState(javascriptDefinition);
const [clientApiKey, setClientApiKey] = useState(API_KEY_PLACEHOLDER);
- const {
- application: { navigateToApp },
- cloud,
- http,
- userProfile,
- } = useKibanaServices();
+ const { application, cloud, http, userProfile, share } = useKibanaServices();
+ const { navigateToApp } = application;
+
const elasticsearchURL = useMemo(() => {
return cloud?.elasticsearchUrl ?? ELASTICSEARCH_URL_PLACEHOLDER;
}, [cloud]);
@@ -59,54 +64,19 @@ export const ElasticsearchOverview = () => {
-
-
- {/* Reversing column direction here so screenreaders keep h1 as the first element */}
-
-
-
-
- {i18n.translate('xpack.serverlessSearch.header.title', {
- defaultMessage: 'Get started with Elasticsearch',
- })}
-
-
-
-
-
-
- {i18n.translate('xpack.serverlessSearch.header.greeting.title', {
- defaultMessage: 'Hi {name}!',
- values: { name: userProfile.user.full_name || userProfile.user.username },
- })}
-
-
-
-
-
-
- {i18n.translate('xpack.serverlessSearch.header.description', {
- defaultMessage:
- "Set up your programming language client, ingest some data, and you'll be ready to start searching within minutes.",
- })}
-
-
-
-
-
-
-
-
+
-
+
{languageDefinitions.map((language, index) => (
))}
@@ -115,9 +85,15 @@ export const ElasticsearchOverview = () => {
@@ -147,11 +123,19 @@ export const ElasticsearchOverview = () => {
})}
leftPanelContent={
}
links={[
@@ -195,11 +179,15 @@ export const ElasticsearchOverview = () => {
})}
leftPanelContent={
}
links={[]}
@@ -210,9 +198,16 @@ export const ElasticsearchOverview = () => {
@@ -223,11 +218,19 @@ export const ElasticsearchOverview = () => {
})}
leftPanelContent={
}
links={[]}
diff --git a/x-pack/plugins/serverless_search/public/application/components/overview_panels/ingest_data.scss b/x-pack/plugins/serverless_search/public/application/components/overview_panels/ingest_data.scss
deleted file mode 100644
index ff48f49cfaf9e..0000000000000
--- a/x-pack/plugins/serverless_search/public/application/components/overview_panels/ingest_data.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-.serverlessSearchIntegrationsPanel {
- background-color: $euiColorDarkestShade;
-}
diff --git a/x-pack/plugins/serverless_search/public/application/components/overview_panels/install_client.tsx b/x-pack/plugins/serverless_search/public/application/components/overview_panels/install_client.tsx
deleted file mode 100644
index 259644074ba12..0000000000000
--- a/x-pack/plugins/serverless_search/public/application/components/overview_panels/install_client.tsx
+++ /dev/null
@@ -1,114 +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 { EuiSpacer, EuiCallOut, EuiText } from '@elastic/eui';
-import { i18n } from '@kbn/i18n';
-import React from 'react';
-import { CodeBox } from '../code_box';
-import { languageDefinitions } from '../languages/languages';
-import { OverviewPanel } from './overview_panel';
-import {
- LanguageDefinition,
- Languages,
- LanguageDefinitionSnippetArguments,
-} from '../languages/types';
-import { GithubLink } from '../shared/github_link';
-
-interface InstallClientProps {
- codeArguments: LanguageDefinitionSnippetArguments;
- language: LanguageDefinition;
- setSelectedLanguage: (language: LanguageDefinition) => void;
-}
-
-const Link: React.FC<{ language: Languages }> = ({ language }) => {
- switch (language) {
- case Languages.CURL:
- return (
-
- );
- case Languages.JAVASCRIPT:
- return (
-
- );
- case Languages.RUBY:
- return (
-
- );
- }
- return null;
-};
-
-export const InstallClientPanel: React.FC = ({
- codeArguments,
- language,
- setSelectedLanguage,
-}) => {
- return (
-
-
-
-
-
-
-
- {i18n.translate('xpack.serverlessSearch.apiCallout.content', {
- defaultMessage:
- 'Console enables you to call Elasticsearch and Kibana REST APIs directly, without needing to install a language client.',
- })}
-
-
- >
- }
- />
- );
-};
diff --git a/x-pack/plugins/serverless_search/public/application/components/overview_panels/select_client.tsx b/x-pack/plugins/serverless_search/public/application/components/overview_panels/select_client.tsx
deleted file mode 100644
index 7d78a54f8e1c7..0000000000000
--- a/x-pack/plugins/serverless_search/public/application/components/overview_panels/select_client.tsx
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import { EuiCallOut, EuiFlexGroup, EuiFlexItem, EuiLink, EuiSpacer, EuiText } from '@elastic/eui';
-import { i18n } from '@kbn/i18n';
-import { FormattedMessage } from '@kbn/i18n-react';
-import React from 'react';
-
-import { useKibanaServices } from '../../hooks/use_kibana';
-import { OverviewPanel } from './overview_panel';
-import { docLinks } from '../../../../common/doc_links';
-import './select_client.scss';
-
-export const SelectClientPanel: React.FC = ({ children }) => {
- const { http } = useKibanaServices();
-
- return (
-
- {i18n.translate('xpack.serverlessSearch.selectClient.description.console.link', {
- defaultMessage: 'Console',
- })}
-
- ),
- }}
- />
- }
- leftPanelContent={
- <>
-
-
-
-
- {i18n.translate('xpack.serverlessSearch.selectClient.heading', {
- defaultMessage: 'Choose one',
- })}
-
-
-
-
-
-
- {children}
-
-
-
-
- {i18n.translate('xpack.serverlessSearch.selectClient.callout.description', {
- defaultMessage:
- 'With Console, you can get started right away with our REST API’s. No installation required. ',
- })}
-
-
-
- {i18n.translate('xpack.serverlessSearch.selectClient.callout.link', {
- defaultMessage: 'Try Console now',
- })}
-
-
-
-
- >
- }
- links={[
- {
- href: docLinks.elasticsearchClients,
- label: i18n.translate('xpack.serverlessSearch.selectClient.elasticsearchClientDocLink', {
- defaultMessage: 'Elasticsearch clients ',
- }),
- },
- {
- href: docLinks.kibanaRunApiInConsole,
- label: i18n.translate('xpack.serverlessSearch.selectClient.apiRequestConsoleDocLink', {
- defaultMessage: 'Run API requests in Console ',
- }),
- },
- ]}
- title={i18n.translate('xpack.serverlessSearch.selectClient.title', {
- defaultMessage: 'Select your client',
- })}
- />
- );
-};
diff --git a/x-pack/plugins/serverless_search/tsconfig.json b/x-pack/plugins/serverless_search/tsconfig.json
index 91a3f465ca4c6..5e1624175f763 100644
--- a/x-pack/plugins/serverless_search/tsconfig.json
+++ b/x-pack/plugins/serverless_search/tsconfig.json
@@ -30,5 +30,6 @@
"@kbn/ml-plugin",
"@kbn/management-cards-navigation",
"@kbn/core-elasticsearch-server",
+ "@kbn/search-api-panels",
]
}
diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json
index dcd9d175820be..a17bd463e2b5b 100644
--- a/x-pack/plugins/translations/translations/fr-FR.json
+++ b/x-pack/plugins/translations/translations/fr-FR.json
@@ -12154,7 +12154,6 @@
"xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.isInvalid.error": "{indexName} n'est pas un nom d'index valide",
"xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.nameInputHelpText.lineOne": "Votre index sera nommé : {indexName}",
"xpack.enterpriseSearch.content.newIndex.steps.buildConnector.confirmModal.description": "Un index supprimé appelé {indexName} était, à l'origine, lié à une configuration de connecteur. Voulez-vous remplacer cette configuration de connecteur par la nouvelle ?",
- "xpack.enterpriseSearch.content.overview.documentExample.description.text": "Générez une clé API et lisez la {documentation} concernant l’envoi de documents au point de terminaison de l’API Elasticsearch. Utilisez des {clients} Elastic pour une intégration rationalisée.",
"xpack.enterpriseSearch.content.searchIndex.documents.documentList.description": "Affichage de {results} sur {total}. Nombre maximal de résultats de recherche de {maximum} documents.",
"xpack.enterpriseSearch.content.searchIndex.documents.documentList.pagination.itemsPerPage": "Documents par page : {docPerPage}",
"xpack.enterpriseSearch.content.searchIndex.documents.documentList.paginationOptions.option": "{docCount} documents",
@@ -13770,10 +13769,6 @@
"xpack.enterpriseSearch.content.overview.documentExample.clientLibraries.python": "Python",
"xpack.enterpriseSearch.content.overview.documentExample.clientLibraries.ruby": "Ruby",
"xpack.enterpriseSearch.content.overview.documentExample.clientLibraries.rust": "Rust",
- "xpack.enterpriseSearch.content.overview.documentExample.description.clientsLink": "clients de langages de programmation",
- "xpack.enterpriseSearch.content.overview.documentExample.description.documentationLink": "documentation",
- "xpack.enterpriseSearch.content.overview.documentExample.generateApiKeyButton.label": "Gérer les clés d'API",
- "xpack.enterpriseSearch.content.overview.documentExample.title": "Ajout de documents à votre index",
"xpack.enterpriseSearch.content.overview.emptyPrompt.body": "Nous déconseillons l'ajout de documents à un index géré en externe.",
"xpack.enterpriseSearch.content.overview.emptyPrompt.title": "Index géré en externe",
"xpack.enterpriseSearch.content.overview.generateApiKeyModal.apiKeyWarning": "Elastic ne stocke pas les clés d’API. Une fois la clé générée, vous ne pourrez la visualiser qu'une seule fois. Veillez à l'enregistrer dans un endroit sûr. Si vous n'y avez plus accès, vous devrez générer une nouvelle clé d’API à partir de cet écran.",
@@ -13783,7 +13778,6 @@
"xpack.enterpriseSearch.content.overview.generateApiKeyModal.info": "Avant de pouvoir commencer à publier des documents dans votre index Elasticsearch, vous devez créer au moins une clé d’API.",
"xpack.enterpriseSearch.content.overview.generateApiKeyModal.learnMore": "En savoir plus sur les clés d’API",
"xpack.enterpriseSearch.content.overview.generateApiKeyModal.title": "Générer une clé d’API",
- "xpack.enterpriseSearch.content.overview.optimizedRequest.label": "Afficher la requête optimisée d'Enterprise Search",
"xpack.enterpriseSearch.content.searchIndex.cancelSyncs.successMessage": "Annulation réussie des synchronisations",
"xpack.enterpriseSearch.content.searchIndex.configurationTabLabel": "Configuration",
"xpack.enterpriseSearch.content.searchIndex.connectorErrorCallOut.title": "Votre connecteur a rapporté une erreur",
@@ -14167,16 +14161,9 @@
"xpack.enterpriseSearch.curations.settings.licenseUpgradeLink": "En savoir plus sur les mises à niveau incluses dans la licence",
"xpack.enterpriseSearch.curations.settings.start30DayTrialButtonLabel": "Démarrer un essai gratuit de 30 jours",
"xpack.enterpriseSearch.descriptionLabel": "Description",
- "xpack.enterpriseSearch.elasticsearch.features.buildSearchExperiences": "Créer des expériences de recherche personnalisées",
- "xpack.enterpriseSearch.elasticsearch.features.buildTooling": "Créer des outils personnalisés",
- "xpack.enterpriseSearch.elasticsearch.features.integrate": "Intégrer à des bases de données, des sites web, etc.",
"xpack.enterpriseSearch.elasticsearch.productCardDescription": "Idéal pour les applications sur mesure, Elasticsearch vous aide à créer des recherches hautement personnalisables et offre de nombreuses méthodes d'ingestion différentes.",
"xpack.enterpriseSearch.elasticsearch.productDescription": "Outils de bas niveau pour la création d'expériences performantes et pertinentes.",
"xpack.enterpriseSearch.elasticsearch.productName": "Elasticsearch",
- "xpack.enterpriseSearch.elasticsearch.resources.createNewIndexLabel": "Créer un nouvel index",
- "xpack.enterpriseSearch.elasticsearch.resources.gettingStartedLabel": "Prise en main d'Elasticsearch",
- "xpack.enterpriseSearch.elasticsearch.resources.languageClientLabel": "Configurer un client de langage",
- "xpack.enterpriseSearch.elasticsearch.resources.searchUILabel": "Search UI pour Elasticsearch",
"xpack.enterpriseSearch.emailLabel": "E-mail",
"xpack.enterpriseSearch.emptyState.description": "Votre contenu est stocké dans un index Elasticsearch. Commencez par créer un index Elasticsearch et sélectionnez une méthode d'ingestion. Les options comprennent le robot d'indexation Elastic, les intégrations de données tierces ou l'utilisation des points de terminaison d'API Elasticsearch.",
"xpack.enterpriseSearch.emptyState.description.line2": "Qu’il s’agisse de créer une expérience de recherche avec App Search ou Elasticsearch, vous pouvez commencer ici.",
@@ -14411,8 +14398,6 @@
"xpack.enterpriseSearch.overview.elasticsearchResources.gettingStarted": "Prise en main d'Elasticsearch",
"xpack.enterpriseSearch.overview.elasticsearchResources.searchUi": "Search UI pour Elasticsearch",
"xpack.enterpriseSearch.overview.elasticsearchResources.title": "Ressources",
- "xpack.enterpriseSearch.overview.emptyPromptButtonLabel": "Créer un index Elasticsearch",
- "xpack.enterpriseSearch.overview.emptyPromptTitle": "Ajouter des données et démarrer les recherches",
"xpack.enterpriseSearch.overview.emptyState.buttonTitle": "Ajouter un contenu dans Enterprise Search",
"xpack.enterpriseSearch.overview.emptyState.footerLinkTitle": "En savoir plus",
"xpack.enterpriseSearch.overview.emptyState.heading": "Ajouter un contenu dans Enterprise Search",
@@ -14438,12 +14423,9 @@
"xpack.enterpriseSearch.overview.iconRow.sharePoint.title": "Microsoft SharePoint",
"xpack.enterpriseSearch.overview.iconRow.sharePoint.tooltip": "Indexer des contenus depuis Microsoft SharePoint",
"xpack.enterpriseSearch.overview.navTitle": "Aperçu",
- "xpack.enterpriseSearch.overview.pageTitle": "Bienvenue dans Enterprise Search",
- "xpack.enterpriseSearch.overview.productSelector.title": "Des expériences de recherche pour chaque cas d'utilisation",
"xpack.enterpriseSearch.overview.searchIndices.image.altText": "Illustration d'index de recherche",
"xpack.enterpriseSearch.overview.setupCta.description": "Ajoutez des fonctions de recherche à votre application ou à votre organisation interne avec Elastic App Search et Workplace Search. Regardez la vidéo pour savoir ce qu'il est possible de faire lorsque la recherche est facilitée.",
"xpack.enterpriseSearch.passwordLabel": "Mot de passe",
- "xpack.enterpriseSearch.productCard.resourcesTitle": "Ressources",
"xpack.enterpriseSearch.productSelectorCalloutTitle": "Mettez à niveau pour obtenir des fonctionnalités de niveau entreprise pour votre équipe",
"xpack.enterpriseSearch.readOnlyMode.warning": "Enterprise Search est en mode de lecture seule. Vous ne pourrez pas effectuer de changements tels que création, modification ou suppression.",
"xpack.enterpriseSearch.roleMapping.addRoleMappingButtonLabel": "Ajouter un mapping",
@@ -34747,12 +34729,6 @@
"xpack.securitySolution.zeek.shrDescription": "L'équipe de réponse a envoyé un SYN ACK suivi d'un FIN, pas de SYN de la part de l'initiateur",
"xpack.serverlessSearch.apiKey.activeKeys": "Vous avez {number} clés actives.",
"xpack.serverlessSearch.apiKey.expiresHelpText": "Cette clé d’API expirera le {expirationDate}",
- "xpack.serverlessSearch.header.greeting.title": "Bonjour {name} !",
- "xpack.serverlessSearch.ingestData.clientDocLink": "Référence d’API {languageName}",
- "xpack.serverlessSearch.installClient.clientDocLink": "Documentation du client {languageName}",
- "xpack.serverlessSearch.selectClient.description": "Elastic construit et assure la maintenance des clients dans plusieurs langues populaires et notre communauté a contribué à beaucoup d'autres. Sélectionnez votre client linguistique favori or explorez la {console} pour commencer.",
- "xpack.serverlessSearch.apiCallout.content": "La console vous permet d’appeler directement les API REST d’Elasticsearch et de Kibana, sans avoir à installer de client de langage.",
- "xpack.serverlessSearch.apiCallOut.title": "Appeler l’API depuis la console",
"xpack.serverlessSearch.apiKey.apiKeyStepDescription": "Cette clé ne s’affichera qu’une fois, conservez-la donc en lieu sûr. Nous ne conservons pas vos clés d’API, vous devrez donc générer une clé de remplacement si vous la perdez.",
"xpack.serverlessSearch.apiKey.apiKeyStepTitle": "Stocker cette clé d'API",
"xpack.serverlessSearch.apiKey.description": "Vous aurez besoin de ces identifiants uniques pour vous connecter en toute sécurité à votre projet Elasticsearch.",
@@ -34785,8 +34761,6 @@
"xpack.serverlessSearch.apiKey.userFieldLabel": "Utilisateur",
"xpack.serverlessSearch.back": "Retour",
"xpack.serverlessSearch.cancel": "Annuler",
- "xpack.serverlessSearch.codeBox.copyButtonLabel": "Copier",
- "xpack.serverlessSearch.codeBox.selectAriaLabel": "Sélectionner un langage de programmation",
"xpack.serverlessSearch.configureClient.advancedConfigLabel": "Configuration avancée",
"xpack.serverlessSearch.configureClient.basicConfigLabel": "Configuration de base",
"xpack.serverlessSearch.configureClient.description": "Initialiser votre client avec votre clé d’API et votre identifiant de cloud uniques",
@@ -34807,30 +34781,7 @@
"xpack.serverlessSearch.footer.searchUI.description": "L’interface utilisateur Search est une bibliothèque JavaScript libre et gratuite maintenue par Elastic pour un développement rapide d’expériences de recherche modernes et attrayantes.",
"xpack.serverlessSearch.footer.searchUI.title": "Créer une interface utilisateur avec Search UI",
"xpack.serverlessSearch.footer.title": "Et ensuite ?",
- "xpack.serverlessSearch.githubLink.curl.label": "curl",
- "xpack.serverlessSearch.githubLink.javascript.label": "elasticsearch",
- "xpack.serverlessSearch.githubLink.ruby.label": "elasticsearch-ruby",
- "xpack.serverlessSearch.header.description": "Configurez votre client de langage de programmation, ingérez des données, et vous serez prêt à commencer vos recherches en quelques minutes.",
"xpack.serverlessSearch.header.title": "Lancez-vous avec Elasticsearch",
- "xpack.serverlessSearch.ingestData.beatsDescription": "Des agents légers conçus pour le transfert de données pour Elasticsearch. Utilisez Beats pour envoyer des données opérationnelles depuis vos serveurs.",
- "xpack.serverlessSearch.ingestData.beatsLink": "beats",
- "xpack.serverlessSearch.ingestData.beatsTitle": "Beats",
- "xpack.serverlessSearch.ingestData.connectorsDescription": "Des intégrations spécialisées pour synchroniser des données de sources tierces avec Elasticsearch. Utilisez des connecteurs Elastic pour synchroniser du contenu d’une plage de bases de données et de stockage d’objets.",
- "xpack.serverlessSearch.ingestData.connectorsPythonLink": "connecteurs-python",
- "xpack.serverlessSearch.ingestData.connectorsTitle": "Client de connecteur",
- "xpack.serverlessSearch.ingestData.description": "Ajoutez des données à votre flux de données ou à votre index pour les rendre interrogeables. Choisissez une méthode d’ingestion qui correspond à votre application et à votre workflow.",
- "xpack.serverlessSearch.ingestData.ingestApiDescription": "La façon la plus flexible d’indexer des données, ce qui vous donne un contrôle total sur vos options de personnalisation et d’optimisation.",
- "xpack.serverlessSearch.ingestData.ingestApiLabel": "Ingérer via une API",
- "xpack.serverlessSearch.ingestData.ingestIntegrationDescription": "Des outils d’ingestion spécialisés optimisés pour transformer des données et les transférer à Elasticsearch.",
- "xpack.serverlessSearch.ingestData.ingestIntegrationLabel": "Ingérer via l’intégration",
- "xpack.serverlessSearch.ingestData.ingestLegendLabel": "Sélectionner une méthode d'ingestion",
- "xpack.serverlessSearch.ingestData.integrationsLink": "À propos des intégrations",
- "xpack.serverlessSearch.ingestData.logstashDescription": "Ajoutez des données à votre flux de données ou à votre index pour les rendre interrogeables. Choisissez une méthode d’ingestion qui correspond à votre application et à votre workflow.",
- "xpack.serverlessSearch.ingestData.logstashLink": "Logstash",
- "xpack.serverlessSearch.ingestData.logstashTitle": "Logstash",
- "xpack.serverlessSearch.ingestData.title": "Ingérer des données",
- "xpack.serverlessSearch.installClient.description": "Elastic construit et assure la maintenance des clients dans plusieurs langues populaires et notre communauté a contribué à beaucoup d'autres. Installez votre client de langage favori pour commencer.",
- "xpack.serverlessSearch.installClient.title": "Installer un client",
"xpack.serverlessSearch.invalidJsonError": "JSON non valide",
"xpack.serverlessSearch.languages.cURL": "cURL",
"xpack.serverlessSearch.languages.javascript": "JavaScript / Node.js",
@@ -34848,17 +34799,8 @@
"xpack.serverlessSearch.required": "Obligatoire",
"xpack.serverlessSearch.searchQuery.description": "Vous êtes maintenant prêt à expérimenter la recherche et l'exécution d'agrégations sur vos données Elasticsearch.",
"xpack.serverlessSearch.searchQuery.title": "Créer votre première requête de recherche",
- "xpack.serverlessSearch.selectClient.apiRequestConsoleDocLink": "Exécuter des requêtes d’API dans la console ",
- "xpack.serverlessSearch.selectClient.callout.description": "Avec la console, vous pouvez directement commencer à utiliser nos API REST. Aucune installation n’est requise. ",
- "xpack.serverlessSearch.selectClient.callout.link": "Essayez la console maintenant",
- "xpack.serverlessSearch.selectClient.callout.title": "Lancez-vous dans la console",
- "xpack.serverlessSearch.selectClient.description.console.link": "Console",
- "xpack.serverlessSearch.selectClient.elasticsearchClientDocLink": "Clients d'Elasticsearch ",
- "xpack.serverlessSearch.selectClient.heading": "Choisissez-en un",
- "xpack.serverlessSearch.selectClient.title": "Sélectionner votre client",
"xpack.serverlessSearch.testConnection.description": "Envoyez une requête de test pour confirmer que votre client de langage et votre instance Elasticsearch sont opérationnels.",
"xpack.serverlessSearch.testConnection.title": "Tester votre connexion",
- "xpack.serverlessSearch.tryInConsoleButton": "Essayer dans la console",
"xpack.sessionView.alertFilteredCountStatusLabel": " Affichage de {count} alertes",
"xpack.sessionView.alertTotalCountStatusLabel": "Affichage de {count} alertes",
"xpack.sessionView.processTree.loadMore": "Afficher les {pageSize} événements suivants",
diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json
index f49042924be5d..d0428fa67e34b 100644
--- a/x-pack/plugins/translations/translations/ja-JP.json
+++ b/x-pack/plugins/translations/translations/ja-JP.json
@@ -12168,7 +12168,6 @@
"xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.isInvalid.error": "{indexName}は無効なインデックス名です",
"xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.nameInputHelpText.lineOne": "インデックスは次の名前になります:{indexName}",
"xpack.enterpriseSearch.content.newIndex.steps.buildConnector.confirmModal.description": "削除されたインデックス{indexName}は、既存のコネクター構成に関連付けられていました。既存のコネクター構成を新しいコネクター構成で置き換えますか?",
- "xpack.enterpriseSearch.content.overview.documentExample.description.text": "APIキーを生成し、ドキュメントをElasticsearch APIエンドポイントに送信する方法に関する{documentation}を読みます。統合を合理化するには、Elastic {clients}を使用します。",
"xpack.enterpriseSearch.content.searchIndex.documents.documentList.description": "{total}件中{results}件を表示中。{maximum}ドキュメントが検索結果の最大数です。",
"xpack.enterpriseSearch.content.searchIndex.documents.documentList.pagination.itemsPerPage": "毎秒あたりのドキュメント:{docPerPage}",
"xpack.enterpriseSearch.content.searchIndex.documents.documentList.paginationOptions.option": "{docCount}ドキュメント",
@@ -13784,10 +13783,6 @@
"xpack.enterpriseSearch.content.overview.documentExample.clientLibraries.python": "Python",
"xpack.enterpriseSearch.content.overview.documentExample.clientLibraries.ruby": "Ruby",
"xpack.enterpriseSearch.content.overview.documentExample.clientLibraries.rust": "Rust",
- "xpack.enterpriseSearch.content.overview.documentExample.description.clientsLink": "プログラミング言語クライアント",
- "xpack.enterpriseSearch.content.overview.documentExample.description.documentationLink": "ドキュメンテーション",
- "xpack.enterpriseSearch.content.overview.documentExample.generateApiKeyButton.label": "APIキーの管理",
- "xpack.enterpriseSearch.content.overview.documentExample.title": "ドキュメントをインデックスに追加しています",
"xpack.enterpriseSearch.content.overview.emptyPrompt.body": "外部で管理されているインデックスにはドキュメントを追加しないようにすることをお勧めします。",
"xpack.enterpriseSearch.content.overview.emptyPrompt.title": "外部で管理されているインデックス",
"xpack.enterpriseSearch.content.overview.generateApiKeyModal.apiKeyWarning": "ElasticはAPIキーを保存しません。生成後は、1回だけキーを表示できます。必ず安全に保管してください。アクセスできなくなった場合は、この画面から新しいAPIキーを生成する必要があります。",
@@ -13797,7 +13792,6 @@
"xpack.enterpriseSearch.content.overview.generateApiKeyModal.info": "ElasticsearchドキュメントをElasticsearchインデックスに送信する前に、少なくとも1つのAPIキーを作成する必要があります。",
"xpack.enterpriseSearch.content.overview.generateApiKeyModal.learnMore": "APIキーの詳細",
"xpack.enterpriseSearch.content.overview.generateApiKeyModal.title": "APIキーを生成",
- "xpack.enterpriseSearch.content.overview.optimizedRequest.label": "エンタープライズ サーチで最適化されたリクエストを表示",
"xpack.enterpriseSearch.content.searchIndex.cancelSyncs.successMessage": "同期が正常にキャンセルされました",
"xpack.enterpriseSearch.content.searchIndex.configurationTabLabel": "構成",
"xpack.enterpriseSearch.content.searchIndex.connectorErrorCallOut.title": "コネクターでエラーが発生しました",
@@ -14181,16 +14175,9 @@
"xpack.enterpriseSearch.curations.settings.licenseUpgradeLink": "ライセンスアップグレードの詳細",
"xpack.enterpriseSearch.curations.settings.start30DayTrialButtonLabel": "30 日間のトライアルの開始",
"xpack.enterpriseSearch.descriptionLabel": "説明",
- "xpack.enterpriseSearch.elasticsearch.features.buildSearchExperiences": "カスタム検索エクスペリエンスを構築",
- "xpack.enterpriseSearch.elasticsearch.features.buildTooling": "カスタムツールを作成",
- "xpack.enterpriseSearch.elasticsearch.features.integrate": "データベース、Webサイトなどを統合",
"xpack.enterpriseSearch.elasticsearch.productCardDescription": "カスタムアプリケーションに最適なElasticsearchでは、非常にカスタマイズ性の高い検索を構築し、多数の異なるインジェスチョン方法を利用できます。",
"xpack.enterpriseSearch.elasticsearch.productDescription": "高パフォーマンスで関連性の高い検索エクスペリエンスを作成するための低レベルのツール。",
"xpack.enterpriseSearch.elasticsearch.productName": "Elasticsearch",
- "xpack.enterpriseSearch.elasticsearch.resources.createNewIndexLabel": "新しいインデックスを作成",
- "xpack.enterpriseSearch.elasticsearch.resources.gettingStartedLabel": "Elasticsearchを使い始める",
- "xpack.enterpriseSearch.elasticsearch.resources.languageClientLabel": "言語クライアントのセットアップ",
- "xpack.enterpriseSearch.elasticsearch.resources.searchUILabel": "ElasticsearchのUIを検索",
"xpack.enterpriseSearch.emailLabel": "メール",
"xpack.enterpriseSearch.emptyState.description": "コンテンツはElasticsearchインデックスに保存されます。まず、Elasticsearchインデックスを作成し、インジェスチョン方法を選択します。オプションには、Elastic Webクローラー、サードパーティデータ統合、Elasticsearch APIエンドポイントの使用があります。",
"xpack.enterpriseSearch.emptyState.description.line2": "App SearchまたはElasticsearchのどちらで検索エクスペリエンスを構築しても、これが最初のステップです。",
@@ -14425,8 +14412,6 @@
"xpack.enterpriseSearch.overview.elasticsearchResources.gettingStarted": "Elasticsearchを使い始める",
"xpack.enterpriseSearch.overview.elasticsearchResources.searchUi": "ElasticsearchのUIを検索",
"xpack.enterpriseSearch.overview.elasticsearchResources.title": "リソース",
- "xpack.enterpriseSearch.overview.emptyPromptButtonLabel": "Elasticsearchインデックスを作成",
- "xpack.enterpriseSearch.overview.emptyPromptTitle": "データを追加して検索を開始",
"xpack.enterpriseSearch.overview.emptyState.buttonTitle": "コンテンツをエンタープライズ サーチに追加",
"xpack.enterpriseSearch.overview.emptyState.footerLinkTitle": "詳細",
"xpack.enterpriseSearch.overview.emptyState.heading": "コンテンツをエンタープライズ サーチに追加",
@@ -14452,12 +14437,9 @@
"xpack.enterpriseSearch.overview.iconRow.sharePoint.title": "Microsoft SharePoint",
"xpack.enterpriseSearch.overview.iconRow.sharePoint.tooltip": "Microsoft SharePointのコンテンツにインデックスを作成",
"xpack.enterpriseSearch.overview.navTitle": "概要",
- "xpack.enterpriseSearch.overview.pageTitle": "エンタープライズ サーチへようこそ",
- "xpack.enterpriseSearch.overview.productSelector.title": "すべてのユースケースの検索エクスペリエンス",
"xpack.enterpriseSearch.overview.searchIndices.image.altText": "検索インデックスの例",
"xpack.enterpriseSearch.overview.setupCta.description": "Elastic App Search および Workplace Search を使用して、アプリまたは社内組織に検索を追加できます。検索が簡単になるとどのような利点があるのかについては、動画をご覧ください。",
"xpack.enterpriseSearch.passwordLabel": "パスワード",
- "xpack.enterpriseSearch.productCard.resourcesTitle": "リソース",
"xpack.enterpriseSearch.productSelectorCalloutTitle": "チームのためのエンタープライズレベルの機能を実現できるようにアップグレード",
"xpack.enterpriseSearch.readOnlyMode.warning": "エンタープライズ サーチは読み取り専用モードです。作成、編集、削除などの変更を実行できません。",
"xpack.enterpriseSearch.roleMapping.addRoleMappingButtonLabel": "マッピングを追加",
@@ -34746,12 +34728,6 @@
"xpack.securitySolution.zeek.shrDescription": "レスポンダーがFINに続きSYNを送信しました。接続元からSYN-ACKはありません",
"xpack.serverlessSearch.apiKey.activeKeys": "{number}個のアクティブなキーがあります。",
"xpack.serverlessSearch.apiKey.expiresHelpText": "このAPIキーは{expirationDate}に有効期限切れになります",
- "xpack.serverlessSearch.header.greeting.title": "{name}様",
- "xpack.serverlessSearch.ingestData.clientDocLink": "{languageName}APIリファレンス",
- "xpack.serverlessSearch.installClient.clientDocLink": "{languageName}クライアントドキュメント",
- "xpack.serverlessSearch.selectClient.description": "Elasticは複数の一般的な言語でクライアントを構築および保守します。Elasticのコミュニティはさらに多くを提供しています。お気に入りの言語クライアントを選択するか、{console}を起動して開始します。",
- "xpack.serverlessSearch.apiCallout.content": "Consoleを使用すると、言語クライアントをインストールせずに、ElasticsearchとKibanaのREST APIを直接呼び出すことができます。",
- "xpack.serverlessSearch.apiCallOut.title": "コンソールでAPIを呼び出し",
"xpack.serverlessSearch.apiKey.apiKeyStepDescription": "このキーは一度しか表示されないため、安全な場所に保存しておいてください。当社はお客様のAPIキーを保存しません。キーを紛失した場合は、代替キーを生成する必要があります。",
"xpack.serverlessSearch.apiKey.apiKeyStepTitle": "このAPIキーを保存",
"xpack.serverlessSearch.apiKey.description": "Elasticsearchプロジェクトに安全に接続するには、これらの一意の識別子が必要です。",
@@ -34784,8 +34760,6 @@
"xpack.serverlessSearch.apiKey.userFieldLabel": "ユーザー",
"xpack.serverlessSearch.back": "戻る",
"xpack.serverlessSearch.cancel": "キャンセル",
- "xpack.serverlessSearch.codeBox.copyButtonLabel": "コピー",
- "xpack.serverlessSearch.codeBox.selectAriaLabel": "プログラミング言語を選択",
"xpack.serverlessSearch.configureClient.advancedConfigLabel": "高度な構成",
"xpack.serverlessSearch.configureClient.basicConfigLabel": "基本構成",
"xpack.serverlessSearch.configureClient.description": "一意のAPIキーとCloud IDでクライアントを初期化",
@@ -34806,30 +34780,7 @@
"xpack.serverlessSearch.footer.searchUI.description": "Search UIはElasticが管理している無料のオープンソースJavaScriptライブラリで、モダンで魅力的な検索エクスペリエンスをすばやく開発できます。",
"xpack.serverlessSearch.footer.searchUI.title": "Search UIでユーザーインターフェースを構築",
"xpack.serverlessSearch.footer.title": "次のステップ",
- "xpack.serverlessSearch.githubLink.curl.label": "curl",
- "xpack.serverlessSearch.githubLink.javascript.label": "elasticsearch",
- "xpack.serverlessSearch.githubLink.ruby.label": "elasticsearch-ruby",
- "xpack.serverlessSearch.header.description": "プログラミング言語のクライアントを設定し、データを取り込めば、数分で検索を開始できます。",
"xpack.serverlessSearch.header.title": "Elasticsearchをはじめよう",
- "xpack.serverlessSearch.ingestData.beatsDescription": "Elasticsearch向けの軽量の、専用データ転送機能。Beatsを使用して、サーバーから運用データを送信します。",
- "xpack.serverlessSearch.ingestData.beatsLink": "beats",
- "xpack.serverlessSearch.ingestData.beatsTitle": "ビート",
- "xpack.serverlessSearch.ingestData.connectorsDescription": "サードパーティのソースからElasticsearchにデータを同期するための特別な統合。Elasticコネクターを使って、さまざまなデータベースやオブジェクトストアからコンテンツを同期できます。",
- "xpack.serverlessSearch.ingestData.connectorsPythonLink": "connectors-python",
- "xpack.serverlessSearch.ingestData.connectorsTitle": "コネクタークライアント",
- "xpack.serverlessSearch.ingestData.description": "データストリームやインデックスにデータを追加して、データを検索可能にします。アプリケーションとワークフローに合ったインジェスト方法を選択します。",
- "xpack.serverlessSearch.ingestData.ingestApiDescription": "データをインデックス化する最も柔軟な方法で、カスタマイズや最適化オプションを完全に制御できます。",
- "xpack.serverlessSearch.ingestData.ingestApiLabel": "API経由でインジェスト",
- "xpack.serverlessSearch.ingestData.ingestIntegrationDescription": "データを変換してElasticsearchに送信するために最適化された専用のインジェストツール。",
- "xpack.serverlessSearch.ingestData.ingestIntegrationLabel": "統合経由でインジェスト",
- "xpack.serverlessSearch.ingestData.ingestLegendLabel": "インジェスチョン方法を選択",
- "xpack.serverlessSearch.ingestData.integrationsLink": "統合について",
- "xpack.serverlessSearch.ingestData.logstashDescription": "データストリームやインデックスにデータを追加して、データを検索可能にします。アプリケーションとワークフローに合ったインジェスト方法を選択します。",
- "xpack.serverlessSearch.ingestData.logstashLink": "Logstash",
- "xpack.serverlessSearch.ingestData.logstashTitle": "Logstash",
- "xpack.serverlessSearch.ingestData.title": "データをインジェスト",
- "xpack.serverlessSearch.installClient.description": "Elasticは複数の一般的な言語でクライアントを構築および保守します。Elasticのコミュニティはさらに多くを提供しています。開始するには、お気に入りの言語クライアントをインストールします。",
- "xpack.serverlessSearch.installClient.title": "クライアントをインスト-ル",
"xpack.serverlessSearch.invalidJsonError": "無効なJSON",
"xpack.serverlessSearch.languages.cURL": "cURL",
"xpack.serverlessSearch.languages.javascript": "JavaScript / Node.js",
@@ -34847,17 +34798,8 @@
"xpack.serverlessSearch.required": "必須",
"xpack.serverlessSearch.searchQuery.description": "これで、Elasticsearchデータの検索や集約の実験を始める準備が整いました。",
"xpack.serverlessSearch.searchQuery.title": "最初の検索クエリを作成",
- "xpack.serverlessSearch.selectClient.apiRequestConsoleDocLink": "コンソールでAPIリクエストを実行 ",
- "xpack.serverlessSearch.selectClient.callout.description": "コンソールでは、REST APIを使用してすぐに開始できます。インストールは不要です。",
- "xpack.serverlessSearch.selectClient.callout.link": "今すぐコンソールを試す",
- "xpack.serverlessSearch.selectClient.callout.title": "今すぐコンソールで試す",
- "xpack.serverlessSearch.selectClient.description.console.link": "コンソール",
- "xpack.serverlessSearch.selectClient.elasticsearchClientDocLink": "Elasticsearchクライアント ",
- "xpack.serverlessSearch.selectClient.heading": "1つ選択",
- "xpack.serverlessSearch.selectClient.title": "クライアントを選択",
"xpack.serverlessSearch.testConnection.description": "テストリクエストを送信して、言語クライアントとElasticsearchインスタンスが起動し、実行中であることを確認してください。",
"xpack.serverlessSearch.testConnection.title": "接続をテスト",
- "xpack.serverlessSearch.tryInConsoleButton": "コンソールで試す",
"xpack.sessionView.alertFilteredCountStatusLabel": " {count}件のアラートを表示中",
"xpack.sessionView.alertTotalCountStatusLabel": "{count}件のアラートを表示中",
"xpack.sessionView.processTree.loadMore": "{pageSize}次のイベントを表示",
diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json
index 1556ea23a7cc3..7382424b78f1d 100644
--- a/x-pack/plugins/translations/translations/zh-CN.json
+++ b/x-pack/plugins/translations/translations/zh-CN.json
@@ -12168,7 +12168,6 @@
"xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.isInvalid.error": "{indexName} 为无效索引名称",
"xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.nameInputHelpText.lineOne": "您的索引将命名为:{indexName}",
"xpack.enterpriseSearch.content.newIndex.steps.buildConnector.confirmModal.description": "名为 {indexName} 的已删除索引最初绑定到现有连接器配置。是否要将现有连接器配置替换成新的?",
- "xpack.enterpriseSearch.content.overview.documentExample.description.text": "生成 API 密钥并阅读{documentation},了解如何将文档发布到 Elasticsearch API 终端。将 Elastic {clients} 用于精简集成。",
"xpack.enterpriseSearch.content.searchIndex.documents.documentList.description": "显示 {results} 个,共 {total} 个。搜索结果最多包含 {maximum} 个文档。",
"xpack.enterpriseSearch.content.searchIndex.documents.documentList.pagination.itemsPerPage": "每页文档数:{docPerPage}",
"xpack.enterpriseSearch.content.searchIndex.documents.documentList.paginationOptions.option": "{docCount} 个文档",
@@ -13784,10 +13783,6 @@
"xpack.enterpriseSearch.content.overview.documentExample.clientLibraries.python": "Python",
"xpack.enterpriseSearch.content.overview.documentExample.clientLibraries.ruby": "Ruby",
"xpack.enterpriseSearch.content.overview.documentExample.clientLibraries.rust": "Rust",
- "xpack.enterpriseSearch.content.overview.documentExample.description.clientsLink": "编程语言客户端",
- "xpack.enterpriseSearch.content.overview.documentExample.description.documentationLink": "文档",
- "xpack.enterpriseSearch.content.overview.documentExample.generateApiKeyButton.label": "管理 API 密钥",
- "xpack.enterpriseSearch.content.overview.documentExample.title": "正在添加文档到您的索引",
"xpack.enterpriseSearch.content.overview.emptyPrompt.body": "不建议将文档添加到外部管理的索引。",
"xpack.enterpriseSearch.content.overview.emptyPrompt.title": "外部管理的索引",
"xpack.enterpriseSearch.content.overview.generateApiKeyModal.apiKeyWarning": "Elastic 不会存储 API 密钥。一旦生成,您只能查看密钥一次。请确保将其保存在某个安全位置。如果失去它的访问权限,您需要从此屏幕生成新的 API 密钥。",
@@ -13797,7 +13792,6 @@
"xpack.enterpriseSearch.content.overview.generateApiKeyModal.info": "在开始将文档发布到 Elasticsearch 索引之前,您至少需要创建一个 API 密钥。",
"xpack.enterpriseSearch.content.overview.generateApiKeyModal.learnMore": "进一步了解 API 密钥",
"xpack.enterpriseSearch.content.overview.generateApiKeyModal.title": "生成 API 密钥",
- "xpack.enterpriseSearch.content.overview.optimizedRequest.label": "查看 Enterprise Search 优化的请求",
"xpack.enterpriseSearch.content.searchIndex.cancelSyncs.successMessage": "已成功取消同步",
"xpack.enterpriseSearch.content.searchIndex.configurationTabLabel": "配置",
"xpack.enterpriseSearch.content.searchIndex.connectorErrorCallOut.title": "您的连接器报告了错误",
@@ -14181,16 +14175,9 @@
"xpack.enterpriseSearch.curations.settings.licenseUpgradeLink": "详细了解许可证升级",
"xpack.enterpriseSearch.curations.settings.start30DayTrialButtonLabel": "开始为期 30 天的试用",
"xpack.enterpriseSearch.descriptionLabel": "描述",
- "xpack.enterpriseSearch.elasticsearch.features.buildSearchExperiences": "构建定制搜索体验",
- "xpack.enterpriseSearch.elasticsearch.features.buildTooling": "构建定制工具",
- "xpack.enterpriseSearch.elasticsearch.features.integrate": "集成数据库、网站等",
"xpack.enterpriseSearch.elasticsearch.productCardDescription": "适用于专门定制的应用程序,Elasticsearch 将帮助您构建高度可定制的搜索,并提供许多不同的采集方法。",
"xpack.enterpriseSearch.elasticsearch.productDescription": "用于打造高效、相关的搜索体验的低级工具。",
"xpack.enterpriseSearch.elasticsearch.productName": "Elasticsearch",
- "xpack.enterpriseSearch.elasticsearch.resources.createNewIndexLabel": "创建新索引",
- "xpack.enterpriseSearch.elasticsearch.resources.gettingStartedLabel": "Elasticsearch 入门",
- "xpack.enterpriseSearch.elasticsearch.resources.languageClientLabel": "设置语言客户端",
- "xpack.enterpriseSearch.elasticsearch.resources.searchUILabel": "Elasticsearch 的搜索 UI",
"xpack.enterpriseSearch.emailLabel": "电子邮件",
"xpack.enterpriseSearch.emptyState.description": "您的内容存储在 Elasticsearch 索引中。通过创建 Elasticsearch 索引并选择采集方法开始使用。选项包括 Elastic 网络爬虫、第三方数据集成或使用 Elasticsearch API 终端。",
"xpack.enterpriseSearch.emptyState.description.line2": "无论是使用 App Search 还是 Elasticsearch 构建搜索体验,您都可以从此处立即开始。",
@@ -14425,8 +14412,6 @@
"xpack.enterpriseSearch.overview.elasticsearchResources.gettingStarted": "Elasticsearch 入门",
"xpack.enterpriseSearch.overview.elasticsearchResources.searchUi": "Elasticsearch 的搜索 UI",
"xpack.enterpriseSearch.overview.elasticsearchResources.title": "资源",
- "xpack.enterpriseSearch.overview.emptyPromptButtonLabel": "创建 Elasticsearch 索引",
- "xpack.enterpriseSearch.overview.emptyPromptTitle": "添加数据并开始搜索",
"xpack.enterpriseSearch.overview.emptyState.buttonTitle": "将内容添加到 Enterprise Search",
"xpack.enterpriseSearch.overview.emptyState.footerLinkTitle": "了解详情",
"xpack.enterpriseSearch.overview.emptyState.heading": "将内容添加到 Enterprise Search",
@@ -14452,12 +14437,9 @@
"xpack.enterpriseSearch.overview.iconRow.sharePoint.title": "Microsoft SharePoint",
"xpack.enterpriseSearch.overview.iconRow.sharePoint.tooltip": "索引来自 Microsoft SharePoint 的内容",
"xpack.enterpriseSearch.overview.navTitle": "概览",
- "xpack.enterpriseSearch.overview.pageTitle": "欢迎使用 Enterprise Search",
- "xpack.enterpriseSearch.overview.productSelector.title": "每个用例的搜索体验",
"xpack.enterpriseSearch.overview.searchIndices.image.altText": "搜索索引图示",
"xpack.enterpriseSearch.overview.setupCta.description": "通过 Elastic App Search 和 Workplace Search,将搜索添加到您的应用或内部组织中。观看视频,了解方便易用的搜索功能可以帮您做些什么。",
"xpack.enterpriseSearch.passwordLabel": "密码",
- "xpack.enterpriseSearch.productCard.resourcesTitle": "资源",
"xpack.enterpriseSearch.productSelectorCalloutTitle": "进行升级以便为您的团队获取企业级功能",
"xpack.enterpriseSearch.readOnlyMode.warning": "企业搜索处于只读模式。您将无法执行更改,例如创建、编辑或删除。",
"xpack.enterpriseSearch.roleMapping.addRoleMappingButtonLabel": "添加映射",
@@ -34742,12 +34724,6 @@
"xpack.securitySolution.zeek.shrDescription": "响应方已发送 SYN ACK,后跟 FIN,发起方未发送 SYN",
"xpack.serverlessSearch.apiKey.activeKeys": "您有 {number} 个活动密钥。",
"xpack.serverlessSearch.apiKey.expiresHelpText": "此 API 密钥将于 {expirationDate}到期",
- "xpack.serverlessSearch.header.greeting.title": "{name}您好!",
- "xpack.serverlessSearch.ingestData.clientDocLink": "{languageName} API 参考",
- "xpack.serverlessSearch.installClient.clientDocLink": "{languageName} 客户端文档",
- "xpack.serverlessSearch.selectClient.description": "Elastic 以几种流行语言构建和维护客户端,我们的社区也做出了许多贡献。选择您常用的语言客户端或深入分析 {console} 以开始使用。",
- "xpack.serverlessSearch.apiCallout.content": "使用 Console,您可以直接调用 Elasticsearch 和 Kibana REST API,而无需安装语言客户端。",
- "xpack.serverlessSearch.apiCallOut.title": "通过 Console 调用 API",
"xpack.serverlessSearch.apiKey.apiKeyStepDescription": "此密钥仅显示一次,因此请将其保存到某个安全位置。我们不存储您的 API 密钥,因此,如果您丢失了密钥,则需要生成替代密钥。",
"xpack.serverlessSearch.apiKey.apiKeyStepTitle": "存储此 API 密钥",
"xpack.serverlessSearch.apiKey.description": "您需要这些唯一标识符才能安全连接到 Elasticsearch 项目。",
@@ -34780,8 +34756,6 @@
"xpack.serverlessSearch.apiKey.userFieldLabel": "用户",
"xpack.serverlessSearch.back": "返回",
"xpack.serverlessSearch.cancel": "取消",
- "xpack.serverlessSearch.codeBox.copyButtonLabel": "复制",
- "xpack.serverlessSearch.codeBox.selectAriaLabel": "选择编程语言",
"xpack.serverlessSearch.configureClient.advancedConfigLabel": "高级配置",
"xpack.serverlessSearch.configureClient.basicConfigLabel": "基本配置",
"xpack.serverlessSearch.configureClient.description": "使用唯一 API 密钥和云 ID 对客户端进行初始化",
@@ -34802,30 +34776,7 @@
"xpack.serverlessSearch.footer.searchUI.description": "搜索 UI 是一个由 Elastic 维护的免费开源 JavaScript 库,用于快速打造现代、富于吸引力的搜索体验。",
"xpack.serverlessSearch.footer.searchUI.title": "通过搜索 UI 构建用户界面",
"xpack.serverlessSearch.footer.title": "后续操作",
- "xpack.serverlessSearch.githubLink.curl.label": "curl",
- "xpack.serverlessSearch.githubLink.javascript.label": "Elasticsearch",
- "xpack.serverlessSearch.githubLink.ruby.label": "elasticsearch-ruby",
- "xpack.serverlessSearch.header.description": "设置您的编程语言客户端,采集一些数据,如此即可在数分钟内开始搜索。",
"xpack.serverlessSearch.header.title": "Elasticsearch 入门",
- "xpack.serverlessSearch.ingestData.beatsDescription": "用于 Elasticsearch 的轻量级、单一用途数据采集器。使用 Beats 从您的服务器发送运营数据。",
- "xpack.serverlessSearch.ingestData.beatsLink": "Beats",
- "xpack.serverlessSearch.ingestData.beatsTitle": "Beats",
- "xpack.serverlessSearch.ingestData.connectorsDescription": "用于将数据从第三方源同步到 Elasticsearch 的专用集成。使用 Elastic 连接器同步来自一系列数据库和对象存储的内容。",
- "xpack.serverlessSearch.ingestData.connectorsPythonLink": "connectors-python",
- "xpack.serverlessSearch.ingestData.connectorsTitle": "连接器客户端",
- "xpack.serverlessSearch.ingestData.description": "将数据添加到数据流或索引,使其可进行搜索。选择适合您的应用程序和工作流的集成方法。",
- "xpack.serverlessSearch.ingestData.ingestApiDescription": "最灵活的数据索引方法,允许您全面控制定制和优化选项。",
- "xpack.serverlessSearch.ingestData.ingestApiLabel": "通过 API 采集",
- "xpack.serverlessSearch.ingestData.ingestIntegrationDescription": "针对转换数据并将其传输到 Elasticsearch 而优化的专用采集工具。",
- "xpack.serverlessSearch.ingestData.ingestIntegrationLabel": "通过集成采集",
- "xpack.serverlessSearch.ingestData.ingestLegendLabel": "选择采集方法",
- "xpack.serverlessSearch.ingestData.integrationsLink": "关于集成",
- "xpack.serverlessSearch.ingestData.logstashDescription": "将数据添加到数据流或索引,使其可进行搜索。选择适合您的应用程序和工作流的集成方法。",
- "xpack.serverlessSearch.ingestData.logstashLink": "Logstash",
- "xpack.serverlessSearch.ingestData.logstashTitle": "Logstash",
- "xpack.serverlessSearch.ingestData.title": "采集数据",
- "xpack.serverlessSearch.installClient.description": "Elastic 以几种流行语言构建和维护客户端,我们的社区也做出了许多贡献。安装您常用的语言客户端以开始使用。",
- "xpack.serverlessSearch.installClient.title": "安装客户端",
"xpack.serverlessSearch.invalidJsonError": "JSON 无效",
"xpack.serverlessSearch.languages.cURL": "cURL",
"xpack.serverlessSearch.languages.javascript": "JavaScript/Node.js",
@@ -34843,17 +34794,8 @@
"xpack.serverlessSearch.required": "必需",
"xpack.serverlessSearch.searchQuery.description": "现在您已做好准备,可以开始体验搜索并对您的 Elasticsearch 数据执行聚合。",
"xpack.serverlessSearch.searchQuery.title": "构建您的首个搜索查询",
- "xpack.serverlessSearch.selectClient.apiRequestConsoleDocLink": "在 Console 中运行 API 请求 ",
- "xpack.serverlessSearch.selectClient.callout.description": "借助 Console,您可以立即开始使用我们的 REST API。无需进行安装。",
- "xpack.serverlessSearch.selectClient.callout.link": "立即试用 Console",
- "xpack.serverlessSearch.selectClient.callout.title": "立即在 Console 中试用",
- "xpack.serverlessSearch.selectClient.description.console.link": "控制台",
- "xpack.serverlessSearch.selectClient.elasticsearchClientDocLink": "Elasticsearch 客户端 ",
- "xpack.serverlessSearch.selectClient.heading": "选择一个",
- "xpack.serverlessSearch.selectClient.title": "选择客户端",
"xpack.serverlessSearch.testConnection.description": "发送测试请求,以确认您的语言客户端和 Elasticsearch 实例已启动并正在运行。",
"xpack.serverlessSearch.testConnection.title": "测试您的连接",
- "xpack.serverlessSearch.tryInConsoleButton": "在 Console 中试用",
"xpack.sessionView.alertFilteredCountStatusLabel": " 正在显示 {count} 个告警",
"xpack.sessionView.alertTotalCountStatusLabel": "正在显示 {count} 个告警",
"xpack.sessionView.processTree.loadMore": "显示 {pageSize} 个后续事件",
diff --git a/yarn.lock b/yarn.lock
index c0031944089cd..e306b12208f31 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5228,6 +5228,10 @@
version "0.0.0"
uid ""
+"@kbn/search-api-panels@link:packages/kbn-search-api-panels":
+ version "0.0.0"
+ uid ""
+
"@kbn/search-examples-plugin@link:examples/search_examples":
version "0.0.0"
uid ""
From 2093a1fee3f54e74ed4397b53642045c161dc209 Mon Sep 17 00:00:00 2001
From: Faisal Kanout
Date: Fri, 11 Aug 2023 19:28:04 +0200
Subject: [PATCH 28/46] [AO] Update the design of Threshold rule creation form
(#163313)
## Summary
Fixes #162768
Fixes #162544
### After update
---
.../expression_row.test.tsx.snap | 23 ---
.../closable_popover_title.test.tsx | 31 +++
.../components/closable_popover_title.tsx | 38 ++++
.../custom_equation_editor.tsx | 187 +++++++++---------
.../custom_equation/metric_row_controls.tsx | 2 +-
.../custom_equation/metric_row_with_agg.tsx | 179 ++++++++++++-----
.../custom_equation/metric_row_with_count.tsx | 110 -----------
.../components/expression_row.test.tsx | 34 +---
.../threshold/components/expression_row.tsx | 174 ++++++----------
.../components/threshold/i18n_strings.ts | 2 +-
.../threshold/threshold_rule_expression.tsx | 76 ++++---
.../translations/translations/fr-FR.json | 5 -
.../translations/translations/ja-JP.json | 5 -
.../translations/translations/zh-CN.json | 5 -
14 files changed, 405 insertions(+), 466 deletions(-)
delete mode 100644 x-pack/plugins/observability/public/components/threshold/components/__snapshots__/expression_row.test.tsx.snap
create mode 100644 x-pack/plugins/observability/public/components/threshold/components/closable_popover_title.test.tsx
create mode 100644 x-pack/plugins/observability/public/components/threshold/components/closable_popover_title.tsx
delete mode 100644 x-pack/plugins/observability/public/components/threshold/components/custom_equation/metric_row_with_count.tsx
diff --git a/x-pack/plugins/observability/public/components/threshold/components/__snapshots__/expression_row.test.tsx.snap b/x-pack/plugins/observability/public/components/threshold/components/__snapshots__/expression_row.test.tsx.snap
deleted file mode 100644
index 4cf9b2195d554..0000000000000
--- a/x-pack/plugins/observability/public/components/threshold/components/__snapshots__/expression_row.test.tsx.snap
+++ /dev/null
@@ -1,23 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`ExpressionRow should render a helpText for the of expression 1`] = `
-
-
- ,
- }
- }
-/>
-`;
diff --git a/x-pack/plugins/observability/public/components/threshold/components/closable_popover_title.test.tsx b/x-pack/plugins/observability/public/components/threshold/components/closable_popover_title.test.tsx
new file mode 100644
index 0000000000000..b101295a6d426
--- /dev/null
+++ b/x-pack/plugins/observability/public/components/threshold/components/closable_popover_title.test.tsx
@@ -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 * as React from 'react';
+import { mount } from 'enzyme';
+import { ClosablePopoverTitle } from './closable_popover_title';
+
+describe('closable popover title', () => {
+ it('renders with defined options', () => {
+ const onClose = jest.fn();
+ const children =
;
+ const wrapper = mount(
+ {children}
+ );
+ expect(wrapper.contains(
)).toBeTruthy();
+ });
+
+ it('onClose function gets called', () => {
+ const onClose = jest.fn();
+ const children =
;
+ const wrapper = mount(
+ {children}
+ );
+ wrapper.find('EuiButtonIcon').simulate('click');
+ expect(onClose).toHaveBeenCalled();
+ });
+});
diff --git a/x-pack/plugins/observability/public/components/threshold/components/closable_popover_title.tsx b/x-pack/plugins/observability/public/components/threshold/components/closable_popover_title.tsx
new file mode 100644
index 0000000000000..7fe5d73783011
--- /dev/null
+++ b/x-pack/plugins/observability/public/components/threshold/components/closable_popover_title.tsx
@@ -0,0 +1,38 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React from 'react';
+import { i18n } from '@kbn/i18n';
+import { EuiPopoverTitle, EuiFlexGroup, EuiFlexItem, EuiButtonIcon } from '@elastic/eui';
+
+interface ClosablePopoverTitleProps {
+ children: JSX.Element;
+ onClose: () => void;
+}
+
+export function ClosablePopoverTitle({ children, onClose }: ClosablePopoverTitleProps) {
+ return (
+
+
+ {children}
+
+ onClose()}
+ />
+
+
+
+ );
+}
diff --git a/x-pack/plugins/observability/public/components/threshold/components/custom_equation/custom_equation_editor.tsx b/x-pack/plugins/observability/public/components/threshold/components/custom_equation/custom_equation_editor.tsx
index 68568e51dd29c..cdb4f7b7155a0 100644
--- a/x-pack/plugins/observability/public/components/threshold/components/custom_equation/custom_equation_editor.tsx
+++ b/x-pack/plugins/observability/public/components/threshold/components/custom_equation/custom_equation_editor.tsx
@@ -11,12 +11,15 @@ import {
EuiFlexGroup,
EuiButtonEmpty,
EuiSpacer,
+ EuiExpression,
+ EuiPopover,
} from '@elastic/eui';
import React, { useState, useCallback, useMemo } from 'react';
import { omit, range, first, xor, debounce } from 'lodash';
import { IErrorObject } from '@kbn/triggers-actions-ui-plugin/public';
import { FormattedMessage } from '@kbn/i18n-react';
import { DataViewBase } from '@kbn/es-query';
+import { i18n } from '@kbn/i18n';
import { OMITTED_AGGREGATIONS_FOR_CUSTOM_METRICS } from '../../../../../common/threshold_rule/metrics_explorer';
import {
Aggregators,
@@ -27,13 +30,8 @@ import {
import { MetricExpression } from '../../types';
import { CustomMetrics, AggregationTypes, NormalizedFields } from './types';
import { MetricRowWithAgg } from './metric_row_with_agg';
-import { MetricRowWithCount } from './metric_row_with_count';
-import {
- CUSTOM_EQUATION,
- EQUATION_HELP_MESSAGE,
- LABEL_HELP_MESSAGE,
- LABEL_LABEL,
-} from '../../i18n_strings';
+import { ClosablePopoverTitle } from '../closable_popover_title';
+import { EQUATION_HELP_MESSAGE } from '../../i18n_strings';
export interface CustomEquationEditorProps {
onChange: (expression: MetricExpression) => void;
@@ -61,7 +59,7 @@ export function CustomEquationEditor({
const [customMetrics, setCustomMetrics] = useState(
expression?.customMetrics ?? [NEW_METRIC]
);
- const [label, setLabel] = useState(expression?.label || undefined);
+ const [customEqPopoverOpen, setCustomEqPopoverOpen] = useState(false);
const [equation, setEquation] = useState(expression?.equation || undefined);
const debouncedOnChange = useMemo(() => debounce(onChange, 500), [onChange]);
@@ -70,48 +68,40 @@ export function CustomEquationEditor({
const currentVars = previous?.map((m) => m.name) ?? [];
const name = first(xor(VAR_NAMES, currentVars))!;
const nextMetrics = [...(previous || []), { ...NEW_METRIC, name }];
- debouncedOnChange({ ...expression, customMetrics: nextMetrics, equation, label });
+ debouncedOnChange({ ...expression, customMetrics: nextMetrics, equation });
return nextMetrics;
});
- }, [debouncedOnChange, equation, expression, label]);
+ }, [debouncedOnChange, equation, expression]);
const handleDelete = useCallback(
(name: string) => {
setCustomMetrics((previous) => {
const nextMetrics = previous?.filter((row) => row.name !== name) ?? [NEW_METRIC];
const finalMetrics = (nextMetrics.length && nextMetrics) || [NEW_METRIC];
- debouncedOnChange({ ...expression, customMetrics: finalMetrics, equation, label });
+ debouncedOnChange({ ...expression, customMetrics: finalMetrics, equation });
return finalMetrics;
});
},
- [equation, expression, debouncedOnChange, label]
+ [equation, expression, debouncedOnChange]
);
const handleChange = useCallback(
(metric: MetricExpressionCustomMetric) => {
setCustomMetrics((previous) => {
const nextMetrics = previous?.map((m) => (m.name === metric.name ? metric : m));
- debouncedOnChange({ ...expression, customMetrics: nextMetrics, equation, label });
+ debouncedOnChange({ ...expression, customMetrics: nextMetrics, equation });
return nextMetrics;
});
},
- [equation, expression, debouncedOnChange, label]
+ [equation, expression, debouncedOnChange]
);
const handleEquationChange = useCallback(
(e: React.ChangeEvent) => {
setEquation(e.target.value);
- debouncedOnChange({ ...expression, customMetrics, equation: e.target.value, label });
+ debouncedOnChange({ ...expression, customMetrics, equation: e.target.value });
},
- [debouncedOnChange, expression, customMetrics, label]
- );
-
- const handleLabelChange = useCallback(
- (e: React.ChangeEvent) => {
- setLabel(e.target.value);
- debouncedOnChange({ ...expression, customMetrics, equation, label: e.target.value });
- },
- [debouncedOnChange, expression, customMetrics, equation]
+ [debouncedOnChange, expression, customMetrics]
);
const disableAdd = customMetrics?.length === MAX_VARIABLES;
@@ -119,42 +109,24 @@ export function CustomEquationEditor({
const filteredAggregationTypes = omit(aggregationTypes, OMITTED_AGGREGATIONS_FOR_CUSTOM_METRICS);
- const metricRows = customMetrics?.map((row) => {
- if (row.aggType === Aggregators.COUNT) {
- return (
-
- );
- }
- return (
-
- );
- });
+ const metricRows = customMetrics?.map((row) => (
+
+ ));
const placeholder = useMemo(() => {
return customMetrics?.map((row) => row.name).join(' + ');
@@ -181,42 +153,69 @@ export function CustomEquationEditor({
-
-
-
-
+
-
-
-
-
-
-
-
-
+ <>
+
+ {
+ setCustomEqPopoverOpen(true);
+ }}
+ />
+ >
+
+ }
+ isOpen={customEqPopoverOpen}
+ closePopover={() => {
+ setCustomEqPopoverOpen(false);
+ }}
+ display="block"
+ ownFocus
+ anchorPosition={'downLeft'}
+ repositionOnScroll
+ >
+
+ setCustomEqPopoverOpen(false)}>
+
+
+
-
-
-
+ helpText={EQUATION_HELP_MESSAGE}
+ isInvalid={errors.equation != null}
+ >
+
+
+
+
+
);
}
diff --git a/x-pack/plugins/observability/public/components/threshold/components/custom_equation/metric_row_controls.tsx b/x-pack/plugins/observability/public/components/threshold/components/custom_equation/metric_row_controls.tsx
index 7533e23640ece..5f4ebac04cd34 100644
--- a/x-pack/plugins/observability/public/components/threshold/components/custom_equation/metric_row_controls.tsx
+++ b/x-pack/plugins/observability/public/components/threshold/components/custom_equation/metric_row_controls.tsx
@@ -21,7 +21,7 @@ export function MetricRowControls({ onDelete, disableDelete }: MetricRowControlP
aria-label={DELETE_LABEL}
iconType="trash"
color="danger"
- style={{ marginBottom: '0.2em' }}
+ style={{ marginBottom: '0.6em' }}
onClick={onDelete}
disabled={disableDelete}
title={DELETE_LABEL}
diff --git a/x-pack/plugins/observability/public/components/threshold/components/custom_equation/metric_row_with_agg.tsx b/x-pack/plugins/observability/public/components/threshold/components/custom_equation/metric_row_with_agg.tsx
index 10ff425e06525..fcc09399bb3da 100644
--- a/x-pack/plugins/observability/public/components/threshold/components/custom_equation/metric_row_with_agg.tsx
+++ b/x-pack/plugins/observability/public/components/threshold/components/custom_equation/metric_row_with_agg.tsx
@@ -7,24 +7,31 @@
import {
EuiFormRow,
- EuiHorizontalRule,
EuiFlexItem,
EuiFlexGroup,
EuiSelect,
EuiComboBox,
EuiComboBoxOptionOption,
+ EuiPopover,
+ EuiExpression,
} from '@elastic/eui';
-import React, { useMemo, useCallback } from 'react';
+import React, { useMemo, useCallback, useState } from 'react';
import { get } from 'lodash';
import { i18n } from '@kbn/i18n';
import { ValidNormalizedTypes } from '@kbn/triggers-actions-ui-plugin/public';
+import { DataViewBase } from '@kbn/es-query';
+import { FormattedMessage } from '@kbn/i18n-react';
import { Aggregators, CustomMetricAggTypes } from '../../../../../common/threshold_rule/types';
import { MetricRowControls } from './metric_row_controls';
import { NormalizedFields, MetricRowBaseProps } from './types';
+import { ClosablePopoverTitle } from '../closable_popover_title';
+import { MetricsExplorerKueryBar } from '../kuery_bar';
interface MetricRowWithAggProps extends MetricRowBaseProps {
aggType?: CustomMetricAggTypes;
field?: string;
+ dataView: DataViewBase;
+ filter?: string;
fields: NormalizedFields;
}
@@ -33,6 +40,8 @@ export function MetricRowWithAgg({
aggType = Aggregators.AVERAGE,
field,
onDelete,
+ dataView,
+ filter,
disableDelete,
fields,
aggregationTypes,
@@ -43,6 +52,8 @@ export function MetricRowWithAgg({
onDelete(name);
}, [name, onDelete]);
+ const [aggTypePopoverOpen, setAggTypePopoverOpen] = useState(false);
+
const fieldOptions = useMemo(
() =>
fields.reduce((acc, fieldValue) => {
@@ -59,15 +70,6 @@ export function MetricRowWithAgg({
[fields, aggregationTypes, aggType]
);
- const aggOptions = useMemo(
- () =>
- Object.values(aggregationTypes).map((a) => ({
- text: a.text,
- value: a.value,
- })),
- [aggregationTypes]
- );
-
const handleFieldChange = useCallback(
(selectedOptions: EuiComboBoxOptionOption[]) => {
onChange({
@@ -80,62 +82,141 @@ export function MetricRowWithAgg({
);
const handleAggChange = useCallback(
- (el: React.ChangeEvent) => {
+ (customAggType: string) => {
onChange({
name,
field,
- aggType: el.target.value as CustomMetricAggTypes,
+ aggType: customAggType as CustomMetricAggTypes,
});
},
[name, field, onChange]
);
+ const handleFilterChange = useCallback(
+ (filterString: string) => {
+ onChange({
+ name,
+ filter: filterString,
+ aggType,
+ });
+ },
+ [name, aggType, onChange]
+ );
+
const isAggInvalid = get(errors, ['customMetrics', name, 'aggType']) != null;
const isFieldInvalid = get(errors, ['customMetrics', name, 'field']) != null || !field;
return (
<>
-
-
+
+ {
+ setAggTypePopoverOpen(true);
+ }}
+ />
+
+ }
+ isOpen={aggTypePopoverOpen}
+ closePopover={() => {
+ setAggTypePopoverOpen(false);
+ }}
+ display="block"
+ ownFocus
+ anchorPosition={'downLeft'}
+ repositionOnScroll
>
-
-
-
-
-
-
-
+
+ setAggTypePopoverOpen(false)}>
+
+
+
+
+
+
+ {
+ handleAggChange(e.target.value);
+ }}
+ options={Object.values(aggregationTypes).map(({ text, value }) => {
+ return {
+ text,
+ value,
+ };
+ })}
+ />
+
+
+
+ {aggType === Aggregators.COUNT ? (
+
+
+
+ ) : (
+
+
+
+ )}
+
+
+
+
-
>
);
}
diff --git a/x-pack/plugins/observability/public/components/threshold/components/custom_equation/metric_row_with_count.tsx b/x-pack/plugins/observability/public/components/threshold/components/custom_equation/metric_row_with_count.tsx
deleted file mode 100644
index e27efafde504c..0000000000000
--- a/x-pack/plugins/observability/public/components/threshold/components/custom_equation/metric_row_with_count.tsx
+++ /dev/null
@@ -1,110 +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 { EuiFormRow, EuiHorizontalRule, EuiFlexItem, EuiFlexGroup, EuiSelect } from '@elastic/eui';
-import React, { useCallback, useMemo } from 'react';
-import { i18n } from '@kbn/i18n';
-import { DataViewBase } from '@kbn/es-query';
-import { Aggregators, CustomMetricAggTypes } from '../../../../../common/threshold_rule/types';
-import { MetricRowControls } from './metric_row_controls';
-import { MetricRowBaseProps } from './types';
-import { MetricsExplorerKueryBar } from '../kuery_bar';
-
-interface MetricRowWithCountProps extends MetricRowBaseProps {
- agg?: Aggregators;
- filter?: string;
- dataView: DataViewBase;
-}
-
-export function MetricRowWithCount({
- name,
- agg,
- filter,
- onDelete,
- disableDelete,
- onChange,
- aggregationTypes,
- dataView,
-}: MetricRowWithCountProps) {
- const aggOptions = useMemo(
- () =>
- Object.values(aggregationTypes)
- .filter((aggType) => aggType.value !== Aggregators.CUSTOM)
- .map((aggType) => ({
- text: aggType.text,
- value: aggType.value,
- })),
- [aggregationTypes]
- );
-
- const handleDelete = useCallback(() => {
- onDelete(name);
- }, [name, onDelete]);
-
- const handleAggChange = useCallback(
- (el: React.ChangeEvent) => {
- onChange({
- name,
- filter,
- aggType: el.target.value as CustomMetricAggTypes,
- });
- },
- [name, filter, onChange]
- );
-
- const handleFilterChange = useCallback(
- (filterString: string) => {
- onChange({
- name,
- filter: filterString,
- aggType: agg as CustomMetricAggTypes,
- });
- },
- [name, agg, onChange]
- );
-
- return (
- <>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- >
- );
-}
diff --git a/x-pack/plugins/observability/public/components/threshold/components/expression_row.test.tsx b/x-pack/plugins/observability/public/components/threshold/components/expression_row.test.tsx
index afc1a1d87ff48..7a7536849c187 100644
--- a/x-pack/plugins/observability/public/components/threshold/components/expression_row.test.tsx
+++ b/x-pack/plugins/observability/public/components/threshold/components/expression_row.test.tsx
@@ -67,15 +67,16 @@ describe('ExpressionRow', () => {
threshold: [0.5],
timeSize: 1,
timeUnit: 'm',
- aggType: 'avg',
+ aggType: 'custom',
};
const { wrapper, update } = await setup(expression as MetricExpression);
await update();
const [valueMatch] =
wrapper
.html()
- .match('50 ') ??
- [];
+ .match(
+ '50 '
+ ) ?? [];
expect(valueMatch).toBeTruthy();
});
@@ -86,34 +87,15 @@ describe('ExpressionRow', () => {
threshold: [0.5],
timeSize: 1,
timeUnit: 'm',
- aggType: 'avg',
+ aggType: 'custom',
};
const { wrapper } = await setup(expression as MetricExpression);
const [valueMatch] =
wrapper
.html()
- .match('0.5 ') ??
- [];
+ .match(
+ '0.5 '
+ ) ?? [];
expect(valueMatch).toBeTruthy();
});
-
- it('should render a helpText for the of expression', async () => {
- const expression = {
- metric: 'system.load.1',
- comparator: Comparator.GT,
- threshold: [0.5],
- timeSize: 1,
- timeUnit: 'm',
- aggType: 'avg',
- } as MetricExpression;
-
- const { wrapper } = await setup(expression as MetricExpression);
-
- const helpText = wrapper
- .find('[data-test-subj="thresholdRuleOfExpression"]')
- .at(0)
- .prop('helpText');
-
- expect(helpText).toMatchSnapshot();
- });
});
diff --git a/x-pack/plugins/observability/public/components/threshold/components/expression_row.tsx b/x-pack/plugins/observability/public/components/threshold/components/expression_row.tsx
index 3ab71eaf639d1..ac8a4a05092d4 100644
--- a/x-pack/plugins/observability/public/components/threshold/components/expression_row.tsx
+++ b/x-pack/plugins/observability/public/components/threshold/components/expression_row.tsx
@@ -6,30 +6,28 @@
*/
import {
EuiButtonIcon,
- EuiExpression,
+ EuiFieldText,
EuiFlexGroup,
EuiFlexItem,
- EuiLink,
+ EuiFormRow,
EuiSpacer,
EuiText,
} from '@elastic/eui';
import { i18n } from '@kbn/i18n';
-import { FormattedMessage } from '@kbn/i18n-react';
-import React, { useCallback, useMemo } from 'react';
+import React, { useCallback, useMemo, useState } from 'react';
import { euiStyled } from '@kbn/kibana-react-plugin/common';
import {
AggregationType,
builtInComparators,
IErrorObject,
- OfExpression,
ThresholdExpression,
} from '@kbn/triggers-actions-ui-plugin/public';
import { DataViewBase } from '@kbn/es-query';
-import useToggle from 'react-use/lib/useToggle';
-import { Aggregators, Comparator } from '../../../../common/threshold_rule/types';
+import { debounce } from 'lodash';
+import { Comparator } from '../../../../common/threshold_rule/types';
import { AGGREGATION_TYPES, DerivedIndexPattern, MetricExpression } from '../types';
import { CustomEquationEditor } from './custom_equation';
-import { CUSTOM_EQUATION } from '../i18n_strings';
+import { CUSTOM_EQUATION, LABEL_HELP_MESSAGE, LABEL_LABEL } from '../i18n_strings';
import { decimalToPct, pctToDecimal } from '../helpers/corrected_percent_convert';
const customComparators = {
@@ -62,14 +60,8 @@ const StyledExpressionRow = euiStyled(EuiFlexGroup)`
margin: 0 -4px;
`;
-const StyledExpression = euiStyled.div`
- padding: 0 4px;
-`;
-
// eslint-disable-next-line react/function-component-definition
export const ExpressionRow: React.FC = (props) => {
- const [isExpanded, toggle] = useToggle(true);
-
const {
dataView,
children,
@@ -82,21 +74,10 @@ export const ExpressionRow: React.FC = (props) => {
canDelete,
} = props;
- const {
- aggType = AGGREGATION_TYPES.MAX,
- metric,
- comparator = Comparator.GT,
- threshold = [],
- } = expression;
+ const { metric, comparator = Comparator.GT, threshold = [] } = expression;
const isMetricPct = useMemo(() => Boolean(metric && metric.endsWith('.pct')), [metric]);
-
- const updateMetric = useCallback(
- (m?: MetricExpression['metric']) => {
- setRuleParams(expressionId, { ...expression, metric: m });
- },
- [expressionId, expression, setRuleParams]
- );
+ const [label, setLabel] = useState(expression?.label || undefined);
const updateComparator = useCallback(
(c?: string) => {
@@ -127,6 +108,10 @@ export const ExpressionRow: React.FC = (props) => {
},
[expressionId, setRuleParams]
);
+ const debouncedLabelChange = useMemo(
+ () => debounce(handleCustomMetricChange, 300),
+ [handleCustomMetricChange]
+ );
const criticalThresholdExpression = (
= (props) => {
name: f.name,
}));
+ const handleLabelChange = useCallback(
+ (e: React.ChangeEvent) => {
+ setLabel(e.target.value);
+ debouncedLabelChange({ ...expression, label: e.target.value });
+ },
+ [debouncedLabelChange, expression]
+ );
return (
<>
-
-
-
-
-
-
-
- {!['count', 'custom'].includes(aggType) && (
-
-
-
-
- ),
- }}
- />
- }
- data-test-subj="thresholdRuleOfExpression"
- />
-
- )}
+
+ <>
+
+
{criticalThresholdExpression}
-
-
- {aggType === Aggregators.CUSTOM && (
- <>
-
-
-
-
-
- >
- )}
+
+
+
+
+
+
+
+
+
+ >
{canDelete && (
@@ -244,7 +186,7 @@ export const ExpressionRow: React.FC = (props) => {
)}
- {isExpanded ? {children}
: null}
+ {children}
>
);
@@ -266,16 +208,16 @@ const ThresholdElement: React.FC<{
return (
<>
-
-
-
+
+
{isMetricPct && (
-
{ruleParams.criteria &&
ruleParams.criteria.map((e, idx) => {
return (
- 1) || false}
- fields={derivedIndexPattern.fields as any}
- remove={removeExpression}
- addExpression={addExpression}
- key={idx} // idx's don't usually make good key's but here the index has semantic meaning
- expressionId={idx}
- setRuleParams={updateParams}
- errors={(errors[idx] as IErrorObject) || emptyError}
- expression={e || {}}
- dataView={derivedIndexPattern}
- >
- {/* Preview */}
-
-
+
+ {/* index has semantic meaning, we show the condition title starting from the 2nd one */}
+ {idx >= 1 && (
+
+
+
+
+
+ )}
+ 1) || false}
+ fields={derivedIndexPattern.fields as any}
+ remove={removeExpression}
+ addExpression={addExpression}
+ key={idx} // idx's don't usually make good key's but here the index has semantic meaning
+ expressionId={idx}
+ setRuleParams={updateParams}
+ errors={(errors[idx] as IErrorObject) || emptyError}
+ expression={e || {}}
+ dataView={derivedIndexPattern}
+ >
+ {/* Preview */}
+
+
+
);
})}
-
-
-
+
+
+
Date: Fri, 11 Aug 2023 19:40:26 +0200
Subject: [PATCH 29/46] Adjust global loading indicator data-test-subj for
projects (#163697)
## Summary
This PR adjusts the `data-test-subj` for the global loading indicator in
serverless projects such that at matches the stateful version. This
makes sure that functional tests and corresponding test helper methods
continue to work the same in stateful and serverless environments when
comes to waiting for global loading to finish, which is a key mechanism
to avoid test flakiness.
### Additional information
- The serverless project specific global loading indicator was
introduced with #158523
- The stateful loading indicator `data-test-subj` naming is implemented
here:
https://github.com/elastic/kibana/blob/main/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.tsx#L61
Co-authored-by: Tim Sullivan
---
.../core-chrome-browser-internal/src/ui/project/header.tsx | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/project/header.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/project/header.tsx
index 551fa7895795d..f9e076db4410e 100644
--- a/packages/core/chrome/core-chrome-browser-internal/src/ui/project/header.tsx
+++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/project/header.tsx
@@ -141,14 +141,14 @@ const Logo = (
);
return (
-
+
{loadingCount === 0 ? (
) : (
@@ -157,7 +157,7 @@ const Logo = (
size="l"
aria-hidden={false}
onClick={navigateHome}
- data-test-subj="nav-header-loading-spinner"
+ data-test-subj="globalLoadingIndicator"
/>
)}
From 57c17c4927a6739dc8d759f7a3a6afb05d02edbf Mon Sep 17 00:00:00 2001
From: Anton Dosov
Date: Fri, 11 Aug 2023 19:50:05 +0200
Subject: [PATCH 30/46] [Serverless] Fix sidenav responsiveness (#163700)
## Summary
I was not sure if there are other plans for these stats, but I went
ahead and cleaned those up:
### Issue 1. Sidenav groups are collapsed on a smaller screen
#### Before
![Screenshot 2023-08-11 at 11 28
54](https://github.com/elastic/kibana/assets/7784120/a3202f96-05c2-4792-8e9e-a25ea5e471cf)
#### After
### Issue 2. Collapsed sidenav state is empty
We reserved this for icons, but until we have them, I think it makes
sense to just hide the bar:
#### Berfore
![Screenshot 2023-08-11 at 11 29
01](https://github.com/elastic/kibana/assets/7784120/e8f5f474-15c5-46d1-95cc-c2580d3c7050)
#### After
### Issue 3. Navigation is not initialized when Kibana loaded with
hidden navigation
We initialize the navigation as we render the nav tree (the sidenav).
But if the sidenav is hidden, then the navigation is not initialized.
**So, for example, breadcrumbs are not displayed correctly until the nav
is opened.** As a hack, we will always render the tree, but will make it
hidden.
#### Before
#### After
---
.../src/ui/project/header.test.tsx | 2 +-
.../src/ui/project/navigation.tsx | 46 ++++++++++---------
.../ui/components/navigation_section_ui.tsx | 1 +
.../src/ui/components/recently_accessed.tsx | 6 ++-
4 files changed, 31 insertions(+), 24 deletions(-)
diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/project/header.test.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/project/header.test.tsx
index 63db10979d026..b2a1cecede239 100644
--- a/packages/core/chrome/core-chrome-browser-internal/src/ui/project/header.test.tsx
+++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/project/header.test.tsx
@@ -61,7 +61,7 @@ describe('Header', () => {
const toggleNav = async () => {
fireEvent.click(await screen.findByTestId('toggleNavButton')); // click
- expect(screen.queryAllByText('Hello, goodbye!')).toHaveLength(0); // title is not shown
+ expect(await screen.findByText('Hello, goodbye!')).not.toBeVisible();
fireEvent.click(await screen.findByTestId('toggleNavButton')); // click again
diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/project/navigation.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/project/navigation.tsx
index c05e8c3c4b94d..1d48a6eccfbb5 100644
--- a/packages/core/chrome/core-chrome-browser-internal/src/ui/project/navigation.tsx
+++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/project/navigation.tsx
@@ -8,10 +8,10 @@
import React from 'react';
import { css } from '@emotion/react';
-import { EuiCollapsibleNav, EuiCollapsibleNavProps, useIsWithinMinBreakpoint } from '@elastic/eui';
+import { EuiCollapsibleNav, EuiCollapsibleNavProps } from '@elastic/eui';
const SIZE_EXPANDED = 248;
-const SIZE_COLLAPSED = 48;
+const SIZE_COLLAPSED = 0;
export interface ProjectNavigationProps {
isOpen: boolean;
@@ -31,28 +31,30 @@ export const ProjectNavigation: React.FC = ({
flex-direction: row,
`;
- // on small screen isOpen hides the nav,
- // on larger screen isOpen makes it smaller
const DOCKED_BREAKPOINT = 's' as const;
- const isCollapsible = useIsWithinMinBreakpoint(DOCKED_BREAKPOINT);
- const isVisible = isCollapsible ? true : isOpen;
- const isCollapsed = isCollapsible ? !isOpen : false;
+ const isVisible = isOpen;
return (
-
- {!isCollapsed && children}
-
+ <>
+ {
+ /* must render the tree to initialize the navigation, even if it shouldn't be visible */
+ !isOpen && {children}
+ }
+
+ {isOpen && children}
+
+ >
);
};
diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx b/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx
index 5926d72fa65c5..3e4a3c3327162 100644
--- a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx
+++ b/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx
@@ -164,6 +164,7 @@ export const NavigationSectionUI: FC = ({ navNode, items = [] }) => {
>
navigationNodeToEuiItem(item, { navigateToUrl, basePath })
)}
diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/recently_accessed.tsx b/packages/shared-ux/chrome/navigation/src/ui/components/recently_accessed.tsx
index da6e92707e022..051beb931a371 100644
--- a/packages/shared-ux/chrome/navigation/src/ui/components/recently_accessed.tsx
+++ b/packages/shared-ux/chrome/navigation/src/ui/components/recently_accessed.tsx
@@ -71,7 +71,11 @@ export const RecentlyAccessed: FC = ({
initialIsOpen={!defaultIsCollapsed}
data-test-subj={`nav-bucket-recentlyAccessed`}
>
-
+
);
};
From 3762df1a22491c6e2e44a10981adde3abe72a23c Mon Sep 17 00:00:00 2001
From: Ying Mao
Date: Fri, 11 Aug 2023 13:54:31 -0400
Subject: [PATCH 31/46] [Response Ops][Task Manager] Expose SLI metrics in HTTP
API - Take 2 (#163652)
## Summary
Redo of this PR https://github.com/elastic/kibana/pull/162178 but
without the `native-hdr-histogram` library which caused issues in the
serverless build. In the future we may want to pursue generating a
custom build of this native library but for our current purposes, a
simple bucketed histogram should suffice. The only changes from the
original PR are in this commit:
https://github.com/elastic/kibana/pull/163652/commits/dde5245deddf1470f548181c22538cb819fd089e,
where we create a `SimpleHistogram` class to bucket task claim durations
into `100ms` buckets.
Please reference the original PR for more description about this HTTP
API
---------
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
---
.../task_manager/server/config.test.ts | 3 +
x-pack/plugins/task_manager/server/config.ts | 107 +-
.../server/ephemeral_task_lifecycle.test.ts | 1 +
.../managed_configuration.test.ts | 1 +
.../runtime_statistics_aggregator.ts | 0
.../server/metrics/create_aggregator.test.ts | 1070 +++++++++++++++++
.../server/metrics/create_aggregator.ts | 57 +
.../task_manager/server/metrics/index.ts | 26 +
.../server/metrics/metrics_aggregator.mock.ts | 21 +
.../server/metrics/metrics_stream.test.ts | 89 ++
.../server/metrics/metrics_stream.ts | 89 ++
.../server/metrics/simple_histogram.test.ts | 179 +++
.../server/metrics/simple_histogram.ts | 82 ++
.../metrics/success_rate_counter.test.ts | 49 +
.../server/metrics/success_rate_counter.ts | 44 +
.../task_claim_metrics_aggregator.test.ts | 102 ++
.../metrics/task_claim_metrics_aggregator.ts | 68 ++
.../task_run_metrics_aggregator.test.ts | 208 ++++
.../metrics/task_run_metrics_aggregator.ts | 85 ++
.../task_manager/server/metrics/types.ts | 15 +
...ground_task_utilization_statistics.test.ts | 2 +-
.../background_task_utilization_statistics.ts | 2 +-
.../configuration_statistics.test.ts | 1 +
.../monitoring/configuration_statistics.ts | 2 +-
.../ephemeral_task_statistics.test.ts | 2 +-
.../monitoring/ephemeral_task_statistics.ts | 2 +-
.../monitoring_stats_stream.test.ts | 4 +-
.../monitoring/monitoring_stats_stream.ts | 4 +-
.../monitoring/task_run_statistics.test.ts | 2 +-
.../server/monitoring/task_run_statistics.ts | 2 +-
.../server/monitoring/workload_statistics.ts | 2 +-
.../task_manager/server/plugin.test.ts | 1 +
x-pack/plugins/task_manager/server/plugin.ts | 15 +-
.../server/polling_lifecycle.test.ts | 1 +
.../task_manager/server/routes/index.ts | 1 +
.../server/routes/metrics.test.ts | 82 ++
.../task_manager/server/routes/metrics.ts | 74 ++
.../server/task_running/task_runner.test.ts | 39 +
.../server/task_running/task_runner.ts | 54 +-
.../test_suites/task_manager/index.ts | 1 +
.../test_suites/task_manager/metrics_route.ts | 227 ++++
41 files changed, 2730 insertions(+), 86 deletions(-)
rename x-pack/plugins/task_manager/server/{monitoring => lib}/runtime_statistics_aggregator.ts (100%)
create mode 100644 x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts
create mode 100644 x-pack/plugins/task_manager/server/metrics/create_aggregator.ts
create mode 100644 x-pack/plugins/task_manager/server/metrics/index.ts
create mode 100644 x-pack/plugins/task_manager/server/metrics/metrics_aggregator.mock.ts
create mode 100644 x-pack/plugins/task_manager/server/metrics/metrics_stream.test.ts
create mode 100644 x-pack/plugins/task_manager/server/metrics/metrics_stream.ts
create mode 100644 x-pack/plugins/task_manager/server/metrics/simple_histogram.test.ts
create mode 100644 x-pack/plugins/task_manager/server/metrics/simple_histogram.ts
create mode 100644 x-pack/plugins/task_manager/server/metrics/success_rate_counter.test.ts
create mode 100644 x-pack/plugins/task_manager/server/metrics/success_rate_counter.ts
create mode 100644 x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.test.ts
create mode 100644 x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.ts
create mode 100644 x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.test.ts
create mode 100644 x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts
create mode 100644 x-pack/plugins/task_manager/server/metrics/types.ts
create mode 100644 x-pack/plugins/task_manager/server/routes/metrics.test.ts
create mode 100644 x-pack/plugins/task_manager/server/routes/metrics.ts
create mode 100644 x-pack/test/plugin_api_integration/test_suites/task_manager/metrics_route.ts
diff --git a/x-pack/plugins/task_manager/server/config.test.ts b/x-pack/plugins/task_manager/server/config.test.ts
index 9782d6ae08dbf..c196a334931ba 100644
--- a/x-pack/plugins/task_manager/server/config.test.ts
+++ b/x-pack/plugins/task_manager/server/config.test.ts
@@ -23,6 +23,7 @@ describe('config validation', () => {
},
"max_attempts": 3,
"max_workers": 10,
+ "metrics_reset_interval": 30000,
"monitored_aggregated_stats_refresh_rate": 60000,
"monitored_stats_health_verbose_log": Object {
"enabled": false,
@@ -81,6 +82,7 @@ describe('config validation', () => {
},
"max_attempts": 3,
"max_workers": 10,
+ "metrics_reset_interval": 30000,
"monitored_aggregated_stats_refresh_rate": 60000,
"monitored_stats_health_verbose_log": Object {
"enabled": false,
@@ -137,6 +139,7 @@ describe('config validation', () => {
},
"max_attempts": 3,
"max_workers": 10,
+ "metrics_reset_interval": 30000,
"monitored_aggregated_stats_refresh_rate": 60000,
"monitored_stats_health_verbose_log": Object {
"enabled": false,
diff --git a/x-pack/plugins/task_manager/server/config.ts b/x-pack/plugins/task_manager/server/config.ts
index c2d4940d36450..490d25a7bdfb0 100644
--- a/x-pack/plugins/task_manager/server/config.ts
+++ b/x-pack/plugins/task_manager/server/config.ts
@@ -20,6 +20,8 @@ export const DEFAULT_MONITORING_REFRESH_RATE = 60 * 1000;
export const DEFAULT_MONITORING_STATS_RUNNING_AVERAGE_WINDOW = 50;
export const DEFAULT_MONITORING_STATS_WARN_DELAYED_TASK_START_IN_SECONDS = 60;
+export const DEFAULT_METRICS_RESET_INTERVAL = 30 * 1000; // 30 seconds
+
// At the default poll interval of 3sec, this averages over the last 15sec.
export const DEFAULT_WORKER_UTILIZATION_RUNNING_AVERAGE_WINDOW = 5;
@@ -52,46 +54,40 @@ const eventLoopDelaySchema = schema.object({
});
const requeueInvalidTasksConfig = schema.object({
- enabled: schema.boolean({ defaultValue: false }),
delay: schema.number({ defaultValue: 3000, min: 0 }),
+ enabled: schema.boolean({ defaultValue: false }),
max_attempts: schema.number({ defaultValue: 100, min: 1, max: 500 }),
});
export const configSchema = schema.object(
{
+ allow_reading_invalid_state: schema.boolean({ defaultValue: true }),
+ ephemeral_tasks: schema.object({
+ enabled: schema.boolean({ defaultValue: false }),
+ /* How many requests can Task Manager buffer before it rejects new requests. */
+ request_capacity: schema.number({
+ // a nice round contrived number, feel free to change as we learn how it behaves
+ defaultValue: 10,
+ min: 1,
+ max: DEFAULT_MAX_EPHEMERAL_REQUEST_CAPACITY,
+ }),
+ }),
+ event_loop_delay: eventLoopDelaySchema,
/* The maximum number of times a task will be attempted before being abandoned as failed */
max_attempts: schema.number({
defaultValue: 3,
min: 1,
}),
- /* How often, in milliseconds, the task manager will look for more work. */
- poll_interval: schema.number({
- defaultValue: DEFAULT_POLL_INTERVAL,
- min: 100,
- }),
- /* How many requests can Task Manager buffer before it rejects new requests. */
- request_capacity: schema.number({
- // a nice round contrived number, feel free to change as we learn how it behaves
- defaultValue: 1000,
- min: 1,
- }),
/* The maximum number of tasks that this Kibana instance will run simultaneously. */
max_workers: schema.number({
defaultValue: DEFAULT_MAX_WORKERS,
// disable the task manager rather than trying to specify it with 0 workers
min: 1,
}),
- /* The threshold percenatge for workers experiencing version conflicts for shifting the polling interval. */
- version_conflict_threshold: schema.number({
- defaultValue: DEFAULT_VERSION_CONFLICT_THRESHOLD,
- min: 50,
- max: 100,
- }),
- /* The rate at which we emit fresh monitored stats. By default we'll use the poll_interval (+ a slight buffer) */
- monitored_stats_required_freshness: schema.number({
- defaultValue: (config?: unknown) =>
- ((config as { poll_interval: number })?.poll_interval ?? DEFAULT_POLL_INTERVAL) + 1000,
- min: 100,
+ /* The interval at which monotonically increasing metrics counters will reset */
+ metrics_reset_interval: schema.number({
+ defaultValue: DEFAULT_METRICS_RESET_INTERVAL,
+ min: 10 * 1000, // minimum 10 seconds
}),
/* The rate at which we refresh monitored stats that require aggregation queries against ES. */
monitored_aggregated_stats_refresh_rate: schema.number({
@@ -99,6 +95,22 @@ export const configSchema = schema.object(
/* don't run monitored stat aggregations any faster than once every 5 seconds */
min: 5000,
}),
+ monitored_stats_health_verbose_log: schema.object({
+ enabled: schema.boolean({ defaultValue: false }),
+ level: schema.oneOf([schema.literal('debug'), schema.literal('info')], {
+ defaultValue: 'debug',
+ }),
+ /* The amount of seconds we allow a task to delay before printing a warning server log */
+ warn_delayed_task_start_in_seconds: schema.number({
+ defaultValue: DEFAULT_MONITORING_STATS_WARN_DELAYED_TASK_START_IN_SECONDS,
+ }),
+ }),
+ /* The rate at which we emit fresh monitored stats. By default we'll use the poll_interval (+ a slight buffer) */
+ monitored_stats_required_freshness: schema.number({
+ defaultValue: (config?: unknown) =>
+ ((config as { poll_interval: number })?.poll_interval ?? DEFAULT_POLL_INTERVAL) + 1000,
+ min: 100,
+ }),
/* The size of the running average window for monitored stats. */
monitored_stats_running_average_window: schema.number({
defaultValue: DEFAULT_MONITORING_STATS_RUNNING_AVERAGE_WINDOW,
@@ -107,44 +119,39 @@ export const configSchema = schema.object(
}),
/* Task Execution result warn & error thresholds. */
monitored_task_execution_thresholds: schema.object({
- default: taskExecutionFailureThresholdSchema,
custom: schema.recordOf(schema.string(), taskExecutionFailureThresholdSchema, {
defaultValue: {},
}),
+ default: taskExecutionFailureThresholdSchema,
}),
- monitored_stats_health_verbose_log: schema.object({
- enabled: schema.boolean({ defaultValue: false }),
- level: schema.oneOf([schema.literal('debug'), schema.literal('info')], {
- defaultValue: 'debug',
- }),
- /* The amount of seconds we allow a task to delay before printing a warning server log */
- warn_delayed_task_start_in_seconds: schema.number({
- defaultValue: DEFAULT_MONITORING_STATS_WARN_DELAYED_TASK_START_IN_SECONDS,
- }),
- }),
- ephemeral_tasks: schema.object({
- enabled: schema.boolean({ defaultValue: false }),
- /* How many requests can Task Manager buffer before it rejects new requests. */
- request_capacity: schema.number({
- // a nice round contrived number, feel free to change as we learn how it behaves
- defaultValue: 10,
- min: 1,
- max: DEFAULT_MAX_EPHEMERAL_REQUEST_CAPACITY,
- }),
+ /* How often, in milliseconds, the task manager will look for more work. */
+ poll_interval: schema.number({
+ defaultValue: DEFAULT_POLL_INTERVAL,
+ min: 100,
}),
- event_loop_delay: eventLoopDelaySchema,
- worker_utilization_running_average_window: schema.number({
- defaultValue: DEFAULT_WORKER_UTILIZATION_RUNNING_AVERAGE_WINDOW,
- max: 100,
+ /* How many requests can Task Manager buffer before it rejects new requests. */
+ request_capacity: schema.number({
+ // a nice round contrived number, feel free to change as we learn how it behaves
+ defaultValue: 1000,
min: 1,
}),
+ requeue_invalid_tasks: requeueInvalidTasksConfig,
/* These are not designed to be used by most users. Please use caution when changing these */
unsafe: schema.object({
- exclude_task_types: schema.arrayOf(schema.string(), { defaultValue: [] }),
authenticate_background_task_utilization: schema.boolean({ defaultValue: true }),
+ exclude_task_types: schema.arrayOf(schema.string(), { defaultValue: [] }),
+ }),
+ /* The threshold percenatge for workers experiencing version conflicts for shifting the polling interval. */
+ version_conflict_threshold: schema.number({
+ defaultValue: DEFAULT_VERSION_CONFLICT_THRESHOLD,
+ min: 50,
+ max: 100,
+ }),
+ worker_utilization_running_average_window: schema.number({
+ defaultValue: DEFAULT_WORKER_UTILIZATION_RUNNING_AVERAGE_WINDOW,
+ max: 100,
+ min: 1,
}),
- requeue_invalid_tasks: requeueInvalidTasksConfig,
- allow_reading_invalid_state: schema.boolean({ defaultValue: true }),
},
{
validate: (config) => {
diff --git a/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.test.ts b/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.test.ts
index 863b5d986d3da..6a06ea93f3dcb 100644
--- a/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.test.ts
+++ b/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.test.ts
@@ -84,6 +84,7 @@ describe('EphemeralTaskLifecycle', () => {
delay: 3000,
max_attempts: 20,
},
+ metrics_reset_interval: 3000,
...config,
},
elasticsearchAndSOAvailability$,
diff --git a/x-pack/plugins/task_manager/server/integration_tests/managed_configuration.test.ts b/x-pack/plugins/task_manager/server/integration_tests/managed_configuration.test.ts
index e2d290d256ec2..f034feb154462 100644
--- a/x-pack/plugins/task_manager/server/integration_tests/managed_configuration.test.ts
+++ b/x-pack/plugins/task_manager/server/integration_tests/managed_configuration.test.ts
@@ -79,6 +79,7 @@ describe('managed configuration', () => {
delay: 3000,
max_attempts: 20,
},
+ metrics_reset_interval: 3000,
});
logger = context.logger.get('taskManager');
diff --git a/x-pack/plugins/task_manager/server/monitoring/runtime_statistics_aggregator.ts b/x-pack/plugins/task_manager/server/lib/runtime_statistics_aggregator.ts
similarity index 100%
rename from x-pack/plugins/task_manager/server/monitoring/runtime_statistics_aggregator.ts
rename to x-pack/plugins/task_manager/server/lib/runtime_statistics_aggregator.ts
diff --git a/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts b/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts
new file mode 100644
index 0000000000000..9671698329447
--- /dev/null
+++ b/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts
@@ -0,0 +1,1070 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import sinon from 'sinon';
+import { Subject, Observable } from 'rxjs';
+import { take, bufferCount, skip } from 'rxjs/operators';
+import { isTaskPollingCycleEvent, isTaskRunEvent } from '../task_events';
+import { TaskLifecycleEvent } from '../polling_lifecycle';
+import { AggregatedStat } from '../lib/runtime_statistics_aggregator';
+import { taskPollingLifecycleMock } from '../polling_lifecycle.mock';
+import { TaskManagerConfig } from '../config';
+import { createAggregator } from './create_aggregator';
+import { TaskClaimMetric, TaskClaimMetricsAggregator } from './task_claim_metrics_aggregator';
+import { taskClaimFailureEvent, taskClaimSuccessEvent } from './task_claim_metrics_aggregator.test';
+import { getTaskRunFailedEvent, getTaskRunSuccessEvent } from './task_run_metrics_aggregator.test';
+import { TaskRunMetric, TaskRunMetricsAggregator } from './task_run_metrics_aggregator';
+import * as TaskClaimMetricsAggregatorModule from './task_claim_metrics_aggregator';
+import { metricsAggregatorMock } from './metrics_aggregator.mock';
+
+const mockMetricsAggregator = metricsAggregatorMock.create();
+const config: TaskManagerConfig = {
+ allow_reading_invalid_state: false,
+ ephemeral_tasks: {
+ enabled: true,
+ request_capacity: 10,
+ },
+ event_loop_delay: {
+ monitor: true,
+ warn_threshold: 5000,
+ },
+ max_attempts: 9,
+ max_workers: 10,
+ metrics_reset_interval: 30000,
+ monitored_aggregated_stats_refresh_rate: 5000,
+ monitored_stats_health_verbose_log: {
+ enabled: false,
+ level: 'debug' as const,
+ warn_delayed_task_start_in_seconds: 60,
+ },
+ monitored_stats_required_freshness: 6000000,
+ monitored_stats_running_average_window: 50,
+ monitored_task_execution_thresholds: {
+ custom: {},
+ default: {
+ error_threshold: 90,
+ warn_threshold: 80,
+ },
+ },
+ poll_interval: 6000000,
+ request_capacity: 1000,
+ requeue_invalid_tasks: {
+ enabled: false,
+ delay: 3000,
+ max_attempts: 20,
+ },
+ unsafe: {
+ authenticate_background_task_utilization: true,
+ exclude_task_types: [],
+ },
+ version_conflict_threshold: 80,
+ worker_utilization_running_average_window: 5,
+};
+
+describe('createAggregator', () => {
+ beforeEach(() => {
+ jest.resetAllMocks();
+ });
+
+ describe('with TaskClaimMetricsAggregator', () => {
+ test('returns a cumulative count of successful polling cycles and total polling cycles', async () => {
+ const pollingCycleEvents = [
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimFailureEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimFailureEvent,
+ taskClaimSuccessEvent,
+ ];
+ const events$ = new Subject();
+ const taskPollingLifecycle = taskPollingLifecycleMock.create({
+ events$: events$ as Observable,
+ });
+
+ const taskClaimAggregator = createAggregator({
+ key: 'task_claim',
+ taskPollingLifecycle,
+ config,
+ resetMetrics$: new Subject(),
+ taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskPollingCycleEvent(taskEvent),
+ metricsAggregator: new TaskClaimMetricsAggregator(),
+ });
+
+ return new Promise((resolve) => {
+ taskClaimAggregator
+ .pipe(
+ // skip initial metric which is just initialized data which
+ // ensures we don't stall on combineLatest
+ skip(1),
+ take(pollingCycleEvents.length),
+ bufferCount(pollingCycleEvents.length)
+ )
+ .subscribe((metrics: Array>) => {
+ expect(metrics[0]).toEqual({
+ key: 'task_claim',
+ value: { success: 1, total: 1, duration: { counts: [1], values: [100] } },
+ });
+ expect(metrics[1]).toEqual({
+ key: 'task_claim',
+ value: { success: 2, total: 2, duration: { counts: [2], values: [100] } },
+ });
+ expect(metrics[2]).toEqual({
+ key: 'task_claim',
+ value: { success: 3, total: 3, duration: { counts: [3], values: [100] } },
+ });
+ expect(metrics[3]).toEqual({
+ key: 'task_claim',
+ value: { success: 4, total: 4, duration: { counts: [4], values: [100] } },
+ });
+ expect(metrics[4]).toEqual({
+ key: 'task_claim',
+ value: { success: 4, total: 5, duration: { counts: [4], values: [100] } },
+ });
+ expect(metrics[5]).toEqual({
+ key: 'task_claim',
+ value: { success: 5, total: 6, duration: { counts: [5], values: [100] } },
+ });
+ expect(metrics[6]).toEqual({
+ key: 'task_claim',
+ value: { success: 6, total: 7, duration: { counts: [6], values: [100] } },
+ });
+ expect(metrics[7]).toEqual({
+ key: 'task_claim',
+ value: { success: 7, total: 8, duration: { counts: [7], values: [100] } },
+ });
+ expect(metrics[8]).toEqual({
+ key: 'task_claim',
+ value: { success: 8, total: 9, duration: { counts: [8], values: [100] } },
+ });
+ expect(metrics[9]).toEqual({
+ key: 'task_claim',
+ value: { success: 8, total: 10, duration: { counts: [8], values: [100] } },
+ });
+ expect(metrics[10]).toEqual({
+ key: 'task_claim',
+ value: { success: 9, total: 11, duration: { counts: [9], values: [100] } },
+ });
+ resolve();
+ });
+
+ for (const event of pollingCycleEvents) {
+ events$.next(event);
+ }
+ });
+ });
+
+ test('resets count when resetMetric$ event is received', async () => {
+ const resetMetrics$ = new Subject();
+ const pollingCycleEvents1 = [
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimFailureEvent,
+ taskClaimSuccessEvent,
+ ];
+
+ const pollingCycleEvents2 = [
+ taskClaimSuccessEvent,
+ taskClaimFailureEvent,
+ taskClaimFailureEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ ];
+ const events$ = new Subject();
+ const taskPollingLifecycle = taskPollingLifecycleMock.create({
+ events$: events$ as Observable,
+ });
+
+ const taskClaimAggregator = createAggregator({
+ key: 'task_claim',
+ taskPollingLifecycle,
+ config,
+ resetMetrics$,
+ taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskPollingCycleEvent(taskEvent),
+ metricsAggregator: new TaskClaimMetricsAggregator(),
+ });
+
+ return new Promise((resolve) => {
+ taskClaimAggregator
+ .pipe(
+ // skip initial metric which is just initialized data which
+ // ensures we don't stall on combineLatest
+ skip(1),
+ take(pollingCycleEvents1.length + pollingCycleEvents2.length),
+ bufferCount(pollingCycleEvents1.length + pollingCycleEvents2.length)
+ )
+ .subscribe((metrics: Array>) => {
+ expect(metrics[0]).toEqual({
+ key: 'task_claim',
+ value: { success: 1, total: 1, duration: { counts: [1], values: [100] } },
+ });
+ expect(metrics[1]).toEqual({
+ key: 'task_claim',
+ value: { success: 2, total: 2, duration: { counts: [2], values: [100] } },
+ });
+ expect(metrics[2]).toEqual({
+ key: 'task_claim',
+ value: { success: 3, total: 3, duration: { counts: [3], values: [100] } },
+ });
+ expect(metrics[3]).toEqual({
+ key: 'task_claim',
+ value: { success: 4, total: 4, duration: { counts: [4], values: [100] } },
+ });
+ expect(metrics[4]).toEqual({
+ key: 'task_claim',
+ value: { success: 4, total: 5, duration: { counts: [4], values: [100] } },
+ });
+ expect(metrics[5]).toEqual({
+ key: 'task_claim',
+ value: { success: 5, total: 6, duration: { counts: [5], values: [100] } },
+ });
+ // reset event should have been received here
+ expect(metrics[6]).toEqual({
+ key: 'task_claim',
+ value: { success: 1, total: 1, duration: { counts: [1], values: [100] } },
+ });
+ expect(metrics[7]).toEqual({
+ key: 'task_claim',
+ value: { success: 1, total: 2, duration: { counts: [1], values: [100] } },
+ });
+ expect(metrics[8]).toEqual({
+ key: 'task_claim',
+ value: { success: 1, total: 3, duration: { counts: [1], values: [100] } },
+ });
+ expect(metrics[9]).toEqual({
+ key: 'task_claim',
+ value: { success: 2, total: 4, duration: { counts: [2], values: [100] } },
+ });
+ expect(metrics[10]).toEqual({
+ key: 'task_claim',
+ value: { success: 3, total: 5, duration: { counts: [3], values: [100] } },
+ });
+ resolve();
+ });
+
+ for (const event of pollingCycleEvents1) {
+ events$.next(event);
+ }
+ resetMetrics$.next(true);
+ for (const event of pollingCycleEvents2) {
+ events$.next(event);
+ }
+ });
+ });
+
+ test('resets count when configured metrics reset interval expires', async () => {
+ const clock = sinon.useFakeTimers();
+ clock.tick(0);
+ const pollingCycleEvents1 = [
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimFailureEvent,
+ taskClaimSuccessEvent,
+ ];
+
+ const pollingCycleEvents2 = [
+ taskClaimSuccessEvent,
+ taskClaimFailureEvent,
+ taskClaimFailureEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ ];
+ const events$ = new Subject();
+ const taskPollingLifecycle = taskPollingLifecycleMock.create({
+ events$: events$ as Observable,
+ });
+
+ const taskClaimAggregator = createAggregator({
+ key: 'task_claim',
+ taskPollingLifecycle,
+ config: {
+ ...config,
+ metrics_reset_interval: 10,
+ },
+ resetMetrics$: new Subject(),
+ taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskPollingCycleEvent(taskEvent),
+ metricsAggregator: new TaskClaimMetricsAggregator(),
+ });
+
+ return new Promise((resolve) => {
+ taskClaimAggregator
+ .pipe(
+ // skip initial metric which is just initialized data which
+ // ensures we don't stall on combineLatest
+ skip(1),
+ take(pollingCycleEvents1.length + pollingCycleEvents2.length),
+ bufferCount(pollingCycleEvents1.length + pollingCycleEvents2.length)
+ )
+ .subscribe((metrics: Array>) => {
+ expect(metrics[0]).toEqual({
+ key: 'task_claim',
+ value: { success: 1, total: 1, duration: { counts: [1], values: [100] } },
+ });
+ expect(metrics[1]).toEqual({
+ key: 'task_claim',
+ value: { success: 2, total: 2, duration: { counts: [2], values: [100] } },
+ });
+ expect(metrics[2]).toEqual({
+ key: 'task_claim',
+ value: { success: 3, total: 3, duration: { counts: [3], values: [100] } },
+ });
+ expect(metrics[3]).toEqual({
+ key: 'task_claim',
+ value: { success: 4, total: 4, duration: { counts: [4], values: [100] } },
+ });
+ expect(metrics[4]).toEqual({
+ key: 'task_claim',
+ value: { success: 4, total: 5, duration: { counts: [4], values: [100] } },
+ });
+ expect(metrics[5]).toEqual({
+ key: 'task_claim',
+ value: { success: 5, total: 6, duration: { counts: [5], values: [100] } },
+ });
+ // reset interval should have fired here
+ expect(metrics[6]).toEqual({
+ key: 'task_claim',
+ value: { success: 1, total: 1, duration: { counts: [1], values: [100] } },
+ });
+ expect(metrics[7]).toEqual({
+ key: 'task_claim',
+ value: { success: 1, total: 2, duration: { counts: [1], values: [100] } },
+ });
+ expect(metrics[8]).toEqual({
+ key: 'task_claim',
+ value: { success: 1, total: 3, duration: { counts: [1], values: [100] } },
+ });
+ expect(metrics[9]).toEqual({
+ key: 'task_claim',
+ value: { success: 2, total: 4, duration: { counts: [2], values: [100] } },
+ });
+ expect(metrics[10]).toEqual({
+ key: 'task_claim',
+ value: { success: 3, total: 5, duration: { counts: [3], values: [100] } },
+ });
+ resolve();
+ });
+
+ for (const event of pollingCycleEvents1) {
+ events$.next(event);
+ }
+ clock.tick(20);
+ for (const event of pollingCycleEvents2) {
+ events$.next(event);
+ }
+
+ clock.restore();
+ });
+ });
+ });
+
+ describe('with TaskRunMetricsAggregator', () => {
+ test('returns a cumulative count of successful task runs and total task runs, broken down by type', async () => {
+ const taskRunEvents = [
+ getTaskRunSuccessEvent('alerting:example'),
+ getTaskRunSuccessEvent('telemetry'),
+ getTaskRunSuccessEvent('alerting:example'),
+ getTaskRunSuccessEvent('report'),
+ getTaskRunFailedEvent('alerting:example'),
+ getTaskRunSuccessEvent('alerting:.index-threshold'),
+ getTaskRunSuccessEvent('alerting:example'),
+ getTaskRunFailedEvent('alerting:example'),
+ getTaskRunSuccessEvent('alerting:example'),
+ getTaskRunFailedEvent('actions:webhook'),
+ ];
+ const events$ = new Subject();
+ const taskPollingLifecycle = taskPollingLifecycleMock.create({
+ events$: events$ as Observable,
+ });
+
+ const taskRunAggregator = createAggregator({
+ key: 'task_run',
+ taskPollingLifecycle,
+ config,
+ resetMetrics$: new Subject(),
+ taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskRunEvent(taskEvent),
+ metricsAggregator: new TaskRunMetricsAggregator(),
+ });
+
+ return new Promise((resolve) => {
+ taskRunAggregator
+ .pipe(
+ // skip initial metric which is just initialized data which
+ // ensures we don't stall on combineLatest
+ skip(1),
+ take(taskRunEvents.length),
+ bufferCount(taskRunEvents.length)
+ )
+ .subscribe((metrics: Array>) => {
+ expect(metrics[0]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 1, total: 1 },
+ by_type: {
+ alerting: { success: 1, total: 1 },
+ 'alerting:example': { success: 1, total: 1 },
+ },
+ },
+ });
+ expect(metrics[1]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 2, total: 2 },
+ by_type: {
+ alerting: { success: 1, total: 1 },
+ 'alerting:example': { success: 1, total: 1 },
+ telemetry: { success: 1, total: 1 },
+ },
+ },
+ });
+ expect(metrics[2]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 3, total: 3 },
+ by_type: {
+ alerting: { success: 2, total: 2 },
+ 'alerting:example': { success: 2, total: 2 },
+ telemetry: { success: 1, total: 1 },
+ },
+ },
+ });
+ expect(metrics[3]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 4, total: 4 },
+ by_type: {
+ alerting: { success: 2, total: 2 },
+ 'alerting:example': { success: 2, total: 2 },
+ report: { success: 1, total: 1 },
+ telemetry: { success: 1, total: 1 },
+ },
+ },
+ });
+ expect(metrics[4]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 4, total: 5 },
+ by_type: {
+ alerting: { success: 2, total: 3 },
+ 'alerting:example': { success: 2, total: 3 },
+ report: { success: 1, total: 1 },
+ telemetry: { success: 1, total: 1 },
+ },
+ },
+ });
+ expect(metrics[5]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 5, total: 6 },
+ by_type: {
+ alerting: { success: 3, total: 4 },
+ 'alerting:.index-threshold': { success: 1, total: 1 },
+ 'alerting:example': { success: 2, total: 3 },
+ report: { success: 1, total: 1 },
+ telemetry: { success: 1, total: 1 },
+ },
+ },
+ });
+ expect(metrics[6]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 6, total: 7 },
+ by_type: {
+ alerting: { success: 4, total: 5 },
+ 'alerting:.index-threshold': { success: 1, total: 1 },
+ 'alerting:example': { success: 3, total: 4 },
+ report: { success: 1, total: 1 },
+ telemetry: { success: 1, total: 1 },
+ },
+ },
+ });
+ expect(metrics[7]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 6, total: 8 },
+ by_type: {
+ alerting: { success: 4, total: 6 },
+ 'alerting:.index-threshold': { success: 1, total: 1 },
+ 'alerting:example': { success: 3, total: 5 },
+ report: { success: 1, total: 1 },
+ telemetry: { success: 1, total: 1 },
+ },
+ },
+ });
+ expect(metrics[8]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 7, total: 9 },
+ by_type: {
+ alerting: { success: 5, total: 7 },
+ 'alerting:.index-threshold': { success: 1, total: 1 },
+ 'alerting:example': { success: 4, total: 6 },
+ report: { success: 1, total: 1 },
+ telemetry: { success: 1, total: 1 },
+ },
+ },
+ });
+ expect(metrics[9]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 7, total: 10 },
+ by_type: {
+ actions: { success: 0, total: 1 },
+ alerting: { success: 5, total: 7 },
+ 'actions:webhook': { success: 0, total: 1 },
+ 'alerting:.index-threshold': { success: 1, total: 1 },
+ 'alerting:example': { success: 4, total: 6 },
+ report: { success: 1, total: 1 },
+ telemetry: { success: 1, total: 1 },
+ },
+ },
+ });
+ resolve();
+ });
+
+ for (const event of taskRunEvents) {
+ events$.next(event);
+ }
+ });
+ });
+
+ test('resets count when resetMetric$ event is received', async () => {
+ const resetMetrics$ = new Subject();
+ const taskRunEvents1 = [
+ getTaskRunSuccessEvent('alerting:example'),
+ getTaskRunSuccessEvent('telemetry'),
+ getTaskRunSuccessEvent('alerting:example'),
+ getTaskRunSuccessEvent('report'),
+ getTaskRunFailedEvent('alerting:example'),
+ ];
+
+ const taskRunEvents2 = [
+ getTaskRunSuccessEvent('alerting:example'),
+ getTaskRunSuccessEvent('alerting:example'),
+ getTaskRunFailedEvent('alerting:example'),
+ getTaskRunSuccessEvent('alerting:example'),
+ getTaskRunFailedEvent('actions:webhook'),
+ ];
+ const events$ = new Subject();
+ const taskPollingLifecycle = taskPollingLifecycleMock.create({
+ events$: events$ as Observable,
+ });
+
+ const taskRunAggregator = createAggregator({
+ key: 'task_run',
+ taskPollingLifecycle,
+ config,
+ resetMetrics$,
+ taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskRunEvent(taskEvent),
+ metricsAggregator: new TaskRunMetricsAggregator(),
+ });
+
+ return new Promise((resolve) => {
+ taskRunAggregator
+ .pipe(
+ // skip initial metric which is just initialized data which
+ // ensures we don't stall on combineLatest
+ skip(1),
+ take(taskRunEvents1.length + taskRunEvents2.length),
+ bufferCount(taskRunEvents1.length + taskRunEvents2.length)
+ )
+ .subscribe((metrics: Array>) => {
+ expect(metrics[0]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 1, total: 1 },
+ by_type: {
+ alerting: { success: 1, total: 1 },
+ 'alerting:example': { success: 1, total: 1 },
+ },
+ },
+ });
+ expect(metrics[1]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 2, total: 2 },
+ by_type: {
+ alerting: { success: 1, total: 1 },
+ 'alerting:example': { success: 1, total: 1 },
+ telemetry: { success: 1, total: 1 },
+ },
+ },
+ });
+ expect(metrics[2]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 3, total: 3 },
+ by_type: {
+ alerting: { success: 2, total: 2 },
+ 'alerting:example': { success: 2, total: 2 },
+ telemetry: { success: 1, total: 1 },
+ },
+ },
+ });
+ expect(metrics[3]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 4, total: 4 },
+ by_type: {
+ alerting: { success: 2, total: 2 },
+ 'alerting:example': { success: 2, total: 2 },
+ report: { success: 1, total: 1 },
+ telemetry: { success: 1, total: 1 },
+ },
+ },
+ });
+ expect(metrics[4]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 4, total: 5 },
+ by_type: {
+ alerting: { success: 2, total: 3 },
+ 'alerting:example': { success: 2, total: 3 },
+ report: { success: 1, total: 1 },
+ telemetry: { success: 1, total: 1 },
+ },
+ },
+ });
+ // reset event should have been received here
+ expect(metrics[5]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 1, total: 1 },
+ by_type: {
+ alerting: { success: 1, total: 1 },
+ 'alerting:example': { success: 1, total: 1 },
+ report: { success: 0, total: 0 },
+ telemetry: { success: 0, total: 0 },
+ },
+ },
+ });
+ expect(metrics[6]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 2, total: 2 },
+ by_type: {
+ alerting: { success: 2, total: 2 },
+ 'alerting:example': { success: 2, total: 2 },
+ report: { success: 0, total: 0 },
+ telemetry: { success: 0, total: 0 },
+ },
+ },
+ });
+ expect(metrics[7]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 2, total: 3 },
+ by_type: {
+ alerting: { success: 2, total: 3 },
+ 'alerting:example': { success: 2, total: 3 },
+ report: { success: 0, total: 0 },
+ telemetry: { success: 0, total: 0 },
+ },
+ },
+ });
+ expect(metrics[8]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 3, total: 4 },
+ by_type: {
+ alerting: { success: 3, total: 4 },
+ 'alerting:example': { success: 3, total: 4 },
+ report: { success: 0, total: 0 },
+ telemetry: { success: 0, total: 0 },
+ },
+ },
+ });
+ expect(metrics[9]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 3, total: 5 },
+ by_type: {
+ actions: { success: 0, total: 1 },
+ alerting: { success: 3, total: 4 },
+ 'actions:webhook': { success: 0, total: 1 },
+ 'alerting:example': { success: 3, total: 4 },
+ report: { success: 0, total: 0 },
+ telemetry: { success: 0, total: 0 },
+ },
+ },
+ });
+ resolve();
+ });
+
+ for (const event of taskRunEvents1) {
+ events$.next(event);
+ }
+ resetMetrics$.next(true);
+ for (const event of taskRunEvents2) {
+ events$.next(event);
+ }
+ });
+ });
+
+ test('resets count when configured metrics reset interval expires', async () => {
+ const clock = sinon.useFakeTimers();
+ clock.tick(0);
+ const taskRunEvents1 = [
+ getTaskRunSuccessEvent('alerting:example'),
+ getTaskRunSuccessEvent('telemetry'),
+ getTaskRunSuccessEvent('alerting:example'),
+ getTaskRunSuccessEvent('report'),
+ getTaskRunFailedEvent('alerting:example'),
+ ];
+
+ const taskRunEvents2 = [
+ getTaskRunSuccessEvent('alerting:example'),
+ getTaskRunSuccessEvent('alerting:example'),
+ getTaskRunFailedEvent('alerting:example'),
+ getTaskRunSuccessEvent('alerting:example'),
+ getTaskRunFailedEvent('actions:webhook'),
+ ];
+ const events$ = new Subject();
+ const taskPollingLifecycle = taskPollingLifecycleMock.create({
+ events$: events$ as Observable,
+ });
+
+ const taskRunAggregator = createAggregator({
+ key: 'task_run',
+ taskPollingLifecycle,
+ config: {
+ ...config,
+ metrics_reset_interval: 10,
+ },
+ resetMetrics$: new Subject(),
+ taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskRunEvent(taskEvent),
+ metricsAggregator: new TaskRunMetricsAggregator(),
+ });
+
+ return new Promise((resolve) => {
+ taskRunAggregator
+ .pipe(
+ // skip initial metric which is just initialized data which
+ // ensures we don't stall on combineLatest
+ skip(1),
+ take(taskRunEvents1.length + taskRunEvents2.length),
+ bufferCount(taskRunEvents1.length + taskRunEvents2.length)
+ )
+ .subscribe((metrics: Array>) => {
+ expect(metrics[0]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 1, total: 1 },
+ by_type: {
+ alerting: { success: 1, total: 1 },
+ 'alerting:example': { success: 1, total: 1 },
+ },
+ },
+ });
+ expect(metrics[1]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 2, total: 2 },
+ by_type: {
+ alerting: { success: 1, total: 1 },
+ 'alerting:example': { success: 1, total: 1 },
+ telemetry: { success: 1, total: 1 },
+ },
+ },
+ });
+ expect(metrics[2]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 3, total: 3 },
+ by_type: {
+ alerting: { success: 2, total: 2 },
+ 'alerting:example': { success: 2, total: 2 },
+ telemetry: { success: 1, total: 1 },
+ },
+ },
+ });
+ expect(metrics[3]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 4, total: 4 },
+ by_type: {
+ alerting: { success: 2, total: 2 },
+ 'alerting:example': { success: 2, total: 2 },
+ report: { success: 1, total: 1 },
+ telemetry: { success: 1, total: 1 },
+ },
+ },
+ });
+ expect(metrics[4]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 4, total: 5 },
+ by_type: {
+ alerting: { success: 2, total: 3 },
+ 'alerting:example': { success: 2, total: 3 },
+ report: { success: 1, total: 1 },
+ telemetry: { success: 1, total: 1 },
+ },
+ },
+ });
+ // reset event should have been received here
+ expect(metrics[5]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 1, total: 1 },
+ by_type: {
+ alerting: { success: 1, total: 1 },
+ 'alerting:example': { success: 1, total: 1 },
+ report: { success: 0, total: 0 },
+ telemetry: { success: 0, total: 0 },
+ },
+ },
+ });
+ expect(metrics[6]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 2, total: 2 },
+ by_type: {
+ alerting: { success: 2, total: 2 },
+ 'alerting:example': { success: 2, total: 2 },
+ report: { success: 0, total: 0 },
+ telemetry: { success: 0, total: 0 },
+ },
+ },
+ });
+ expect(metrics[7]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 2, total: 3 },
+ by_type: {
+ alerting: { success: 2, total: 3 },
+ 'alerting:example': { success: 2, total: 3 },
+ report: { success: 0, total: 0 },
+ telemetry: { success: 0, total: 0 },
+ },
+ },
+ });
+ expect(metrics[8]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 3, total: 4 },
+ by_type: {
+ alerting: { success: 3, total: 4 },
+ 'alerting:example': { success: 3, total: 4 },
+ report: { success: 0, total: 0 },
+ telemetry: { success: 0, total: 0 },
+ },
+ },
+ });
+ expect(metrics[9]).toEqual({
+ key: 'task_run',
+ value: {
+ overall: { success: 3, total: 5 },
+ by_type: {
+ actions: { success: 0, total: 1 },
+ alerting: { success: 3, total: 4 },
+ 'actions:webhook': { success: 0, total: 1 },
+ 'alerting:example': { success: 3, total: 4 },
+ report: { success: 0, total: 0 },
+ telemetry: { success: 0, total: 0 },
+ },
+ },
+ });
+ resolve();
+ });
+
+ for (const event of taskRunEvents1) {
+ events$.next(event);
+ }
+ clock.tick(20);
+ for (const event of taskRunEvents2) {
+ events$.next(event);
+ }
+
+ clock.restore();
+ });
+ });
+ });
+
+ test('should filter task lifecycle events using specified taskEventFilter', () => {
+ const pollingCycleEvents = [
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimFailureEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimFailureEvent,
+ taskClaimSuccessEvent,
+ ];
+ const taskEventFilter = jest.fn().mockReturnValue(true);
+ const events$ = new Subject();
+ const taskPollingLifecycle = taskPollingLifecycleMock.create({
+ events$: events$ as Observable,
+ });
+ const aggregator = createAggregator({
+ key: 'test',
+ taskPollingLifecycle,
+ config,
+ resetMetrics$: new Subject(),
+ taskEventFilter,
+ metricsAggregator: new TaskClaimMetricsAggregator(),
+ });
+
+ return new Promise((resolve) => {
+ aggregator
+ .pipe(
+ // skip initial metric which is just initialized data which
+ // ensures we don't stall on combineLatest
+ skip(1),
+ take(pollingCycleEvents.length),
+ bufferCount(pollingCycleEvents.length)
+ )
+ .subscribe(() => {
+ resolve();
+ });
+
+ for (const event of pollingCycleEvents) {
+ events$.next(event);
+ }
+
+ expect(taskEventFilter).toHaveBeenCalledTimes(pollingCycleEvents.length);
+ });
+ });
+
+ test('should call metricAggregator to process task lifecycle events', () => {
+ const spy = jest
+ .spyOn(TaskClaimMetricsAggregatorModule, 'TaskClaimMetricsAggregator')
+ .mockImplementation(() => mockMetricsAggregator);
+
+ const pollingCycleEvents = [
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimFailureEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimFailureEvent,
+ taskClaimSuccessEvent,
+ ];
+ const taskEventFilter = jest.fn().mockReturnValue(true);
+ const events$ = new Subject();
+ const taskPollingLifecycle = taskPollingLifecycleMock.create({
+ events$: events$ as Observable,
+ });
+ const aggregator = createAggregator({
+ key: 'test',
+ taskPollingLifecycle,
+ config,
+ resetMetrics$: new Subject(),
+ taskEventFilter,
+ metricsAggregator: mockMetricsAggregator,
+ });
+
+ return new Promise((resolve) => {
+ aggregator
+ .pipe(
+ // skip initial metric which is just initialized data which
+ // ensures we don't stall on combineLatest
+ skip(1),
+ take(pollingCycleEvents.length),
+ bufferCount(pollingCycleEvents.length)
+ )
+ .subscribe(() => {
+ resolve();
+ });
+
+ for (const event of pollingCycleEvents) {
+ events$.next(event);
+ }
+
+ expect(mockMetricsAggregator.initialMetric).toHaveBeenCalledTimes(1);
+ expect(mockMetricsAggregator.processTaskLifecycleEvent).toHaveBeenCalledTimes(
+ pollingCycleEvents.length
+ );
+ expect(mockMetricsAggregator.collect).toHaveBeenCalledTimes(pollingCycleEvents.length);
+ expect(mockMetricsAggregator.reset).not.toHaveBeenCalled();
+ spy.mockRestore();
+ });
+ });
+
+ test('should call metricAggregator reset when resetMetric$ event is received', () => {
+ const spy = jest
+ .spyOn(TaskClaimMetricsAggregatorModule, 'TaskClaimMetricsAggregator')
+ .mockImplementation(() => mockMetricsAggregator);
+
+ const resetMetrics$ = new Subject();
+ const pollingCycleEvents = [
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimFailureEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimSuccessEvent,
+ taskClaimFailureEvent,
+ taskClaimSuccessEvent,
+ ];
+ const taskEventFilter = jest.fn().mockReturnValue(true);
+ const events$ = new Subject();
+ const taskPollingLifecycle = taskPollingLifecycleMock.create({
+ events$: events$ as Observable,
+ });
+ const aggregator = createAggregator({
+ key: 'test',
+ taskPollingLifecycle,
+ config,
+ resetMetrics$,
+ taskEventFilter,
+ metricsAggregator: mockMetricsAggregator,
+ });
+
+ return new Promise((resolve) => {
+ aggregator
+ .pipe(
+ // skip initial metric which is just initialized data which
+ // ensures we don't stall on combineLatest
+ skip(1),
+ take(pollingCycleEvents.length),
+ bufferCount(pollingCycleEvents.length)
+ )
+ .subscribe(() => {
+ resolve();
+ });
+
+ for (const event of pollingCycleEvents) {
+ events$.next(event);
+ }
+
+ for (let i = 0; i < 5; i++) {
+ events$.next(pollingCycleEvents[i]);
+ }
+ resetMetrics$.next(true);
+ for (let i = 0; i < pollingCycleEvents.length; i++) {
+ events$.next(pollingCycleEvents[i]);
+ }
+
+ expect(mockMetricsAggregator.initialMetric).toHaveBeenCalledTimes(1);
+ expect(mockMetricsAggregator.processTaskLifecycleEvent).toHaveBeenCalledTimes(
+ pollingCycleEvents.length
+ );
+ expect(mockMetricsAggregator.collect).toHaveBeenCalledTimes(pollingCycleEvents.length);
+ expect(mockMetricsAggregator.reset).toHaveBeenCalledTimes(1);
+ spy.mockRestore();
+ });
+ });
+});
diff --git a/x-pack/plugins/task_manager/server/metrics/create_aggregator.ts b/x-pack/plugins/task_manager/server/metrics/create_aggregator.ts
new file mode 100644
index 0000000000000..cece8c0f70b23
--- /dev/null
+++ b/x-pack/plugins/task_manager/server/metrics/create_aggregator.ts
@@ -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 { combineLatest, filter, interval, map, merge, Observable, startWith } from 'rxjs';
+import { JsonValue } from '@kbn/utility-types';
+import { TaskLifecycleEvent, TaskPollingLifecycle } from '../polling_lifecycle';
+import { AggregatedStat, AggregatedStatProvider } from '../lib/runtime_statistics_aggregator';
+import { TaskManagerConfig } from '../config';
+import { ITaskMetricsAggregator } from './types';
+
+export interface CreateMetricsAggregatorOpts {
+ key: string;
+ config: TaskManagerConfig;
+ resetMetrics$: Observable;
+ taskPollingLifecycle: TaskPollingLifecycle;
+ taskEventFilter: (taskEvent: TaskLifecycleEvent) => boolean;
+ metricsAggregator: ITaskMetricsAggregator;
+}
+
+export function createAggregator({
+ key,
+ taskPollingLifecycle,
+ config,
+ resetMetrics$,
+ taskEventFilter,
+ metricsAggregator,
+}: CreateMetricsAggregatorOpts): AggregatedStatProvider {
+ // Resets the aggregators either when the reset interval has passed or
+ // a resetMetrics$ event is received
+ merge(
+ interval(config.metrics_reset_interval).pipe(map(() => true)),
+ resetMetrics$.pipe(map(() => true))
+ ).subscribe(() => {
+ metricsAggregator.reset();
+ });
+
+ const taskEvents$: Observable = taskPollingLifecycle.events.pipe(
+ filter((taskEvent: TaskLifecycleEvent) => taskEventFilter(taskEvent)),
+ map((taskEvent: TaskLifecycleEvent) => {
+ metricsAggregator.processTaskLifecycleEvent(taskEvent);
+ return metricsAggregator.collect();
+ })
+ );
+
+ return combineLatest([taskEvents$.pipe(startWith(metricsAggregator.initialMetric()))]).pipe(
+ map(([value]: [T]) => {
+ return {
+ key,
+ value,
+ } as AggregatedStat;
+ })
+ );
+}
diff --git a/x-pack/plugins/task_manager/server/metrics/index.ts b/x-pack/plugins/task_manager/server/metrics/index.ts
new file mode 100644
index 0000000000000..5e2a73f91dd73
--- /dev/null
+++ b/x-pack/plugins/task_manager/server/metrics/index.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 { Observable } from 'rxjs';
+import { TaskManagerConfig } from '../config';
+import { Metrics, createMetricsAggregators, createMetricsStream } from './metrics_stream';
+import { TaskPollingLifecycle } from '../polling_lifecycle';
+export type { Metrics } from './metrics_stream';
+
+export function metricsStream(
+ config: TaskManagerConfig,
+ resetMetrics$: Observable,
+ taskPollingLifecycle?: TaskPollingLifecycle
+): Observable {
+ return createMetricsStream(
+ createMetricsAggregators({
+ config,
+ resetMetrics$,
+ taskPollingLifecycle,
+ })
+ );
+}
diff --git a/x-pack/plugins/task_manager/server/metrics/metrics_aggregator.mock.ts b/x-pack/plugins/task_manager/server/metrics/metrics_aggregator.mock.ts
new file mode 100644
index 0000000000000..691ba9d0290d2
--- /dev/null
+++ b/x-pack/plugins/task_manager/server/metrics/metrics_aggregator.mock.ts
@@ -0,0 +1,21 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+export const createIMetricsAggregatorMock = () => {
+ return jest.fn().mockImplementation(() => {
+ return {
+ initialMetric: jest.fn().mockReturnValue({ count: 0 }),
+ reset: jest.fn(),
+ collect: jest.fn(),
+ processTaskLifecycleEvent: jest.fn(),
+ };
+ });
+};
+
+export const metricsAggregatorMock = {
+ create: createIMetricsAggregatorMock(),
+};
diff --git a/x-pack/plugins/task_manager/server/metrics/metrics_stream.test.ts b/x-pack/plugins/task_manager/server/metrics/metrics_stream.test.ts
new file mode 100644
index 0000000000000..5aec856a7a4f0
--- /dev/null
+++ b/x-pack/plugins/task_manager/server/metrics/metrics_stream.test.ts
@@ -0,0 +1,89 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { Subject } from 'rxjs';
+import { take, bufferCount } from 'rxjs/operators';
+import { createMetricsStream } from './metrics_stream';
+import { JsonValue } from '@kbn/utility-types';
+import { AggregatedStat } from '../lib/runtime_statistics_aggregator';
+
+beforeEach(() => {
+ jest.resetAllMocks();
+});
+
+describe('createMetricsStream', () => {
+ it('incrementally updates the metrics returned by the endpoint', async () => {
+ const aggregatedStats$ = new Subject();
+
+ return new Promise((resolve) => {
+ createMetricsStream(aggregatedStats$)
+ .pipe(take(3), bufferCount(3))
+ .subscribe(([initialValue, secondValue, thirdValue]) => {
+ expect(initialValue.metrics).toMatchObject({
+ lastUpdate: expect.any(String),
+ metrics: {},
+ });
+
+ expect(secondValue).toMatchObject({
+ lastUpdate: expect.any(String),
+ metrics: {
+ newAggregatedStat: {
+ timestamp: expect.any(String),
+ value: {
+ some: {
+ complex: {
+ value: 123,
+ },
+ },
+ },
+ },
+ },
+ });
+
+ expect(thirdValue).toMatchObject({
+ lastUpdate: expect.any(String),
+ metrics: {
+ newAggregatedStat: {
+ timestamp: expect.any(String),
+ value: {
+ some: {
+ updated: {
+ value: 456,
+ },
+ },
+ },
+ },
+ },
+ });
+ });
+
+ aggregatedStats$.next({
+ key: 'newAggregatedStat',
+ value: {
+ some: {
+ complex: {
+ value: 123,
+ },
+ },
+ } as JsonValue,
+ });
+
+ aggregatedStats$.next({
+ key: 'newAggregatedStat',
+ value: {
+ some: {
+ updated: {
+ value: 456,
+ },
+ },
+ } as JsonValue,
+ });
+
+ resolve();
+ });
+ });
+});
diff --git a/x-pack/plugins/task_manager/server/metrics/metrics_stream.ts b/x-pack/plugins/task_manager/server/metrics/metrics_stream.ts
new file mode 100644
index 0000000000000..29558308c5196
--- /dev/null
+++ b/x-pack/plugins/task_manager/server/metrics/metrics_stream.ts
@@ -0,0 +1,89 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { merge, of, Observable } from 'rxjs';
+import { map, scan } from 'rxjs/operators';
+import { set } from '@kbn/safer-lodash-set';
+import { TaskLifecycleEvent, TaskPollingLifecycle } from '../polling_lifecycle';
+import { TaskManagerConfig } from '../config';
+import { AggregatedStatProvider } from '../lib/runtime_statistics_aggregator';
+import { isTaskPollingCycleEvent, isTaskRunEvent } from '../task_events';
+import { TaskClaimMetric, TaskClaimMetricsAggregator } from './task_claim_metrics_aggregator';
+import { createAggregator } from './create_aggregator';
+import { TaskRunMetric, TaskRunMetricsAggregator } from './task_run_metrics_aggregator';
+export interface Metrics {
+ last_update: string;
+ metrics: {
+ task_claim?: Metric;
+ task_run?: Metric;
+ };
+}
+
+export interface Metric {
+ timestamp: string;
+ value: T;
+}
+
+interface CreateMetricsAggregatorsOpts {
+ config: TaskManagerConfig;
+ resetMetrics$: Observable;
+ taskPollingLifecycle?: TaskPollingLifecycle;
+}
+export function createMetricsAggregators({
+ config,
+ resetMetrics$,
+ taskPollingLifecycle,
+}: CreateMetricsAggregatorsOpts): AggregatedStatProvider {
+ const aggregators: AggregatedStatProvider[] = [];
+ if (taskPollingLifecycle) {
+ aggregators.push(
+ createAggregator({
+ key: 'task_claim',
+ taskPollingLifecycle,
+ config,
+ resetMetrics$,
+ taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskPollingCycleEvent(taskEvent),
+ metricsAggregator: new TaskClaimMetricsAggregator(),
+ }),
+ createAggregator({
+ key: 'task_run',
+ taskPollingLifecycle,
+ config,
+ resetMetrics$,
+ taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskRunEvent(taskEvent),
+ metricsAggregator: new TaskRunMetricsAggregator(),
+ })
+ );
+ }
+ return merge(...aggregators);
+}
+
+export function createMetricsStream(provider$: AggregatedStatProvider): Observable {
+ const initialMetrics = {
+ last_update: new Date().toISOString(),
+ metrics: {},
+ };
+ return merge(
+ // emit the initial metrics
+ of(initialMetrics),
+ // emit updated metrics whenever a provider updates a specific key on the stats
+ provider$.pipe(
+ map(({ key, value }) => {
+ return {
+ value: { timestamp: new Date().toISOString(), value },
+ key,
+ };
+ }),
+ scan((metrics: Metrics, { key, value }) => {
+ // incrementally merge stats as they come in
+ set(metrics.metrics, key, value);
+ metrics.last_update = new Date().toISOString();
+ return metrics;
+ }, initialMetrics)
+ )
+ );
+}
diff --git a/x-pack/plugins/task_manager/server/metrics/simple_histogram.test.ts b/x-pack/plugins/task_manager/server/metrics/simple_histogram.test.ts
new file mode 100644
index 0000000000000..30b5d0bd6b21a
--- /dev/null
+++ b/x-pack/plugins/task_manager/server/metrics/simple_histogram.test.ts
@@ -0,0 +1,179 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { SimpleHistogram } from './simple_histogram';
+
+describe('SimpleHistogram', () => {
+ test('should throw error when bucketSize is greater than range', () => {
+ expect(() => {
+ new SimpleHistogram(10, 100);
+ }).toThrowErrorMatchingInlineSnapshot(`"bucket size cannot be greater than value range"`);
+ });
+
+ test('should correctly initialize when bucketSize evenly divides range', () => {
+ const histogram = new SimpleHistogram(100, 10);
+ expect(histogram.get()).toEqual([
+ { value: 10, count: 0 },
+ { value: 20, count: 0 },
+ { value: 30, count: 0 },
+ { value: 40, count: 0 },
+ { value: 50, count: 0 },
+ { value: 60, count: 0 },
+ { value: 70, count: 0 },
+ { value: 80, count: 0 },
+ { value: 90, count: 0 },
+ { value: 100, count: 0 },
+ ]);
+ });
+
+ test('should correctly initialize when bucketSize does not evenly divides range', () => {
+ const histogram = new SimpleHistogram(100, 7);
+ expect(histogram.get()).toEqual([
+ { value: 7, count: 0 },
+ { value: 14, count: 0 },
+ { value: 21, count: 0 },
+ { value: 28, count: 0 },
+ { value: 35, count: 0 },
+ { value: 42, count: 0 },
+ { value: 49, count: 0 },
+ { value: 56, count: 0 },
+ { value: 63, count: 0 },
+ { value: 70, count: 0 },
+ { value: 77, count: 0 },
+ { value: 84, count: 0 },
+ { value: 91, count: 0 },
+ { value: 98, count: 0 },
+ { value: 105, count: 0 },
+ ]);
+ });
+
+ test('should correctly record values', () => {
+ const histogram = new SimpleHistogram(100, 10);
+ histogram.record(23);
+ histogram.record(34);
+ histogram.record(21);
+ histogram.record(56);
+ histogram.record(78);
+ histogram.record(33);
+ histogram.record(99);
+ histogram.record(1);
+ histogram.record(2);
+
+ expect(histogram.get()).toEqual([
+ { value: 10, count: 2 },
+ { value: 20, count: 0 },
+ { value: 30, count: 2 },
+ { value: 40, count: 2 },
+ { value: 50, count: 0 },
+ { value: 60, count: 1 },
+ { value: 70, count: 0 },
+ { value: 80, count: 1 },
+ { value: 90, count: 0 },
+ { value: 100, count: 1 },
+ ]);
+ });
+
+ test('should ignore values less than 0 and greater than max', () => {
+ const histogram = new SimpleHistogram(100, 10);
+ histogram.record(23);
+ histogram.record(34);
+ histogram.record(21);
+ histogram.record(56);
+ histogram.record(78);
+ histogram.record(33);
+ histogram.record(99);
+ histogram.record(1);
+ histogram.record(2);
+
+ const hist1 = histogram.get();
+
+ histogram.record(-1);
+ histogram.record(200);
+
+ expect(histogram.get()).toEqual(hist1);
+ });
+
+ test('should correctly reset values', () => {
+ const histogram = new SimpleHistogram(100, 10);
+ histogram.record(23);
+ histogram.record(34);
+ histogram.record(21);
+ histogram.record(56);
+ histogram.record(78);
+ histogram.record(33);
+ histogram.record(99);
+ histogram.record(1);
+ histogram.record(2);
+
+ expect(histogram.get()).toEqual([
+ { value: 10, count: 2 },
+ { value: 20, count: 0 },
+ { value: 30, count: 2 },
+ { value: 40, count: 2 },
+ { value: 50, count: 0 },
+ { value: 60, count: 1 },
+ { value: 70, count: 0 },
+ { value: 80, count: 1 },
+ { value: 90, count: 0 },
+ { value: 100, count: 1 },
+ ]);
+
+ histogram.reset();
+
+ expect(histogram.get()).toEqual([
+ { value: 10, count: 0 },
+ { value: 20, count: 0 },
+ { value: 30, count: 0 },
+ { value: 40, count: 0 },
+ { value: 50, count: 0 },
+ { value: 60, count: 0 },
+ { value: 70, count: 0 },
+ { value: 80, count: 0 },
+ { value: 90, count: 0 },
+ { value: 100, count: 0 },
+ ]);
+ });
+
+ test('should correctly truncate zero values', () => {
+ const histogram = new SimpleHistogram(100, 10);
+ histogram.record(23);
+ histogram.record(34);
+ histogram.record(21);
+ histogram.record(56);
+ histogram.record(33);
+ histogram.record(1);
+ histogram.record(2);
+
+ expect(histogram.get()).toEqual([
+ { value: 10, count: 2 },
+ { value: 20, count: 0 },
+ { value: 30, count: 2 },
+ { value: 40, count: 2 },
+ { value: 50, count: 0 },
+ { value: 60, count: 1 },
+ { value: 70, count: 0 },
+ { value: 80, count: 0 },
+ { value: 90, count: 0 },
+ { value: 100, count: 0 },
+ ]);
+
+ expect(histogram.get(true)).toEqual([
+ { value: 10, count: 2 },
+ { value: 20, count: 0 },
+ { value: 30, count: 2 },
+ { value: 40, count: 2 },
+ { value: 50, count: 0 },
+ { value: 60, count: 1 },
+ ]);
+ });
+
+ test('should correctly truncate zero values when all values are zero', () => {
+ const histogram = new SimpleHistogram(100, 10);
+
+ expect(histogram.get(true)).toEqual([]);
+ });
+});
diff --git a/x-pack/plugins/task_manager/server/metrics/simple_histogram.ts b/x-pack/plugins/task_manager/server/metrics/simple_histogram.ts
new file mode 100644
index 0000000000000..3b2cb89a7f5dd
--- /dev/null
+++ b/x-pack/plugins/task_manager/server/metrics/simple_histogram.ts
@@ -0,0 +1,82 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { last } from 'lodash';
+
+interface Bucket {
+ min: number; // inclusive
+ max: number; // exclusive
+ count: number;
+}
+
+export class SimpleHistogram {
+ private maxValue: number;
+ private bucketSize: number;
+ private histogramBuckets: Bucket[] = [];
+
+ constructor(max: number, bucketSize: number) {
+ if (bucketSize > max) {
+ throw new Error(`bucket size cannot be greater than value range`);
+ }
+
+ this.maxValue = max;
+ this.bucketSize = bucketSize;
+ this.initializeBuckets();
+ }
+
+ public reset() {
+ for (let i = 0; i < this.histogramBuckets.length; i++) {
+ this.histogramBuckets[i].count = 0;
+ }
+ }
+
+ public record(value: number) {
+ if (value < 0 || value > this.maxValue) {
+ return;
+ }
+
+ for (let i = 0; i < this.histogramBuckets.length; i++) {
+ if (value >= this.histogramBuckets[i].min && value < this.histogramBuckets[i].max) {
+ this.histogramBuckets[i].count++;
+
+ break;
+ }
+ }
+ }
+
+ public get(truncate: boolean = false) {
+ let histogramToReturn = this.histogramBuckets;
+
+ if (truncate) {
+ // find the index of the last bucket with a non-zero value
+ const nonZeroCountsWithIndex = this.histogramBuckets
+ .map((bucket: Bucket, index: number) => ({ count: bucket.count, index }))
+ .filter(({ count }) => count > 0);
+ const lastNonZeroIndex: number =
+ nonZeroCountsWithIndex.length > 0 ? last(nonZeroCountsWithIndex)?.index ?? -1 : -1;
+ histogramToReturn =
+ lastNonZeroIndex >= 0 ? this.histogramBuckets.slice(0, lastNonZeroIndex + 1) : [];
+ }
+
+ return histogramToReturn.map((bucket: Bucket) => ({
+ count: bucket.count,
+ value: bucket.max,
+ }));
+ }
+
+ private initializeBuckets() {
+ let i = 0;
+ while (i < this.maxValue) {
+ this.histogramBuckets.push({
+ min: i,
+ max: i + Math.min(this.bucketSize, this.maxValue),
+ count: 0,
+ });
+ i += this.bucketSize;
+ }
+ }
+}
diff --git a/x-pack/plugins/task_manager/server/metrics/success_rate_counter.test.ts b/x-pack/plugins/task_manager/server/metrics/success_rate_counter.test.ts
new file mode 100644
index 0000000000000..eb34f3a34c005
--- /dev/null
+++ b/x-pack/plugins/task_manager/server/metrics/success_rate_counter.test.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 { SuccessRateCounter } from './success_rate_counter';
+
+describe('SuccessRateCounter', () => {
+ let successRateCounter: SuccessRateCounter;
+ beforeEach(() => {
+ successRateCounter = new SuccessRateCounter();
+ });
+
+ test('should correctly initialize', () => {
+ expect(successRateCounter.get()).toEqual({ success: 0, total: 0 });
+ });
+
+ test('should correctly return initialMetrics', () => {
+ expect(successRateCounter.initialMetric()).toEqual({ success: 0, total: 0 });
+ });
+
+ test('should correctly increment counter when success is true', () => {
+ successRateCounter.increment(true);
+ successRateCounter.increment(true);
+ expect(successRateCounter.get()).toEqual({ success: 2, total: 2 });
+ });
+
+ test('should correctly increment counter when success is false', () => {
+ successRateCounter.increment(false);
+ successRateCounter.increment(false);
+ expect(successRateCounter.get()).toEqual({ success: 0, total: 2 });
+ });
+
+ test('should correctly reset counter', () => {
+ successRateCounter.increment(true);
+ successRateCounter.increment(true);
+ successRateCounter.increment(false);
+ successRateCounter.increment(false);
+ successRateCounter.increment(true);
+ successRateCounter.increment(true);
+ successRateCounter.increment(false);
+ expect(successRateCounter.get()).toEqual({ success: 4, total: 7 });
+
+ successRateCounter.reset();
+ expect(successRateCounter.get()).toEqual({ success: 0, total: 0 });
+ });
+});
diff --git a/x-pack/plugins/task_manager/server/metrics/success_rate_counter.ts b/x-pack/plugins/task_manager/server/metrics/success_rate_counter.ts
new file mode 100644
index 0000000000000..d9c61575a2698
--- /dev/null
+++ b/x-pack/plugins/task_manager/server/metrics/success_rate_counter.ts
@@ -0,0 +1,44 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { JsonObject } from '@kbn/utility-types';
+
+export interface SuccessRate extends JsonObject {
+ success: number;
+ total: number;
+}
+
+export class SuccessRateCounter {
+ private success = 0;
+ private total = 0;
+
+ public initialMetric(): SuccessRate {
+ return {
+ success: 0,
+ total: 0,
+ };
+ }
+
+ public get(): SuccessRate {
+ return {
+ success: this.success,
+ total: this.total,
+ };
+ }
+
+ public increment(success: boolean) {
+ if (success) {
+ this.success++;
+ }
+ this.total++;
+ }
+
+ public reset() {
+ this.success = 0;
+ this.total = 0;
+ }
+}
diff --git a/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.test.ts b/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.test.ts
new file mode 100644
index 0000000000000..cfcf4bfdf8d0b
--- /dev/null
+++ b/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.test.ts
@@ -0,0 +1,102 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { none } from 'fp-ts/lib/Option';
+import { FillPoolResult } from '../lib/fill_pool';
+import { asOk, asErr } from '../lib/result_type';
+import { PollingError, PollingErrorType } from '../polling';
+import { asTaskPollingCycleEvent } from '../task_events';
+import { TaskClaimMetricsAggregator } from './task_claim_metrics_aggregator';
+
+export const taskClaimSuccessEvent = asTaskPollingCycleEvent(
+ asOk({
+ result: FillPoolResult.PoolFilled,
+ stats: {
+ tasksUpdated: 0,
+ tasksConflicted: 0,
+ tasksClaimed: 0,
+ },
+ }),
+ {
+ start: 1689698780490,
+ stop: 1689698780500,
+ }
+);
+export const taskClaimFailureEvent = asTaskPollingCycleEvent(
+ asErr(
+ new PollingError(
+ 'Failed to poll for work: Error: failed to work',
+ PollingErrorType.WorkError,
+ none
+ )
+ )
+);
+
+describe('TaskClaimMetricsAggregator', () => {
+ let taskClaimMetricsAggregator: TaskClaimMetricsAggregator;
+ beforeEach(() => {
+ taskClaimMetricsAggregator = new TaskClaimMetricsAggregator();
+ });
+
+ test('should correctly initialize', () => {
+ expect(taskClaimMetricsAggregator.collect()).toEqual({
+ success: 0,
+ total: 0,
+ duration: { counts: [], values: [] },
+ });
+ });
+
+ test('should correctly return initialMetrics', () => {
+ expect(taskClaimMetricsAggregator.initialMetric()).toEqual({
+ success: 0,
+ total: 0,
+ duration: { counts: [], values: [] },
+ });
+ });
+
+ test('should correctly process task lifecycle success event', () => {
+ taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent);
+ taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent);
+ expect(taskClaimMetricsAggregator.collect()).toEqual({
+ success: 2,
+ total: 2,
+ duration: { counts: [2], values: [100] },
+ });
+ });
+
+ test('should correctly process task lifecycle failure event', () => {
+ taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimFailureEvent);
+ taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimFailureEvent);
+ expect(taskClaimMetricsAggregator.collect()).toEqual({
+ success: 0,
+ total: 2,
+ duration: { counts: [], values: [] },
+ });
+ });
+
+ test('should correctly reset counter', () => {
+ taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent);
+ taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent);
+ taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimFailureEvent);
+ taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimFailureEvent);
+ taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent);
+ taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent);
+ taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimFailureEvent);
+ expect(taskClaimMetricsAggregator.collect()).toEqual({
+ success: 4,
+ total: 7,
+ duration: { counts: [4], values: [100] },
+ });
+
+ taskClaimMetricsAggregator.reset();
+ expect(taskClaimMetricsAggregator.collect()).toEqual({
+ success: 0,
+ total: 0,
+ duration: { counts: [], values: [] },
+ });
+ });
+});
diff --git a/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.ts b/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.ts
new file mode 100644
index 0000000000000..2dc1a50e8d00e
--- /dev/null
+++ b/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.ts
@@ -0,0 +1,68 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { isOk } from '../lib/result_type';
+import { TaskLifecycleEvent } from '../polling_lifecycle';
+import { TaskRun } from '../task_events';
+import { SimpleHistogram } from './simple_histogram';
+import { SuccessRate, SuccessRateCounter } from './success_rate_counter';
+import { ITaskMetricsAggregator } from './types';
+
+const HDR_HISTOGRAM_MAX = 30000; // 30 seconds
+const HDR_HISTOGRAM_BUCKET_SIZE = 100; // 100 millis
+
+export type TaskClaimMetric = SuccessRate & {
+ duration: {
+ counts: number[];
+ values: number[];
+ };
+};
+
+export class TaskClaimMetricsAggregator implements ITaskMetricsAggregator {
+ private claimSuccessRate = new SuccessRateCounter();
+ private durationHistogram = new SimpleHistogram(HDR_HISTOGRAM_MAX, HDR_HISTOGRAM_BUCKET_SIZE);
+
+ public initialMetric(): TaskClaimMetric {
+ return {
+ ...this.claimSuccessRate.initialMetric(),
+ duration: { counts: [], values: [] },
+ };
+ }
+ public collect(): TaskClaimMetric {
+ return {
+ ...this.claimSuccessRate.get(),
+ duration: this.serializeHistogram(),
+ };
+ }
+
+ public reset() {
+ this.claimSuccessRate.reset();
+ this.durationHistogram.reset();
+ }
+
+ public processTaskLifecycleEvent(taskEvent: TaskLifecycleEvent) {
+ const success = isOk((taskEvent as TaskRun).event);
+ this.claimSuccessRate.increment(success);
+
+ if (taskEvent.timing) {
+ const durationInMs = taskEvent.timing.stop - taskEvent.timing.start;
+ this.durationHistogram.record(durationInMs);
+ }
+ }
+
+ private serializeHistogram() {
+ const counts: number[] = [];
+ const values: number[] = [];
+
+ for (const { count, value } of this.durationHistogram.get(true)) {
+ counts.push(count);
+ values.push(value);
+ }
+
+ return { counts, values };
+ }
+}
diff --git a/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.test.ts b/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.test.ts
new file mode 100644
index 0000000000000..e3654fd9a21d5
--- /dev/null
+++ b/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.test.ts
@@ -0,0 +1,208 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license 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 uuid from 'uuid';
+import { asOk, asErr } from '../lib/result_type';
+import { TaskStatus } from '../task';
+import { asTaskRunEvent, TaskPersistence } from '../task_events';
+import { TaskRunResult } from '../task_running';
+import { TaskRunMetricsAggregator } from './task_run_metrics_aggregator';
+
+export const getTaskRunSuccessEvent = (type: string) => {
+ const id = uuid.v4();
+ return asTaskRunEvent(
+ id,
+ asOk({
+ task: {
+ id,
+ attempts: 0,
+ status: TaskStatus.Running,
+ version: '123',
+ runAt: new Date(),
+ scheduledAt: new Date(),
+ startedAt: new Date(),
+ retryAt: new Date(Date.now() + 5 * 60 * 1000),
+ state: {},
+ taskType: type,
+ params: {},
+ ownerId: null,
+ },
+ persistence: TaskPersistence.Recurring,
+ result: TaskRunResult.Success,
+ }),
+ {
+ start: 1689698780490,
+ stop: 1689698780500,
+ }
+ );
+};
+
+export const getTaskRunFailedEvent = (type: string) => {
+ const id = uuid.v4();
+ return asTaskRunEvent(
+ id,
+ asErr({
+ error: new Error('task failed to run'),
+ task: {
+ id,
+ attempts: 0,
+ status: TaskStatus.Running,
+ version: '123',
+ runAt: new Date(),
+ scheduledAt: new Date(),
+ startedAt: new Date(),
+ retryAt: new Date(Date.now() + 5 * 60 * 1000),
+ state: {},
+ taskType: type,
+ params: {},
+ ownerId: null,
+ },
+ persistence: TaskPersistence.Recurring,
+ result: TaskRunResult.Failed,
+ })
+ );
+};
+
+describe('TaskRunMetricsAggregator', () => {
+ let taskRunMetricsAggregator: TaskRunMetricsAggregator;
+ beforeEach(() => {
+ taskRunMetricsAggregator = new TaskRunMetricsAggregator();
+ });
+
+ test('should correctly initialize', () => {
+ expect(taskRunMetricsAggregator.collect()).toEqual({
+ overall: { success: 0, total: 0 },
+ by_type: {},
+ });
+ });
+
+ test('should correctly return initialMetrics', () => {
+ expect(taskRunMetricsAggregator.initialMetric()).toEqual({
+ overall: { success: 0, total: 0 },
+ by_type: {},
+ });
+ });
+
+ test('should correctly process task run success event', () => {
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry'));
+ expect(taskRunMetricsAggregator.collect()).toEqual({
+ overall: { success: 2, total: 2 },
+ by_type: {
+ telemetry: { success: 2, total: 2 },
+ },
+ });
+ });
+
+ test('should correctly process task run failure event', () => {
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry'));
+ expect(taskRunMetricsAggregator.collect()).toEqual({
+ overall: { success: 0, total: 2 },
+ by_type: {
+ telemetry: { success: 0, total: 2 },
+ },
+ });
+ });
+
+ test('should correctly process different task types', () => {
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry'));
+ expect(taskRunMetricsAggregator.collect()).toEqual({
+ overall: { success: 3, total: 4 },
+ by_type: {
+ report: { success: 2, total: 2 },
+ telemetry: { success: 1, total: 2 },
+ },
+ });
+ });
+
+ test('should correctly group alerting and action task types', () => {
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(
+ getTaskRunSuccessEvent('alerting:.index-threshold')
+ );
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:webhook'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('alerting:example'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:webhook'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('alerting:example'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:.email'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(
+ getTaskRunSuccessEvent('alerting:.index-threshold')
+ );
+ expect(taskRunMetricsAggregator.collect()).toEqual({
+ overall: { success: 11, total: 14 },
+ by_type: {
+ actions: { success: 3, total: 3 },
+ 'actions:.email': { success: 1, total: 1 },
+ 'actions:webhook': { success: 2, total: 2 },
+ alerting: { success: 5, total: 7 },
+ 'alerting:example': { success: 3, total: 5 },
+ 'alerting:.index-threshold': { success: 2, total: 2 },
+ report: { success: 2, total: 2 },
+ telemetry: { success: 1, total: 2 },
+ },
+ });
+ });
+
+ test('should correctly reset counter', () => {
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(
+ getTaskRunSuccessEvent('alerting:.index-threshold')
+ );
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:webhook'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('alerting:example'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:webhook'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('alerting:example'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:.email'));
+ taskRunMetricsAggregator.processTaskLifecycleEvent(
+ getTaskRunSuccessEvent('alerting:.index-threshold')
+ );
+ expect(taskRunMetricsAggregator.collect()).toEqual({
+ overall: { success: 11, total: 14 },
+ by_type: {
+ actions: { success: 3, total: 3 },
+ 'actions:.email': { success: 1, total: 1 },
+ 'actions:webhook': { success: 2, total: 2 },
+ alerting: { success: 5, total: 7 },
+ 'alerting:example': { success: 3, total: 5 },
+ 'alerting:.index-threshold': { success: 2, total: 2 },
+ report: { success: 2, total: 2 },
+ telemetry: { success: 1, total: 2 },
+ },
+ });
+
+ taskRunMetricsAggregator.reset();
+ expect(taskRunMetricsAggregator.collect()).toEqual({
+ overall: { success: 0, total: 0 },
+ by_type: {
+ actions: { success: 0, total: 0 },
+ 'actions:.email': { success: 0, total: 0 },
+ 'actions:webhook': { success: 0, total: 0 },
+ alerting: { success: 0, total: 0 },
+ 'alerting:example': { success: 0, total: 0 },
+ 'alerting:.index-threshold': { success: 0, total: 0 },
+ report: { success: 0, total: 0 },
+ telemetry: { success: 0, total: 0 },
+ },
+ });
+ });
+});
diff --git a/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts b/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts
new file mode 100644
index 0000000000000..c25d80f112df1
--- /dev/null
+++ b/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts
@@ -0,0 +1,85 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { JsonObject } from '@kbn/utility-types';
+import { isOk, unwrap } from '../lib/result_type';
+import { TaskLifecycleEvent } from '../polling_lifecycle';
+import { ErroredTask, RanTask, TaskRun } from '../task_events';
+import { SuccessRate, SuccessRateCounter } from './success_rate_counter';
+import { ITaskMetricsAggregator } from './types';
+
+const taskTypeGrouping = new Set(['alerting:', 'actions:']);
+
+export interface TaskRunMetric extends JsonObject {
+ overall: SuccessRate;
+ by_type: {
+ [key: string]: SuccessRate;
+ };
+}
+
+export class TaskRunMetricsAggregator implements ITaskMetricsAggregator {
+ private taskRunSuccessRate = new SuccessRateCounter();
+ private taskRunCounter: Map = new Map();
+
+ public initialMetric(): TaskRunMetric {
+ return {
+ overall: this.taskRunSuccessRate.initialMetric(),
+ by_type: {},
+ };
+ }
+
+ public collect(): TaskRunMetric {
+ return {
+ overall: this.taskRunSuccessRate.get(),
+ by_type: this.collectTaskTypeEntries(),
+ };
+ }
+
+ public reset() {
+ this.taskRunSuccessRate.reset();
+ for (const taskType of this.taskRunCounter.keys()) {
+ this.taskRunCounter.get(taskType)!.reset();
+ }
+ }
+
+ public processTaskLifecycleEvent(taskEvent: TaskLifecycleEvent) {
+ const { task }: RanTask | ErroredTask = unwrap((taskEvent as TaskRun).event);
+ const taskType = task.taskType;
+
+ const taskTypeSuccessRate: SuccessRateCounter =
+ this.taskRunCounter.get(taskType) ?? new SuccessRateCounter();
+
+ const success = isOk((taskEvent as TaskRun).event);
+ this.taskRunSuccessRate.increment(success);
+ taskTypeSuccessRate.increment(success);
+ this.taskRunCounter.set(taskType, taskTypeSuccessRate);
+
+ const taskTypeGroup = this.getTaskTypeGroup(taskType);
+ if (taskTypeGroup) {
+ const taskTypeGroupSuccessRate: SuccessRateCounter =
+ this.taskRunCounter.get(taskTypeGroup) ?? new SuccessRateCounter();
+ taskTypeGroupSuccessRate.increment(success);
+ this.taskRunCounter.set(taskTypeGroup, taskTypeGroupSuccessRate);
+ }
+ }
+
+ private collectTaskTypeEntries() {
+ const collected: Record = {};
+ for (const [key, value] of this.taskRunCounter) {
+ collected[key] = value.get();
+ }
+ return collected;
+ }
+
+ private getTaskTypeGroup(taskType: string): string | undefined {
+ for (const group of taskTypeGrouping) {
+ if (taskType.startsWith(group)) {
+ return group.replaceAll(':', '');
+ }
+ }
+ }
+}
diff --git a/x-pack/plugins/task_manager/server/metrics/types.ts b/x-pack/plugins/task_manager/server/metrics/types.ts
new file mode 100644
index 0000000000000..7fbee1fe8abdd
--- /dev/null
+++ b/x-pack/plugins/task_manager/server/metrics/types.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 { TaskLifecycleEvent } from '../polling_lifecycle';
+
+export interface ITaskMetricsAggregator {
+ initialMetric: () => T;
+ collect: () => T;
+ reset: () => void;
+ processTaskLifecycleEvent: (taskEvent: TaskLifecycleEvent) => void;
+}
diff --git a/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.test.ts b/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.test.ts
index cdd67a07ff9e7..9507b3ab0e4cd 100644
--- a/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.test.ts
+++ b/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.test.ts
@@ -19,7 +19,7 @@ import {
import { asOk } from '../lib/result_type';
import { TaskLifecycleEvent } from '../polling_lifecycle';
import { TaskRunResult } from '../task_running';
-import { AggregatedStat } from './runtime_statistics_aggregator';
+import { AggregatedStat } from '../lib/runtime_statistics_aggregator';
import { taskPollingLifecycleMock } from '../polling_lifecycle.mock';
import {
BackgroundTaskUtilizationStat,
diff --git a/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.ts
index fd116cbdd71d8..837f29c83f108 100644
--- a/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.ts
+++ b/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.ts
@@ -20,7 +20,7 @@ import {
TaskTiming,
} from '../task_events';
import { MonitoredStat } from './monitoring_stats_stream';
-import { AggregatedStat, AggregatedStatProvider } from './runtime_statistics_aggregator';
+import { AggregatedStat, AggregatedStatProvider } from '../lib/runtime_statistics_aggregator';
import { createRunningAveragedStat } from './task_run_calcultors';
import { DEFAULT_WORKER_UTILIZATION_RUNNING_AVERAGE_WINDOW } from '../config';
diff --git a/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.test.ts b/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.test.ts
index 98493ae89b683..689c9c882bee3 100644
--- a/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.test.ts
+++ b/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.test.ts
@@ -52,6 +52,7 @@ describe('Configuration Statistics Aggregator', () => {
delay: 3000,
max_attempts: 20,
},
+ metrics_reset_interval: 3000,
};
const managedConfig = {
diff --git a/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.ts
index 6414c9e80ce06..2212affcc8db3 100644
--- a/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.ts
+++ b/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.ts
@@ -8,7 +8,7 @@
import { combineLatest, of } from 'rxjs';
import { pick, merge } from 'lodash';
import { map, startWith } from 'rxjs/operators';
-import { AggregatedStatProvider } from './runtime_statistics_aggregator';
+import { AggregatedStatProvider } from '../lib/runtime_statistics_aggregator';
import { TaskManagerConfig } from '../config';
import { ManagedConfiguration } from '../lib/create_managed_configuration';
diff --git a/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.test.ts b/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.test.ts
index 8a2305c3076a5..8d4ef4fab2eba 100644
--- a/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.test.ts
+++ b/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.test.ts
@@ -26,7 +26,7 @@ import {
SummarizedEphemeralTaskStat,
EphemeralTaskStat,
} from './ephemeral_task_statistics';
-import { AggregatedStat } from './runtime_statistics_aggregator';
+import { AggregatedStat } from '../lib/runtime_statistics_aggregator';
import { ephemeralTaskLifecycleMock } from '../ephemeral_task_lifecycle.mock';
import { times, takeRight, take as takeLeft } from 'lodash';
diff --git a/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.ts
index 52aa2b1eead25..8a6ade503b041 100644
--- a/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.ts
+++ b/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.ts
@@ -9,7 +9,7 @@ import { map, filter, startWith, buffer, share } from 'rxjs/operators';
import { JsonObject } from '@kbn/utility-types';
import { combineLatest, Observable, zip } from 'rxjs';
import { isOk, Ok } from '../lib/result_type';
-import { AggregatedStat, AggregatedStatProvider } from './runtime_statistics_aggregator';
+import { AggregatedStat, AggregatedStatProvider } from '../lib/runtime_statistics_aggregator';
import { EphemeralTaskLifecycle } from '../ephemeral_task_lifecycle';
import { TaskLifecycleEvent } from '../polling_lifecycle';
import { isTaskRunEvent, isTaskManagerStatEvent } from '../task_events';
diff --git a/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.test.ts b/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.test.ts
index 995db14fa09ea..daf3f2baf085d 100644
--- a/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.test.ts
+++ b/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.test.ts
@@ -8,8 +8,9 @@
import { TaskManagerConfig } from '../config';
import { of, Subject } from 'rxjs';
import { take, bufferCount } from 'rxjs/operators';
-import { createMonitoringStatsStream, AggregatedStat } from './monitoring_stats_stream';
+import { createMonitoringStatsStream } from './monitoring_stats_stream';
import { JsonValue } from '@kbn/utility-types';
+import { AggregatedStat } from '../lib/runtime_statistics_aggregator';
beforeEach(() => {
jest.resetAllMocks();
@@ -56,6 +57,7 @@ describe('createMonitoringStatsStream', () => {
delay: 3000,
max_attempts: 20,
},
+ metrics_reset_interval: 3000,
};
it('returns the initial config used to configure Task Manager', async () => {
diff --git a/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.ts b/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.ts
index e1ff38d1c9607..62505a34d7f89 100644
--- a/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.ts
+++ b/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.ts
@@ -37,13 +37,11 @@ import {
import { ConfigStat, createConfigurationAggregator } from './configuration_statistics';
import { TaskManagerConfig } from '../config';
-import { AggregatedStatProvider } from './runtime_statistics_aggregator';
import { ManagedConfiguration } from '../lib/create_managed_configuration';
import { EphemeralTaskLifecycle } from '../ephemeral_task_lifecycle';
import { CapacityEstimationStat, withCapacityEstimate } from './capacity_estimation';
import { AdHocTaskCounter } from '../lib/adhoc_task_counter';
-
-export type { AggregatedStatProvider, AggregatedStat } from './runtime_statistics_aggregator';
+import { AggregatedStatProvider } from '../lib/runtime_statistics_aggregator';
export interface MonitoringStats {
last_update: string;
diff --git a/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.test.ts b/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.test.ts
index 4d69b23b699b7..91e81013b726f 100644
--- a/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.test.ts
+++ b/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.test.ts
@@ -30,7 +30,7 @@ import {
TaskRunStat,
SummarizedTaskRunStat,
} from './task_run_statistics';
-import { AggregatedStat } from './runtime_statistics_aggregator';
+import { AggregatedStat } from '../lib/runtime_statistics_aggregator';
import { FillPoolResult } from '../lib/fill_pool';
import { taskPollingLifecycleMock } from '../polling_lifecycle.mock';
import { configSchema } from '../config';
diff --git a/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.ts
index 0c6063af19286..7b7db8cb25eed 100644
--- a/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.ts
+++ b/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.ts
@@ -10,7 +10,7 @@ import { filter, startWith, map } from 'rxjs/operators';
import { JsonObject, JsonValue } from '@kbn/utility-types';
import { isNumber, mapValues } from 'lodash';
import { Logger } from '@kbn/core/server';
-import { AggregatedStatProvider, AggregatedStat } from './runtime_statistics_aggregator';
+import { AggregatedStatProvider, AggregatedStat } from '../lib/runtime_statistics_aggregator';
import { TaskLifecycleEvent } from '../polling_lifecycle';
import {
isTaskRunEvent,
diff --git a/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts
index bacd05dcb6a06..b4d5db14a12e4 100644
--- a/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts
+++ b/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts
@@ -12,7 +12,7 @@ import { JsonObject } from '@kbn/utility-types';
import { keyBy, mapValues } from 'lodash';
import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
import type { AggregationResultOf } from '@kbn/es-types';
-import { AggregatedStatProvider } from './runtime_statistics_aggregator';
+import { AggregatedStatProvider } from '../lib/runtime_statistics_aggregator';
import { parseIntervalAsSecond, asInterval, parseIntervalAsMillisecond } from '../lib/intervals';
import { HealthStatus } from './monitoring_stats_stream';
import { TaskStore } from '../task_store';
diff --git a/x-pack/plugins/task_manager/server/plugin.test.ts b/x-pack/plugins/task_manager/server/plugin.test.ts
index 4c0c96c7f76a6..1e7215d6d7a1b 100644
--- a/x-pack/plugins/task_manager/server/plugin.test.ts
+++ b/x-pack/plugins/task_manager/server/plugin.test.ts
@@ -77,6 +77,7 @@ const pluginInitializerContextParams = {
delay: 3000,
max_attempts: 20,
},
+ metrics_reset_interval: 3000,
};
describe('TaskManagerPlugin', () => {
diff --git a/x-pack/plugins/task_manager/server/plugin.ts b/x-pack/plugins/task_manager/server/plugin.ts
index e65574cef779a..3b8ab4a54be1f 100644
--- a/x-pack/plugins/task_manager/server/plugin.ts
+++ b/x-pack/plugins/task_manager/server/plugin.ts
@@ -27,7 +27,7 @@ import { TaskDefinitionRegistry, TaskTypeDictionary, REMOVED_TYPES } from './tas
import { AggregationOpts, FetchResult, SearchOpts, TaskStore } from './task_store';
import { createManagedConfiguration } from './lib/create_managed_configuration';
import { TaskScheduling } from './task_scheduling';
-import { backgroundTaskUtilizationRoute, healthRoute } from './routes';
+import { backgroundTaskUtilizationRoute, healthRoute, metricsRoute } from './routes';
import { createMonitoringStats, MonitoringStats } from './monitoring';
import { EphemeralTaskLifecycle } from './ephemeral_task_lifecycle';
import { EphemeralTask, ConcreteTaskInstance } from './task';
@@ -35,6 +35,7 @@ import { registerTaskManagerUsageCollector } from './usage';
import { TASK_MANAGER_INDEX } from './constants';
import { AdHocTaskCounter } from './lib/adhoc_task_counter';
import { setupIntervalLogging } from './lib/log_health_metrics';
+import { metricsStream, Metrics } from './metrics';
export interface TaskManagerSetupContract {
/**
@@ -82,6 +83,8 @@ export class TaskManagerPlugin
private middleware: Middleware = createInitialMiddleware();
private elasticsearchAndSOAvailability$?: Observable;
private monitoringStats$ = new Subject();
+ private metrics$ = new Subject();
+ private resetMetrics$ = new Subject();
private shouldRunBackgroundTasks: boolean;
private readonly kibanaVersion: PluginInitializerContext['env']['packageInfo']['version'];
private adHocTaskCounter: AdHocTaskCounter;
@@ -155,6 +158,12 @@ export class TaskManagerPlugin
getClusterClient: () =>
startServicesPromise.then(({ elasticsearch }) => elasticsearch.client),
});
+ metricsRoute({
+ router,
+ metrics$: this.metrics$,
+ resetMetrics$: this.resetMetrics$,
+ taskManagerId: this.taskManagerId,
+ });
core.status.derivedStatus$.subscribe((status) =>
this.logger.debug(`status core.status.derivedStatus now set to ${status.level}`)
@@ -276,6 +285,10 @@ export class TaskManagerPlugin
this.ephemeralTaskLifecycle
).subscribe((stat) => this.monitoringStats$.next(stat));
+ metricsStream(this.config!, this.resetMetrics$, this.taskPollingLifecycle).subscribe((metric) =>
+ this.metrics$.next(metric)
+ );
+
const taskScheduling = new TaskScheduling({
logger: this.logger,
taskStore,
diff --git a/x-pack/plugins/task_manager/server/polling_lifecycle.test.ts b/x-pack/plugins/task_manager/server/polling_lifecycle.test.ts
index 62e6be589b4cf..79b153f42a88d 100644
--- a/x-pack/plugins/task_manager/server/polling_lifecycle.test.ts
+++ b/x-pack/plugins/task_manager/server/polling_lifecycle.test.ts
@@ -82,6 +82,7 @@ describe('TaskPollingLifecycle', () => {
delay: 3000,
max_attempts: 20,
},
+ metrics_reset_interval: 3000,
},
taskStore: mockTaskStore,
logger: taskManagerLogger,
diff --git a/x-pack/plugins/task_manager/server/routes/index.ts b/x-pack/plugins/task_manager/server/routes/index.ts
index f3ba539323f8e..372996f7cea3d 100644
--- a/x-pack/plugins/task_manager/server/routes/index.ts
+++ b/x-pack/plugins/task_manager/server/routes/index.ts
@@ -7,3 +7,4 @@
export { healthRoute } from './health';
export { backgroundTaskUtilizationRoute } from './background_task_utilization';
+export { metricsRoute } from './metrics';
diff --git a/x-pack/plugins/task_manager/server/routes/metrics.test.ts b/x-pack/plugins/task_manager/server/routes/metrics.test.ts
new file mode 100644
index 0000000000000..a9703aa7548dd
--- /dev/null
+++ b/x-pack/plugins/task_manager/server/routes/metrics.test.ts
@@ -0,0 +1,82 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { of, Subject } from 'rxjs';
+import { v4 as uuidv4 } from 'uuid';
+import { httpServiceMock } from '@kbn/core/server/mocks';
+import { metricsRoute } from './metrics';
+import { mockHandlerArguments } from './_mock_handler_arguments';
+
+describe('metricsRoute', () => {
+ beforeEach(() => {
+ jest.resetAllMocks();
+ });
+
+ it('registers route', async () => {
+ const router = httpServiceMock.createRouter();
+ metricsRoute({
+ router,
+ metrics$: of(),
+ resetMetrics$: new Subject(),
+ taskManagerId: uuidv4(),
+ });
+
+ const [config] = router.get.mock.calls[0];
+
+ expect(config.path).toMatchInlineSnapshot(`"/api/task_manager/metrics"`);
+ });
+
+ it('emits resetMetric$ event when route is accessed and reset query param is true', async () => {
+ let resetCalledTimes = 0;
+ const resetMetrics$ = new Subject();
+
+ resetMetrics$.subscribe(() => {
+ resetCalledTimes++;
+ });
+ const router = httpServiceMock.createRouter();
+ metricsRoute({
+ router,
+ metrics$: of(),
+ resetMetrics$,
+ taskManagerId: uuidv4(),
+ });
+
+ const [config, handler] = router.get.mock.calls[0];
+ const [context, req, res] = mockHandlerArguments({}, { query: { reset: true } }, ['ok']);
+
+ expect(config.path).toMatchInlineSnapshot(`"/api/task_manager/metrics"`);
+
+ await handler(context, req, res);
+
+ expect(resetCalledTimes).toEqual(1);
+ });
+
+ it('does not emit resetMetric$ event when route is accessed and reset query param is false', async () => {
+ let resetCalledTimes = 0;
+ const resetMetrics$ = new Subject();
+
+ resetMetrics$.subscribe(() => {
+ resetCalledTimes++;
+ });
+ const router = httpServiceMock.createRouter();
+ metricsRoute({
+ router,
+ metrics$: of(),
+ resetMetrics$,
+ taskManagerId: uuidv4(),
+ });
+
+ const [config, handler] = router.get.mock.calls[0];
+ const [context, req, res] = mockHandlerArguments({}, { query: { reset: false } }, ['ok']);
+
+ expect(config.path).toMatchInlineSnapshot(`"/api/task_manager/metrics"`);
+
+ await handler(context, req, res);
+
+ expect(resetCalledTimes).toEqual(0);
+ });
+});
diff --git a/x-pack/plugins/task_manager/server/routes/metrics.ts b/x-pack/plugins/task_manager/server/routes/metrics.ts
new file mode 100644
index 0000000000000..737f2b44fd79e
--- /dev/null
+++ b/x-pack/plugins/task_manager/server/routes/metrics.ts
@@ -0,0 +1,74 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import {
+ IRouter,
+ RequestHandlerContext,
+ KibanaRequest,
+ IKibanaResponse,
+ KibanaResponseFactory,
+} from '@kbn/core/server';
+import { schema, TypeOf } from '@kbn/config-schema';
+import { Observable, Subject } from 'rxjs';
+import { Metrics } from '../metrics';
+
+export interface NodeMetrics {
+ process_uuid: string;
+ timestamp: string;
+ last_update: string;
+ metrics: Metrics['metrics'] | null;
+}
+
+export interface MetricsRouteParams {
+ router: IRouter;
+ metrics$: Observable;
+ resetMetrics$: Subject;
+ taskManagerId: string;
+}
+
+const QuerySchema = schema.object({
+ reset: schema.boolean({ defaultValue: true }),
+});
+
+export function metricsRoute(params: MetricsRouteParams) {
+ const { router, metrics$, resetMetrics$, taskManagerId } = params;
+
+ let lastMetrics: NodeMetrics | null = null;
+
+ metrics$.subscribe((metrics) => {
+ lastMetrics = { process_uuid: taskManagerId, timestamp: new Date().toISOString(), ...metrics };
+ });
+
+ router.get(
+ {
+ path: `/api/task_manager/metrics`,
+ options: {
+ access: 'public',
+ },
+ // Uncomment when we determine that we can restrict API usage to Global admins based on telemetry
+ // options: { tags: ['access:taskManager'] },
+ validate: {
+ query: QuerySchema,
+ },
+ },
+ async function (
+ _: RequestHandlerContext,
+ req: KibanaRequest, unknown>,
+ res: KibanaResponseFactory
+ ): Promise {
+ if (req.query.reset) {
+ resetMetrics$.next(true);
+ }
+
+ return res.ok({
+ body: lastMetrics
+ ? lastMetrics
+ : { process_uuid: taskManagerId, timestamp: new Date().toISOString(), metrics: {} },
+ });
+ }
+ );
+}
diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts
index 97eeb17f0cd4e..7e897840f72c7 100644
--- a/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts
+++ b/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts
@@ -1298,6 +1298,45 @@ describe('TaskManagerRunner', () => {
);
});
+ test('emits TaskEvent when a recurring task returns a success result with hasError=true', async () => {
+ const id = _.random(1, 20).toString();
+ const runAt = minutesFromNow(_.random(5));
+ const onTaskEvent = jest.fn();
+ const { runner, instance } = await readyToRunStageSetup({
+ onTaskEvent,
+ instance: {
+ id,
+ schedule: { interval: '1m' },
+ },
+ definitions: {
+ bar: {
+ title: 'Bar!',
+ createTaskRunner: () => ({
+ async run() {
+ return { runAt, state: {}, hasError: true };
+ },
+ }),
+ },
+ },
+ });
+
+ await runner.run();
+
+ expect(onTaskEvent).toHaveBeenCalledWith(
+ withAnyTiming(
+ asTaskRunEvent(
+ id,
+ asErr({
+ task: instance,
+ persistence: TaskPersistence.Recurring,
+ result: TaskRunResult.Success,
+ error: new Error(`Alerting task failed to run.`),
+ })
+ )
+ )
+ );
+ });
+
test('emits TaskEvent when a task run throws an error', async () => {
const id = _.random(1, 20).toString();
const error = new Error('Dangit!');
diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.ts
index 8ad020684e269..e8ec5cb0f2d91 100644
--- a/x-pack/plugins/task_manager/server/task_running/task_runner.ts
+++ b/x-pack/plugins/task_manager/server/task_running/task_runner.ts
@@ -47,6 +47,7 @@ import {
FailedRunResult,
FailedTaskResult,
isFailedRunResult,
+ RunContext,
SuccessfulRunResult,
TaskDefinition,
TaskStatus,
@@ -321,9 +322,9 @@ export class TaskManagerRunner implements TaskRunner {
let taskParamsValidation;
if (this.requeueInvalidTasksConfig.enabled) {
- taskParamsValidation = this.validateTaskParams();
+ taskParamsValidation = this.validateTaskParams(modifiedContext);
if (!taskParamsValidation.error) {
- taskParamsValidation = await this.validateIndirectTaskParams();
+ taskParamsValidation = await this.validateIndirectTaskParams(modifiedContext);
}
}
@@ -359,9 +360,9 @@ export class TaskManagerRunner implements TaskRunner {
}
}
- private validateTaskParams() {
+ private validateTaskParams({ taskInstance }: RunContext) {
let error;
- const { state, taskType, params, id, numSkippedRuns = 0 } = this.instance.task;
+ const { state, taskType, params, id, numSkippedRuns = 0 } = taskInstance;
const { max_attempts: maxAttempts } = this.requeueInvalidTasksConfig;
try {
@@ -383,9 +384,9 @@ export class TaskManagerRunner implements TaskRunner {
return { ...(error ? { error } : {}), state };
}
- private async validateIndirectTaskParams() {
+ private async validateIndirectTaskParams({ taskInstance }: RunContext) {
let error;
- const { state, taskType, id, numSkippedRuns = 0 } = this.instance.task;
+ const { state, taskType, id, numSkippedRuns = 0 } = taskInstance;
const { max_attempts: maxAttempts } = this.requeueInvalidTasksConfig;
const indirectParamsSchema = this.definition.indirectParamsSchema;
@@ -735,23 +736,30 @@ export class TaskManagerRunner implements TaskRunner {
await eitherAsync(
result,
- async ({ runAt, schedule }: SuccessfulRunResult) => {
- this.onTaskEvent(
- asTaskRunEvent(
- this.id,
- asOk({
- task,
- persistence:
- schedule || task.schedule
- ? TaskPersistence.Recurring
- : TaskPersistence.NonRecurring,
- result: await (runAt || schedule || task.schedule
- ? this.processResultForRecurringTask(result)
- : this.processResultWhenDone()),
- }),
- taskTiming
- )
- );
+ async ({ runAt, schedule, hasError }: SuccessfulRunResult) => {
+ const processedResult = {
+ task,
+ persistence:
+ schedule || task.schedule ? TaskPersistence.Recurring : TaskPersistence.NonRecurring,
+ result: await (runAt || schedule || task.schedule
+ ? this.processResultForRecurringTask(result)
+ : this.processResultWhenDone()),
+ };
+
+ // Alerting task runner returns SuccessfulRunResult with hasError=true
+ // when the alerting task fails, so we check for this condition in order
+ // to emit the correct task run event for metrics collection
+ const taskRunEvent = hasError
+ ? asTaskRunEvent(
+ this.id,
+ asErr({
+ ...processedResult,
+ error: new Error(`Alerting task failed to run.`),
+ }),
+ taskTiming
+ )
+ : asTaskRunEvent(this.id, asOk(processedResult), taskTiming);
+ this.onTaskEvent(taskRunEvent);
},
async ({ error }: FailedRunResult) => {
this.onTaskEvent(
diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/index.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/index.ts
index af17d1b76ed99..420dfe795f322 100644
--- a/x-pack/test/plugin_api_integration/test_suites/task_manager/index.ts
+++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/index.ts
@@ -10,6 +10,7 @@ import { FtrProviderContext } from '../../ftr_provider_context';
export default function ({ loadTestFile }: FtrProviderContext) {
describe('task_manager', function taskManagerSuite() {
loadTestFile(require.resolve('./background_task_utilization_route'));
+ loadTestFile(require.resolve('./metrics_route'));
loadTestFile(require.resolve('./health_route'));
loadTestFile(require.resolve('./task_management'));
loadTestFile(require.resolve('./task_management_scheduled_at'));
diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/metrics_route.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/metrics_route.ts
new file mode 100644
index 0000000000000..4da679b6839ac
--- /dev/null
+++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/metrics_route.ts
@@ -0,0 +1,227 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import expect from '@kbn/expect';
+import url from 'url';
+import supertest from 'supertest';
+import { NodeMetrics } from '@kbn/task-manager-plugin/server/routes/metrics';
+import { FtrProviderContext } from '../../ftr_provider_context';
+
+export default function ({ getService }: FtrProviderContext) {
+ const config = getService('config');
+ const retry = getService('retry');
+ const request = supertest(url.format(config.get('servers.kibana')));
+
+ const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
+
+ function getMetricsRequest(reset: boolean = false) {
+ return request
+ .get(`/api/task_manager/metrics${reset ? '' : '?reset=false'}`)
+ .set('kbn-xsrf', 'foo')
+ .expect(200)
+ .then((response) => response.body);
+ }
+
+ function getMetrics(
+ reset: boolean = false,
+ callback: (metrics: NodeMetrics) => boolean
+ ): Promise {
+ return retry.try(async () => {
+ const metrics = await getMetricsRequest(reset);
+
+ if (metrics.metrics && callback(metrics)) {
+ return metrics;
+ }
+
+ await delay(500);
+ throw new Error('Expected metrics not received');
+ });
+ }
+
+ describe('task manager metrics', () => {
+ describe('task claim', () => {
+ it('should increment task claim success/total counters', async () => {
+ // counters are reset every 30 seconds, so wait until the start of a
+ // fresh counter cycle to make sure values are incrementing
+ const initialMetrics = (
+ await getMetrics(false, (metrics) => metrics?.metrics?.task_claim?.value.total === 1)
+ ).metrics;
+ expect(initialMetrics).not.to.be(null);
+ expect(initialMetrics?.task_claim).not.to.be(null);
+ expect(initialMetrics?.task_claim?.value).not.to.be(null);
+
+ let previousTaskClaimSuccess = initialMetrics?.task_claim?.value.total!;
+ let previousTaskClaimTotal = initialMetrics?.task_claim?.value.success!;
+ let previousTaskClaimTimestamp: string = initialMetrics?.task_claim?.timestamp!;
+
+ for (let i = 0; i < 5; ++i) {
+ const metrics = (
+ await getMetrics(
+ false,
+ (m: NodeMetrics) => m.metrics?.task_claim?.timestamp !== previousTaskClaimTimestamp
+ )
+ ).metrics;
+ expect(metrics).not.to.be(null);
+ expect(metrics?.task_claim).not.to.be(null);
+ expect(metrics?.task_claim?.value).not.to.be(null);
+
+ expect(metrics?.task_claim?.value.success).to.be.greaterThan(previousTaskClaimSuccess);
+ expect(metrics?.task_claim?.value.total).to.be.greaterThan(previousTaskClaimTotal);
+
+ previousTaskClaimTimestamp = metrics?.task_claim?.timestamp!;
+ previousTaskClaimSuccess = metrics?.task_claim?.value.success!;
+ previousTaskClaimTotal = metrics?.task_claim?.value.total!;
+
+ // check that duration histogram exists
+ expect(metrics?.task_claim?.value.duration).not.to.be(null);
+ expect(Array.isArray(metrics?.task_claim?.value.duration.counts)).to.be(true);
+ expect(Array.isArray(metrics?.task_claim?.value.duration.values)).to.be(true);
+ }
+ });
+
+ it('should reset task claim success/total counters at an interval', async () => {
+ const initialCounterValue = 7;
+ const initialMetrics = (
+ await getMetrics(
+ false,
+ (metrics) => metrics?.metrics?.task_claim?.value.total === initialCounterValue
+ )
+ ).metrics;
+ expect(initialMetrics).not.to.be(null);
+ expect(initialMetrics?.task_claim).not.to.be(null);
+ expect(initialMetrics?.task_claim?.value).not.to.be(null);
+
+ // retry until counter value resets
+ const resetMetrics = (
+ await getMetrics(false, (m: NodeMetrics) => m?.metrics?.task_claim?.value.total === 1)
+ ).metrics;
+ expect(resetMetrics).not.to.be(null);
+ expect(resetMetrics?.task_claim).not.to.be(null);
+ expect(resetMetrics?.task_claim?.value).not.to.be(null);
+ });
+
+ it('should reset task claim success/total counters on request', async () => {
+ const initialCounterValue = 1;
+ const initialMetrics = (
+ await getMetrics(
+ false,
+ (metrics) => metrics?.metrics?.task_claim?.value.total === initialCounterValue
+ )
+ ).metrics;
+ expect(initialMetrics).not.to.be(null);
+ expect(initialMetrics?.task_claim).not.to.be(null);
+ expect(initialMetrics?.task_claim?.value).not.to.be(null);
+
+ let previousTaskClaimTimestamp: string = initialMetrics?.task_claim?.timestamp!;
+
+ for (let i = 0; i < 5; ++i) {
+ const metrics = (
+ await getMetrics(
+ true,
+ (m: NodeMetrics) => m.metrics?.task_claim?.timestamp !== previousTaskClaimTimestamp
+ )
+ ).metrics;
+ expect(metrics).not.to.be(null);
+ expect(metrics?.task_claim).not.to.be(null);
+ expect(metrics?.task_claim?.value).not.to.be(null);
+
+ expect(metrics?.task_claim?.value.success).to.equal(1);
+ expect(metrics?.task_claim?.value.total).to.equal(1);
+
+ previousTaskClaimTimestamp = metrics?.task_claim?.timestamp!;
+
+ // check that duration histogram exists
+ expect(metrics?.task_claim?.value.duration).not.to.be(null);
+ expect(Array.isArray(metrics?.task_claim?.value.duration.counts)).to.be(true);
+ expect(Array.isArray(metrics?.task_claim?.value.duration.values)).to.be(true);
+ }
+ });
+ });
+
+ describe('task run test', () => {
+ let ruleId: string | null = null;
+ before(async () => {
+ // create a rule that fires actions
+ const rule = await request
+ .post(`/api/alerting/rule`)
+ .set('kbn-xsrf', 'foo')
+ .send({
+ enabled: true,
+ name: 'test rule',
+ tags: [],
+ rule_type_id: '.es-query',
+ consumer: 'alerts',
+ // set schedule long so we can control when it runs
+ schedule: { interval: '1d' },
+ actions: [],
+ params: {
+ aggType: 'count',
+ esQuery: '{\n "query":{\n "match_all" : {}\n }\n}',
+ excludeHitsFromPreviousRun: false,
+ groupBy: 'all',
+ index: ['.kibana-event-log*'],
+ searchType: 'esQuery',
+ size: 100,
+ termSize: 5,
+ threshold: [0],
+ thresholdComparator: '>',
+ timeField: '@timestamp',
+ timeWindowSize: 5,
+ timeWindowUnit: 'm',
+ },
+ })
+ .expect(200)
+ .then((response) => response.body);
+
+ ruleId = rule.id;
+ });
+
+ after(async () => {
+ // delete rule
+ await request.delete(`/api/alerting/rule/${ruleId}`).set('kbn-xsrf', 'foo').expect(204);
+ });
+
+ it('should increment task run success/total counters', async () => {
+ const initialMetrics = (
+ await getMetrics(
+ false,
+ (metrics) =>
+ metrics?.metrics?.task_run?.value.by_type.alerting?.total === 1 &&
+ metrics?.metrics?.task_run?.value.by_type.alerting?.success === 1
+ )
+ ).metrics;
+ expect(initialMetrics).not.to.be(null);
+ expect(initialMetrics?.task_claim).not.to.be(null);
+ expect(initialMetrics?.task_claim?.value).not.to.be(null);
+
+ for (let i = 0; i < 1; ++i) {
+ // run the rule and expect counters to increment
+ await request
+ .post('/api/sample_tasks/run_soon')
+ .set('kbn-xsrf', 'xxx')
+ .send({ task: { id: ruleId } })
+ .expect(200);
+
+ await getMetrics(
+ false,
+ (metrics) =>
+ metrics?.metrics?.task_run?.value.by_type.alerting?.total === i + 2 &&
+ metrics?.metrics?.task_run?.value.by_type.alerting?.success === i + 2
+ );
+ }
+
+ // counter should reset on its own
+ await getMetrics(
+ false,
+ (metrics) =>
+ metrics?.metrics?.task_run?.value.by_type.alerting?.total === 0 &&
+ metrics?.metrics?.task_run?.value.by_type.alerting?.success === 0
+ );
+ });
+ });
+ });
+}
From 349972cd3cd1ed04577c8ce6b3a0f1af0762db1a Mon Sep 17 00:00:00 2001
From: Rickyanto Ang
Date: Fri, 11 Aug 2023 10:58:04 -0700
Subject: [PATCH 32/46] [Cloud Security]Added Beta tag + improvements for CIS
GCP (#163663)
## Summary
- Added Beta tag for GCP option on CSPM
- Fix a bug where setup_access is stuck on google_cloud_shell ( This bug
occur when user clicks on Manual option, click the start of Project ID
name, and then click google cloud shell option again)
- Added unit test for getCspmCloudShellDefaultValue to help with
refactor later
---
.../public/common/constants.ts | 2 +
.../csp_boxed_radio_group.tsx | 14 +-
.../fleet_extensions/gcp_credential_form.tsx | 4 +-
.../components/fleet_extensions/utils.test.ts | 131 +++++++++++++++++-
.../components/fleet_extensions/utils.ts | 1 +
5 files changed, 147 insertions(+), 5 deletions(-)
diff --git a/x-pack/plugins/cloud_security_posture/public/common/constants.ts b/x-pack/plugins/cloud_security_posture/public/common/constants.ts
index a08ebb48fdd01..6ef38730dcf34 100644
--- a/x-pack/plugins/cloud_security_posture/public/common/constants.ts
+++ b/x-pack/plugins/cloud_security_posture/public/common/constants.ts
@@ -59,6 +59,7 @@ export interface CloudPostureIntegrationProps {
disabled?: boolean;
icon?: string;
tooltip?: string;
+ isBeta?: boolean;
}>;
}
@@ -91,6 +92,7 @@ export const cloudPostureIntegrations: CloudPostureIntegrations = {
defaultMessage: 'CIS GCP',
}),
icon: 'logoGCP',
+ isBeta: true,
},
{
type: CLOUDBEAT_AZURE,
diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/csp_boxed_radio_group.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/csp_boxed_radio_group.tsx
index 97018a072abd0..c9ba38eccb2e6 100644
--- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/csp_boxed_radio_group.tsx
+++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/csp_boxed_radio_group.tsx
@@ -6,7 +6,7 @@
*/
import React from 'react';
-import { useEuiTheme, EuiButton, EuiRadio, EuiToolTip } from '@elastic/eui';
+import { useEuiTheme, EuiButton, EuiRadio, EuiToolTip, EuiBetaBadge } from '@elastic/eui';
import { css } from '@emotion/react';
export interface CspRadioGroupProps {
@@ -23,6 +23,7 @@ interface CspRadioOption {
label: string;
icon?: string;
tooltip?: string;
+ isBeta?: boolean;
}
export const RadioGroup = ({
@@ -57,7 +58,7 @@ export const RadioGroup = ({
content={option.tooltip}
anchorProps={{
style: {
- flexGrow: 1,
+ flex: '1 1 0',
},
}}
>
@@ -105,6 +106,15 @@ export const RadioGroup = ({
checked={isChecked}
onChange={() => {}}
/>
+ {option.isBeta && (
+
+
+
+ )}
);
diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credential_form.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credential_form.tsx
index 9d699ea31107f..88f6ff77fde21 100644
--- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credential_form.tsx
+++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credential_form.tsx
@@ -335,8 +335,8 @@ export const GcpCredentialsForm = ({
updatePolicy(
getPosturePolicy(newPolicy, input.type, {
setup_access: {
- // Restoring last manual credentials type or defaulting to the first option
- value: lastSetupAccessType.current || SETUP_ACCESS_MANUAL,
+ // Restoring last manual credentials type
+ value: SETUP_ACCESS_MANUAL,
type: 'text',
},
// Restoring fields from manual setup format if any
diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/utils.test.ts b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/utils.test.ts
index 323ab6aa7ef05..b710741652b6c 100644
--- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/utils.test.ts
+++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/utils.test.ts
@@ -5,8 +5,14 @@
* 2.0.
*/
-import { getMaxPackageName, getPostureInputHiddenVars, getPosturePolicy } from './utils';
+import {
+ getMaxPackageName,
+ getPostureInputHiddenVars,
+ getPosturePolicy,
+ getCspmCloudShellDefaultValue,
+} from './utils';
import { getMockPolicyAWS, getMockPolicyK8s, getMockPolicyEKS } from './mocks';
+import type { PackageInfo } from '@kbn/fleet-plugin/common';
describe('getPosturePolicy', () => {
for (const [name, getPolicy, expectedVars] of [
@@ -123,3 +129,126 @@ describe('getMaxPackageName', () => {
expect(result).toBe('kspm-1');
});
});
+
+describe('getCspmCloudShellDefaultValue', () => {
+ it('should return empty string when policy_templates is missing', () => {
+ const packagePolicy = { name: 'test' } as PackageInfo;
+
+ const result = getCspmCloudShellDefaultValue(packagePolicy);
+
+ expect(result).toBe('');
+ });
+
+ it('should return empty string when policy_templates.name is not cspm', () => {
+ const packagePolicy = { name: 'test', policy_templates: [{ name: 'kspm' }] } as PackageInfo;
+
+ const result = getCspmCloudShellDefaultValue(packagePolicy);
+
+ expect(result).toBe('');
+ });
+
+ it('should return empty string when policy_templates.inputs is missing', () => {
+ const packagePolicy = { name: 'test', policy_templates: [{ name: 'cspm' }] } as PackageInfo;
+
+ const result = getCspmCloudShellDefaultValue(packagePolicy);
+
+ expect(result).toBe('');
+ });
+
+ it('should return empty string when policy_templates.inputs is empty', () => {
+ const packagePolicy = {
+ name: 'test',
+ policy_templates: [
+ {
+ title: '',
+ description: '',
+ name: 'cspm',
+ inputs: [{}],
+ },
+ ],
+ } as PackageInfo;
+
+ const result = getCspmCloudShellDefaultValue(packagePolicy);
+
+ expect(result).toBe('');
+ });
+
+ it('should return empty string when policy_templates.inputs is undefined', () => {
+ const packagePolicy = {
+ name: 'test',
+ policy_templates: [
+ {
+ title: '',
+ description: '',
+ name: 'cspm',
+ inputs: undefined,
+ },
+ ],
+ } as PackageInfo;
+
+ const result = getCspmCloudShellDefaultValue(packagePolicy);
+
+ expect(result).toBe('');
+ });
+
+ it('should return empty string when policy_templates.inputs.vars does not have cloud_shell_url', () => {
+ const packagePolicy = {
+ name: 'test',
+ policy_templates: [
+ {
+ title: '',
+ description: '',
+ name: 'cspm',
+ inputs: [{ vars: [{ name: 'cloud_shell_url_FAKE' }] }],
+ },
+ ],
+ } as PackageInfo;
+
+ const result = getCspmCloudShellDefaultValue(packagePolicy);
+
+ expect(result).toBe('');
+ });
+
+ it('should return empty string when policy_templates.inputs.varshave cloud_shell_url but no default', () => {
+ const packagePolicy = {
+ name: 'test',
+ policy_templates: [
+ {
+ title: '',
+ description: '',
+ name: 'cspm',
+ inputs: [{ vars: [{ name: 'cloud_shell_url' }] }],
+ },
+ ],
+ } as PackageInfo;
+
+ const result = getCspmCloudShellDefaultValue(packagePolicy);
+
+ expect(result).toBe('');
+ });
+
+ it('should cloud shell url when policy_templates.inputs.vars have cloud_shell_url', () => {
+ const packagePolicy = {
+ name: 'test',
+ policy_templates: [
+ {
+ title: '',
+ description: '',
+ name: 'cspm',
+ inputs: [
+ {
+ vars: [
+ { name: 'cloud_shell_url_FAKE', default: 'URL_FAKE' },
+ { name: 'cloud_shell_url', default: 'URL' },
+ ],
+ },
+ ],
+ },
+ ],
+ } as PackageInfo;
+
+ const result = getCspmCloudShellDefaultValue(packagePolicy);
+
+ expect(result).toBe('URL');
+ });
+});
diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/utils.ts b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/utils.ts
index 6376f2b828670..7d4233b8016df 100644
--- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/utils.ts
+++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/utils.ts
@@ -207,6 +207,7 @@ export const getPolicyTemplateInputOptions = (policyTemplate: CloudSecurityPolic
label: o.name,
icon: o.icon,
disabled: o.disabled,
+ isBeta: o.isBeta,
}));
export const getMaxPackageName = (
From 2a67e0f67cd269767dae8d0f31727bb45710e72a Mon Sep 17 00:00:00 2001
From: Philippe Oberti
Date: Fri, 11 Aug 2023 21:34:05 +0200
Subject: [PATCH 33/46] [Security Solution] expandable flyout - expandable
panel UI update (#163449)
---
...ert_details_right_panel_overview_tab.cy.ts | 49 ++---
.../alert_details_right_panel_overview_tab.ts | 67 +++---
.../alert_details_right_panel_overview_tab.ts | 52 ++---
.../left/components/correlations_details.tsx | 50 +++--
.../flyout/left/components/host_details.tsx | 17 +-
.../public/flyout/left/components/test_ids.ts | 4 -
.../flyout/left/components/user_details.tsx | 20 +-
.../flyout/preview/components/test_ids.ts | 1 -
.../flyout/preview/components/translations.ts | 5 -
.../components/analyzer_preview.test.tsx | 5 +-
.../right/components/analyzer_preview.tsx | 25 ++-
.../right/components/analyzer_tree.test.tsx | 36 ++--
.../flyout/right/components/analyzer_tree.tsx | 69 ++-----
.../components/correlations_overview.test.tsx | 41 ++--
.../components/correlations_overview.tsx | 36 ++--
.../components/entities_overview.test.tsx | 61 +++---
.../right/components/entities_overview.tsx | 72 +++----
.../right/components/entity_panel.stories.tsx | 60 ------
.../right/components/entity_panel.test.tsx | 163 ---------------
.../flyout/right/components/entity_panel.tsx | 160 ---------------
.../components/host_entity_overview.test.tsx | 57 ++++-
.../right/components/host_entity_overview.tsx | 91 ++++++--
.../right/components/insights_section.tsx | 4 +
.../insights_subsection.stories.tsx | 38 ----
.../components/insights_subsection.test.tsx | 67 ------
.../right/components/insights_subsection.tsx | 78 -------
.../components/prevalence_overview.test.tsx | 120 +++++++----
.../right/components/prevalence_overview.tsx | 38 ++--
.../prevalence_overview_row.test.tsx | 28 +--
.../components/prevalence_overview_row.tsx | 13 +-
.../right/components/session_preview.test.tsx | 32 ++-
.../right/components/session_preview.tsx | 49 +++--
.../flyout/right/components/test_ids.ts | 158 ++++++++++----
.../threat_intelligence_overview.test.tsx | 46 +++--
.../threat_intelligence_overview.tsx | 66 +++---
.../flyout/right/components/translations.ts | 107 ----------
.../components/user_entity_overview.test.tsx | 57 ++++-
.../right/components/user_entity_overview.tsx | 92 +++++++--
.../right/hooks/use_prevalence.test.tsx | 10 +-
.../flyout/right/hooks/use_prevalence.tsx | 28 +--
.../components/expandable_panel.stories.tsx | 66 ++++++
.../components/expandable_panel.test.tsx | 190 +++++++++++++++++
.../shared/components/expandable_panel.tsx | 194 ++++++++++++++++++
.../flyout/shared/components/test_ids.ts | 23 +++
.../translations/translations/fr-FR.json | 5 -
.../translations/translations/ja-JP.json | 5 -
.../translations/translations/zh-CN.json | 5 -
47 files changed, 1341 insertions(+), 1319 deletions(-)
delete mode 100644 x-pack/plugins/security_solution/public/flyout/right/components/entity_panel.stories.tsx
delete mode 100644 x-pack/plugins/security_solution/public/flyout/right/components/entity_panel.test.tsx
delete mode 100644 x-pack/plugins/security_solution/public/flyout/right/components/entity_panel.tsx
delete mode 100644 x-pack/plugins/security_solution/public/flyout/right/components/insights_subsection.stories.tsx
delete mode 100644 x-pack/plugins/security_solution/public/flyout/right/components/insights_subsection.test.tsx
delete mode 100644 x-pack/plugins/security_solution/public/flyout/right/components/insights_subsection.tsx
create mode 100644 x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.stories.tsx
create mode 100644 x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.test.tsx
create mode 100644 x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.tsx
create mode 100644 x-pack/plugins/security_solution/public/flyout/shared/components/test_ids.ts
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts
index ec8328cbc961f..977f865f4fd5b 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts
@@ -14,7 +14,7 @@ import {
import {
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ABOUT_SECTION_CONTENT,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ABOUT_SECTION_HEADER,
- DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ANALYZER_TREE,
+ DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ANALYZER_PREVIEW_CONTENT,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_DETAILS,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_TITLE,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_OPEN_RULE_PREVIEW_BUTTON,
@@ -25,8 +25,6 @@ import {
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VALUES,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITIES_CONTENT,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITIES_HEADER,
- DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITY_PANEL_CONTENT,
- DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITY_PANEL_HEADER,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_CONTENT,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_HEADER,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_VALUES,
@@ -40,17 +38,15 @@ import {
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_MITRE_ATTACK_TITLE,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_REASON_DETAILS,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_REASON_TITLE,
- DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_SESSION_PREVIEW,
+ DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_SESSION_PREVIEW_CONTENT,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_TABLE_FIELD_CELL,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_TABLE_VALUE_CELL,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_RESPONSE_SECTION_EMPTY_RESPONSE,
} from '../../../../screens/expandable_flyout/alert_details_right_panel_overview_tab';
import {
- clickCorrelationsViewAllButton,
- clickEntitiesViewAllButton,
+ navigateToCorrelationsDetails,
clickInvestigationGuideButton,
- clickPrevalenceViewAllButton,
- clickThreatIntelligenceViewAllButton,
+ navigateToPrevalenceDetails,
toggleOverviewTabAboutSection,
toggleOverviewTabInsightsSection,
toggleOverviewTabInvestigationSection,
@@ -138,13 +134,13 @@ describe('Alert details expandable flyout right panel overview tab', () => {
cy.log('analyzer graph preview');
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ANALYZER_TREE).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ANALYZER_TREE).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ANALYZER_PREVIEW_CONTENT).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ANALYZER_PREVIEW_CONTENT).should('be.visible');
cy.log('session view preview');
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_SESSION_PREVIEW).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_SESSION_PREVIEW).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_SESSION_PREVIEW_CONTENT).scrollIntoView();
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_SESSION_PREVIEW_CONTENT).should('be.visible');
});
});
@@ -219,17 +215,13 @@ describe('Alert details expandable flyout right panel overview tab', () => {
.should('be.visible')
.and('have.text', 'Entities');
cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITIES_CONTENT).should('be.visible');
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITY_PANEL_HEADER).should(
- 'be.visible'
- );
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITY_PANEL_CONTENT).should(
- 'be.visible'
- );
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITIES_HEADER).should('be.visible');
cy.log('should navigate to left panel Entities tab');
- clickEntitiesViewAllButton();
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_CONTENT).should('be.visible');
+ // TODO: skipping this section as Cypress can't seem to find the element (though it's in the DOM)
+ // navigateToEntitiesDetails();
+ // cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_CONTENT).should('be.visible');
});
// TODO: skipping this due to flakiness
@@ -266,8 +258,9 @@ describe('Alert details expandable flyout right panel overview tab', () => {
cy.log('should navigate to left panel Threat Intelligence tab');
- clickThreatIntelligenceViewAllButton();
- cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_CONTENT).should('be.visible'); // TODO update when we can navigate to Threat Intelligence sub tab directly
+ // TODO: skipping this section as Cypress can't seem to find the element (though it's in the DOM)
+ // navigateToThreatIntelligenceDetails();
+ // cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_CONTENT).should('be.visible'); // TODO update when we can navigate to Threat Intelligence sub tab directly
});
// TODO: skipping this due to flakiness
@@ -294,10 +287,6 @@ describe('Alert details expandable flyout right panel overview tab', () => {
.eq(0)
.should('be.visible')
.and('have.text', '1 alert related by ancestry');
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VALUES)
- .eq(1)
- .should('be.visible')
- .and('have.text', '1 related case');
// cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VALUES)
// .eq(2)
// .should('be.visible')
@@ -306,11 +295,15 @@ describe('Alert details expandable flyout right panel overview tab', () => {
.eq(2)
.should('be.visible')
.and('have.text', '1 alert related by session');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VALUES)
+ .eq(1)
+ .should('be.visible')
+ .and('have.text', '1 related case');
});
cy.log('should navigate to left panel Correlations tab');
- clickCorrelationsViewAllButton();
+ navigateToCorrelationsDetails();
cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_CONTENT).should('be.visible'); // TODO update when we can navigate to Correlations sub tab directly
});
@@ -337,7 +330,7 @@ describe('Alert details expandable flyout right panel overview tab', () => {
cy.log('should navigate to left panel Prevalence tab');
- clickPrevalenceViewAllButton();
+ navigateToPrevalenceDetails();
cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_CONTENT).should('be.visible'); // TODO update when we can navigate to Prevalence sub tab directly
});
});
diff --git a/x-pack/plugins/security_solution/cypress/screens/expandable_flyout/alert_details_right_panel_overview_tab.ts b/x-pack/plugins/security_solution/cypress/screens/expandable_flyout/alert_details_right_panel_overview_tab.ts
index 21fef179980d5..6bc2f1400e0ae 100644
--- a/x-pack/plugins/security_solution/cypress/screens/expandable_flyout/alert_details_right_panel_overview_tab.ts
+++ b/x-pack/plugins/security_solution/cypress/screens/expandable_flyout/alert_details_right_panel_overview_tab.ts
@@ -9,30 +9,15 @@ import { getDataTestSubjectSelector } from '../../helpers/common';
import {
ABOUT_SECTION_CONTENT_TEST_ID,
ABOUT_SECTION_HEADER_TEST_ID,
- ANALYZER_TREE_TEST_ID,
DESCRIPTION_DETAILS_TEST_ID,
DESCRIPTION_TITLE_TEST_ID,
RULE_SUMMARY_BUTTON_TEST_ID,
- ENTITIES_CONTENT_TEST_ID,
- ENTITIES_HEADER_TEST_ID,
- ENTITIES_VIEW_ALL_BUTTON_TEST_ID,
- ENTITY_PANEL_CONTENT_TEST_ID,
- ENTITY_PANEL_HEADER_TEST_ID,
HIGHLIGHTED_FIELDS_DETAILS_TEST_ID,
HIGHLIGHTED_FIELDS_TITLE_TEST_ID,
INSIGHTS_CORRELATIONS_CONTENT_TEST_ID,
- INSIGHTS_CORRELATIONS_TITLE_TEST_ID,
- INSIGHTS_CORRELATIONS_VALUE_TEST_ID,
- INSIGHTS_CORRELATIONS_VIEW_ALL_BUTTON_TEST_ID,
INSIGHTS_HEADER_TEST_ID,
INSIGHTS_PREVALENCE_CONTENT_TEST_ID,
- INSIGHTS_PREVALENCE_TITLE_TEST_ID,
- INSIGHTS_PREVALENCE_VALUE_TEST_ID,
- INSIGHTS_PREVALENCE_VIEW_ALL_BUTTON_TEST_ID,
INSIGHTS_THREAT_INTELLIGENCE_CONTENT_TEST_ID,
- INSIGHTS_THREAT_INTELLIGENCE_TITLE_TEST_ID,
- INSIGHTS_THREAT_INTELLIGENCE_VALUE_TEST_ID,
- INSIGHTS_THREAT_INTELLIGENCE_VIEW_ALL_BUTTON_TEST_ID,
INVESTIGATION_GUIDE_BUTTON_TEST_ID,
INVESTIGATION_SECTION_CONTENT_TEST_ID,
INVESTIGATION_SECTION_HEADER_TEST_ID,
@@ -40,11 +25,20 @@ import {
MITRE_ATTACK_TITLE_TEST_ID,
REASON_DETAILS_TEST_ID,
REASON_TITLE_TEST_ID,
- SESSION_PREVIEW_TEST_ID,
VISUALIZATIONS_SECTION_HEADER_TEST_ID,
HIGHLIGHTED_FIELDS_CELL_TEST_ID,
RESPONSE_SECTION_HEADER_TEST_ID,
RESPONSE_EMPTY_TEST_ID,
+ INSIGHTS_ENTITIES_TITLE_LINK_TEST_ID,
+ INSIGHTS_ENTITIES_CONTENT_TEST_ID,
+ INSIGHTS_THREAT_INTELLIGENCE_TITLE_LINK_TEST_ID,
+ INSIGHTS_CORRELATIONS_TITLE_LINK_TEST_ID,
+ INSIGHTS_PREVALENCE_TITLE_LINK_TEST_ID,
+ INSIGHTS_THREAT_INTELLIGENCE_VALUE_TEST_ID,
+ INSIGHTS_CORRELATIONS_VALUE_TEST_ID,
+ ANALYZER_PREVIEW_CONTENT_TEST_ID,
+ SESSION_PREVIEW_CONTENT_TEST_ID,
+ INSIGHTS_PREVALENCE_VALUE_TEST_ID,
} from '../../../public/flyout/right/components/test_ids';
/* About section */
@@ -94,50 +88,49 @@ export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INVESTIGATION_GUIDE_BUTTON =
export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_SECTION_HEADER =
getDataTestSubjectSelector(INSIGHTS_HEADER_TEST_ID);
+
+/* Insights Entities */
+
export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITIES_HEADER =
- getDataTestSubjectSelector(ENTITIES_HEADER_TEST_ID);
+ getDataTestSubjectSelector(INSIGHTS_ENTITIES_TITLE_LINK_TEST_ID);
export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITIES_CONTENT =
- getDataTestSubjectSelector(ENTITIES_CONTENT_TEST_ID);
-export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_VIEW_ALL_ENTITIES_BUTTON =
- getDataTestSubjectSelector(ENTITIES_VIEW_ALL_BUTTON_TEST_ID);
-export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITY_PANEL_HEADER =
- getDataTestSubjectSelector(ENTITY_PANEL_HEADER_TEST_ID);
-export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITY_PANEL_CONTENT =
- getDataTestSubjectSelector(ENTITY_PANEL_CONTENT_TEST_ID);
+ getDataTestSubjectSelector(INSIGHTS_ENTITIES_CONTENT_TEST_ID);
+
+/* Insights Threat Intelligence */
+
export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_HEADER =
- getDataTestSubjectSelector(INSIGHTS_THREAT_INTELLIGENCE_TITLE_TEST_ID);
+ getDataTestSubjectSelector(INSIGHTS_THREAT_INTELLIGENCE_TITLE_LINK_TEST_ID);
export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_CONTENT =
getDataTestSubjectSelector(INSIGHTS_THREAT_INTELLIGENCE_CONTENT_TEST_ID);
export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_VALUES =
getDataTestSubjectSelector(INSIGHTS_THREAT_INTELLIGENCE_VALUE_TEST_ID);
-export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_VIEW_ALL_BUTTON =
- getDataTestSubjectSelector(INSIGHTS_THREAT_INTELLIGENCE_VIEW_ALL_BUTTON_TEST_ID);
+
+/* Insights Correlations */
+
export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_HEADER =
- getDataTestSubjectSelector(INSIGHTS_CORRELATIONS_TITLE_TEST_ID);
+ getDataTestSubjectSelector(INSIGHTS_CORRELATIONS_TITLE_LINK_TEST_ID);
export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_CONTENT =
getDataTestSubjectSelector(INSIGHTS_CORRELATIONS_CONTENT_TEST_ID);
export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VALUES =
getDataTestSubjectSelector(INSIGHTS_CORRELATIONS_VALUE_TEST_ID);
-export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VIEW_ALL_BUTTON =
- getDataTestSubjectSelector(INSIGHTS_CORRELATIONS_VIEW_ALL_BUTTON_TEST_ID);
+
+/* Insights Prevalence */
export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_HEADER =
- getDataTestSubjectSelector(INSIGHTS_PREVALENCE_TITLE_TEST_ID);
+ getDataTestSubjectSelector(INSIGHTS_PREVALENCE_TITLE_LINK_TEST_ID);
export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_CONTENT =
getDataTestSubjectSelector(INSIGHTS_PREVALENCE_CONTENT_TEST_ID);
export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_VALUES =
getDataTestSubjectSelector(INSIGHTS_PREVALENCE_VALUE_TEST_ID);
-export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_VIEW_ALL_BUTTON =
- getDataTestSubjectSelector(INSIGHTS_PREVALENCE_VIEW_ALL_BUTTON_TEST_ID);
/* Visualization section */
export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_VISUALIZATIONS_SECTION_HEADER =
getDataTestSubjectSelector(VISUALIZATIONS_SECTION_HEADER_TEST_ID);
-export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ANALYZER_TREE =
- getDataTestSubjectSelector(ANALYZER_TREE_TEST_ID);
-export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_SESSION_PREVIEW =
- getDataTestSubjectSelector(SESSION_PREVIEW_TEST_ID);
+export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ANALYZER_PREVIEW_CONTENT =
+ getDataTestSubjectSelector(ANALYZER_PREVIEW_CONTENT_TEST_ID);
+export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_SESSION_PREVIEW_CONTENT =
+ getDataTestSubjectSelector(SESSION_PREVIEW_CONTENT_TEST_ID);
/* Response section */
diff --git a/x-pack/plugins/security_solution/cypress/tasks/expandable_flyout/alert_details_right_panel_overview_tab.ts b/x-pack/plugins/security_solution/cypress/tasks/expandable_flyout/alert_details_right_panel_overview_tab.ts
index f1f4f2a74d429..90b040845812b 100644
--- a/x-pack/plugins/security_solution/cypress/tasks/expandable_flyout/alert_details_right_panel_overview_tab.ts
+++ b/x-pack/plugins/security_solution/cypress/tasks/expandable_flyout/alert_details_right_panel_overview_tab.ts
@@ -5,15 +5,17 @@
* 2.0.
*/
+import {
+ INSIGHTS_CORRELATIONS_TITLE_LINK_TEST_ID,
+ INSIGHTS_ENTITIES_TITLE_LINK_TEST_ID,
+ INSIGHTS_PREVALENCE_TITLE_LINK_TEST_ID,
+ INSIGHTS_THREAT_INTELLIGENCE_TITLE_LINK_TEST_ID,
+} from '../../../public/flyout/right/components/test_ids';
import {
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ABOUT_SECTION_HEADER,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_VISUALIZATIONS_SECTION_HEADER,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_SECTION_HEADER,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INVESTIGATION_SECTION_HEADER,
- DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_VIEW_ALL_ENTITIES_BUTTON,
- DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VIEW_ALL_BUTTON,
- DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_VIEW_ALL_BUTTON,
- DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_VIEW_ALL_BUTTON,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INVESTIGATION_GUIDE_BUTTON,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_TITLE,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_OPEN_RULE_PREVIEW_BUTTON,
@@ -53,47 +55,35 @@ export const toggleOverviewTabInsightsSection = () => {
};
/**
- * Click on the view all button under the right section, Insights, Entities
+ * Click on the header in the right section, Insights, Entities
*/
-export const clickEntitiesViewAllButton = () => {
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_VIEW_ALL_ENTITIES_BUTTON).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_VIEW_ALL_ENTITIES_BUTTON)
- .should('be.visible')
- .click();
+export const navigateToEntitiesDetails = () => {
+ cy.get(INSIGHTS_ENTITIES_TITLE_LINK_TEST_ID).scrollIntoView();
+ cy.get(INSIGHTS_ENTITIES_TITLE_LINK_TEST_ID).should('be.visible').click();
};
/**
- * Click on the view all button under the right section, Insights, Threat Intelligence
+ * Click on the header in the right section, Insights, Threat Intelligence
*/
-export const clickThreatIntelligenceViewAllButton = () => {
- cy.get(
- DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_VIEW_ALL_BUTTON
- ).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_THREAT_INTELLIGENCE_VIEW_ALL_BUTTON)
- .should('be.visible')
- .click();
+export const navigateToThreatIntelligenceDetails = () => {
+ cy.get(INSIGHTS_THREAT_INTELLIGENCE_TITLE_LINK_TEST_ID).scrollIntoView();
+ cy.get(INSIGHTS_THREAT_INTELLIGENCE_TITLE_LINK_TEST_ID).should('be.visible').click();
};
/**
- * Click on the view all button under the right section, Insights, Correlations
+ * Click on the header in the right section, Insights, Correlations
*/
-export const clickCorrelationsViewAllButton = () => {
- cy.get(
- DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VIEW_ALL_BUTTON
- ).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VIEW_ALL_BUTTON)
- .should('be.visible')
- .click();
+export const navigateToCorrelationsDetails = () => {
+ cy.get(INSIGHTS_CORRELATIONS_TITLE_LINK_TEST_ID).scrollIntoView();
+ cy.get(INSIGHTS_CORRELATIONS_TITLE_LINK_TEST_ID).should('be.visible').click();
};
/**
* Click on the view all button under the right section, Insights, Prevalence
*/
-export const clickPrevalenceViewAllButton = () => {
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_VIEW_ALL_BUTTON).scrollIntoView();
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_PREVALENCE_VIEW_ALL_BUTTON)
- .should('be.visible')
- .click();
+export const navigateToPrevalenceDetails = () => {
+ cy.get(INSIGHTS_PREVALENCE_TITLE_LINK_TEST_ID).scrollIntoView();
+ cy.get(INSIGHTS_PREVALENCE_TITLE_LINK_TEST_ID).should('be.visible').click();
};
/* Visualizations section */
diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/correlations_details.tsx b/x-pack/plugins/security_solution/public/flyout/left/components/correlations_details.tsx
index f0dfab8bb1cbd..85b497716b32d 100644
--- a/x-pack/plugins/security_solution/public/flyout/left/components/correlations_details.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/left/components/correlations_details.tsx
@@ -21,7 +21,6 @@ import { useLeftPanelContext } from '../context';
import { useRouteSpy } from '../../../common/utils/route/use_route_spy';
import { SecurityPageName } from '../../../../common';
import { SourcererScopeName } from '../../../common/store/sourcerer/model';
-import { EntityPanel } from '../../right/components/entity_panel';
import { AlertsTable } from './correlations_details_alerts_table';
import { ERROR_MESSAGE, ERROR_TITLE } from '../../shared/translations';
import {
@@ -41,6 +40,7 @@ import {
SESSION_ALERTS_HEADING,
SOURCE_ALERTS_HEADING,
} from './translations';
+import { ExpandablePanel } from '../../shared/components/expandable_panel';
export const CORRELATIONS_TAB_ID = 'correlations-details';
@@ -105,56 +105,64 @@ export const CorrelationsDetails: React.FC = () => {
return (
<>
-
-
+
-
-
+
-
-
+
-
-
+
>
);
};
diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/host_details.tsx b/x-pack/plugins/security_solution/public/flyout/left/components/host_details.tsx
index 269aff686cf61..731bfeda95712 100644
--- a/x-pack/plugins/security_solution/public/flyout/left/components/host_details.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/left/components/host_details.tsx
@@ -20,9 +20,9 @@ import {
EuiIcon,
} from '@elastic/eui';
import type { EuiBasicTableColumn } from '@elastic/eui';
+import { ExpandablePanel } from '../../shared/components/expandable_panel';
import type { RelatedUser } from '../../../../common/search_strategy/security_solution/related_entities/related_users';
import type { RiskSeverity } from '../../../../common/search_strategy';
-import { EntityPanel } from '../../right/components/entity_panel';
import { HostOverview } from '../../../overview/components/host_overview';
import { AnomalyTableProvider } from '../../../common/components/ml/anomaly/anomaly_table_provider';
import { InspectButton, InspectButtonContainer } from '../../../common/components/inspect';
@@ -210,12 +210,13 @@ export const HostDetails: React.FC = ({ hostName, timestamp })
{i18n.HOSTS_TITLE}
-
@@ -284,7 +285,7 @@ export const HostDetails: React.FC = ({ hostName, timestamp })
inspectIndex={0}
/>
-
+
>
);
};
diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/left/components/test_ids.ts
index f2ea803b53a9f..ea58b280a101e 100644
--- a/x-pack/plugins/security_solution/public/flyout/left/components/test_ids.ts
+++ b/x-pack/plugins/security_solution/public/flyout/left/components/test_ids.ts
@@ -55,16 +55,12 @@ export const HOST_DETAILS_INFO_TEST_ID = 'host-overview';
export const HOST_DETAILS_RELATED_USERS_TABLE_TEST_ID =
`${PREFIX}HostsDetailsRelatedUsersTable` as const;
-export const THREAT_INTELLIGENCE_DETAILS_TEST_ID = `${PREFIX}ThreatIntelligenceDetails` as const;
-export const PREVALENCE_DETAILS_TEST_ID = `${PREFIX}PrevalenceDetails` as const;
export const CORRELATIONS_DETAILS_TEST_ID = `${PREFIX}CorrelationsDetails` as const;
export const THREAT_INTELLIGENCE_DETAILS_ENRICHMENTS_TEST_ID = `threat-match-detected` as const;
export const THREAT_INTELLIGENCE_DETAILS_SPINNER_TEST_ID =
`${PREFIX}ThreatIntelligenceDetailsLoadingSpinner` as const;
-export const INVESTIGATION_TEST_ID = `${PREFIX}Investigation` as const;
-
export const CORRELATIONS_DETAILS_ERROR_TEST_ID = `${CORRELATIONS_DETAILS_TEST_ID}Error` as const;
export const CORRELATIONS_DETAILS_BY_ANCESTRY_TABLE_TEST_ID =
diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/user_details.tsx b/x-pack/plugins/security_solution/public/flyout/left/components/user_details.tsx
index bc0066f2488fd..ea55f811c341a 100644
--- a/x-pack/plugins/security_solution/public/flyout/left/components/user_details.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/left/components/user_details.tsx
@@ -20,9 +20,9 @@ import {
EuiToolTip,
} from '@elastic/eui';
import type { EuiBasicTableColumn } from '@elastic/eui';
+import { ExpandablePanel } from '../../shared/components/expandable_panel';
import type { RelatedHost } from '../../../../common/search_strategy/security_solution/related_entities/related_hosts';
import type { RiskSeverity } from '../../../../common/search_strategy';
-import { EntityPanel } from '../../right/components/entity_panel';
import { UserOverview } from '../../../overview/components/user_overview';
import { AnomalyTableProvider } from '../../../common/components/ml/anomaly/anomaly_table_provider';
import { InspectButton, InspectButtonContainer } from '../../../common/components/inspect';
@@ -211,12 +211,16 @@ export const UserDetails: React.FC = ({ userName, timestamp })
{i18n.USERS_TITLE}
-
@@ -284,7 +288,7 @@ export const UserDetails: React.FC = ({ userName, timestamp })
inspectIndex={0}
/>
-
+
>
);
};
diff --git a/x-pack/plugins/security_solution/public/flyout/preview/components/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/preview/components/test_ids.ts
index 32a26d3f87db9..1c27fd7472fca 100644
--- a/x-pack/plugins/security_solution/public/flyout/preview/components/test_ids.ts
+++ b/x-pack/plugins/security_solution/public/flyout/preview/components/test_ids.ts
@@ -36,6 +36,5 @@ export const RULE_PREVIEW_ACTIONS_HEADER_TEST_ID = RULE_PREVIEW_ACTIONS_TEST_ID
export const RULE_PREVIEW_ACTIONS_CONTENT_TEST_ID = RULE_PREVIEW_ACTIONS_TEST_ID + CONTENT_TEST_ID;
export const RULE_PREVIEW_LOADING_TEST_ID =
'securitySolutionDocumentDetailsFlyoutRulePreviewLoadingSpinner';
-export const RULE_PREVIEW_HEADER_TEST_ID = 'securitySolutionDocumentDetailsFlyoutRulePreviewHeader';
export const RULE_PREVIEW_FOOTER_TEST_ID = 'securitySolutionDocumentDetailsFlyoutRulePreviewFooter';
export const RULE_PREVIEW_NAVIGATE_TO_RULE_TEST_ID = 'goToRuleDetails';
diff --git a/x-pack/plugins/security_solution/public/flyout/preview/components/translations.ts b/x-pack/plugins/security_solution/public/flyout/preview/components/translations.ts
index 8112b796c1d39..e3f3b1fd095fb 100644
--- a/x-pack/plugins/security_solution/public/flyout/preview/components/translations.ts
+++ b/x-pack/plugins/security_solution/public/flyout/preview/components/translations.ts
@@ -31,8 +31,3 @@ export const RULE_PREVIEW_ACTIONS_TEXT = i18n.translate(
'xpack.securitySolution.flyout.documentDetails.rulePreviewActionsSectionText',
{ defaultMessage: 'Actions' }
);
-
-export const ENABLE_RULE_TEXT = i18n.translate(
- 'xpack.securitySolution.flyout.documentDetails.rulePreviewEnableRuleText',
- { defaultMessage: 'Enable' }
-);
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview.test.tsx
index dc96b74bc52a6..8d691ad870892 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview.test.tsx
@@ -13,7 +13,7 @@ import { mockContextValue } from '../mocks/mock_right_panel_context';
import { mockDataFormattedForFieldBrowser } from '../mocks/mock_context';
import { RightPanelContext } from '../context';
import { AnalyzerPreview } from './analyzer_preview';
-import { ANALYZER_PREVIEW_TEST_ID, ANALYZER_TREE_TEST_ID } from './test_ids';
+import { ANALYZER_PREVIEW_TEST_ID } from './test_ids';
import * as mock from '../mocks/mock_analyzer_data';
jest.mock('../../../common/containers/alerts/use_alert_prevalence_from_process_tree', () => ({
@@ -65,7 +65,6 @@ describe(' ', () => {
indices: ['rule-parameters-index'],
});
expect(wrapper.getByTestId(ANALYZER_PREVIEW_TEST_ID)).toBeInTheDocument();
- expect(wrapper.getByTestId(ANALYZER_TREE_TEST_ID)).toBeInTheDocument();
});
it('does not show analyzer preview when documentid and index are not present', () => {
@@ -88,6 +87,6 @@ describe(' ', () => {
documentId: '',
indices: [],
});
- expect(queryByTestId(ANALYZER_TREE_TEST_ID)).not.toBeInTheDocument();
+ expect(queryByTestId(ANALYZER_PREVIEW_TEST_ID)).not.toBeInTheDocument();
});
});
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview.tsx
index 33b1c56e43e8a..e26ede68bc397 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview.tsx
@@ -6,7 +6,6 @@
*/
import React, { useEffect, useState } from 'react';
import { find } from 'lodash/fp';
-import { ANALYZER_PREVIEW_TEST_ID } from './test_ids';
import { useRightPanelContext } from '../context';
import { useAlertPrevalenceFromProcessTree } from '../../../common/containers/alerts/use_alert_prevalence_from_process_tree';
import type { StatsNode } from '../../../common/containers/alerts/use_alert_prevalence_from_process_tree';
@@ -50,19 +49,19 @@ export const AnalyzerPreview: React.FC = () => {
}
}, [statsNodes, setCache]);
+ if (!documentId || !index) {
+ return null;
+ }
+
return (
-
- {documentId && index && (
-
- )}
-
+
);
};
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_tree.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_tree.test.tsx
index cf05f61ace9eb..ce29b9959ff8c 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_tree.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_tree.test.tsx
@@ -8,10 +8,12 @@
import React from 'react';
import { render } from '@testing-library/react';
import {
- ANALYZER_TREE_TEST_ID,
- ANALYZER_TREE_LOADING_TEST_ID,
- ANALYZER_TREE_ERROR_TEST_ID,
- ANALYZER_TREE_VIEW_DETAILS_BUTTON_TEST_ID,
+ ANALYZER_PREVIEW_TOGGLE_ICON_TEST_ID,
+ ANALYZER_PREVIEW_TITLE_LINK_TEST_ID,
+ ANALYZER_PREVIEW_TITLE_ICON_TEST_ID,
+ ANALYZER_PREVIEW_CONTENT_TEST_ID,
+ ANALYZER_PREVIEW_TITLE_TEXT_TEST_ID,
+ ANALYZER_PREVIEW_LOADING_TEST_ID,
} from './test_ids';
import { ANALYZER_PREVIEW_TITLE } from './translations';
import * as mock from '../mocks/mock_analyzer_data';
@@ -51,10 +53,19 @@ const renderAnalyzerTree = (children: React.ReactNode) =>
);
describe(' ', () => {
+ it('should render wrapper component', () => {
+ const { getByTestId, queryByTestId } = renderAnalyzerTree( );
+ expect(queryByTestId(ANALYZER_PREVIEW_TOGGLE_ICON_TEST_ID)).not.toBeInTheDocument();
+ expect(getByTestId(ANALYZER_PREVIEW_TITLE_LINK_TEST_ID)).toBeInTheDocument();
+ expect(getByTestId(ANALYZER_PREVIEW_TITLE_ICON_TEST_ID)).toBeInTheDocument();
+ expect(getByTestId(ANALYZER_PREVIEW_CONTENT_TEST_ID)).toBeInTheDocument();
+ expect(queryByTestId(ANALYZER_PREVIEW_TITLE_TEXT_TEST_ID)).not.toBeInTheDocument();
+ });
+
it('should render the component when data is passed', () => {
const { getByTestId, getByText } = renderAnalyzerTree( );
expect(getByText(ANALYZER_PREVIEW_TITLE)).toBeInTheDocument();
- expect(getByTestId(ANALYZER_TREE_TEST_ID)).toBeInTheDocument();
+ expect(getByTestId(ANALYZER_PREVIEW_CONTENT_TEST_ID)).toBeInTheDocument();
});
it('should render blank when data is not passed', () => {
@@ -62,26 +73,23 @@ describe(' ', () => {
);
expect(queryByText(ANALYZER_PREVIEW_TITLE)).not.toBeInTheDocument();
- expect(queryByTestId(ANALYZER_TREE_TEST_ID)).not.toBeInTheDocument();
+ expect(queryByTestId(ANALYZER_PREVIEW_CONTENT_TEST_ID)).not.toBeInTheDocument();
});
it('should render loading spinner when loading is true', () => {
const { getByTestId } = renderAnalyzerTree( );
- expect(getByTestId(ANALYZER_TREE_LOADING_TEST_ID)).toBeInTheDocument();
+ expect(getByTestId(ANALYZER_PREVIEW_LOADING_TEST_ID)).toBeInTheDocument();
});
- it('should display error message when error is true', () => {
- const { getByTestId, getByText } = renderAnalyzerTree(
-
- );
- expect(getByText('Unable to display analyzer preview.')).toBeInTheDocument();
- expect(getByTestId(ANALYZER_TREE_ERROR_TEST_ID)).toBeInTheDocument();
+ it('should not render when error is true', () => {
+ const { getByTestId } = renderAnalyzerTree( );
+ expect(getByTestId(ANALYZER_PREVIEW_CONTENT_TEST_ID)).toBeEmptyDOMElement();
});
it('should navigate to left section Visualize tab when clicking on title', () => {
const { getByTestId } = renderAnalyzerTree( );
- getByTestId(ANALYZER_TREE_VIEW_DETAILS_BUTTON_TEST_ID).click();
+ getByTestId(ANALYZER_PREVIEW_TITLE_LINK_TEST_ID).click();
expect(flyoutContextValue.openLeftPanel).toHaveBeenCalledWith({
id: LeftPanelKey,
path: LeftPanelVisualizeTabPath,
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_tree.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_tree.tsx
index 34b0274dd55af..87504dc05818f 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_tree.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_tree.tsx
@@ -5,26 +5,15 @@
* 2.0.
*/
import React, { useCallback, useMemo } from 'react';
-import {
- EuiPanel,
- EuiButtonEmpty,
- EuiTreeView,
- EuiLoadingSpinner,
- EuiEmptyPrompt,
-} from '@elastic/eui';
+import { EuiTreeView } from '@elastic/eui';
import { useExpandableFlyoutContext } from '@kbn/expandable-flyout';
+import { ExpandablePanel } from '../../shared/components/expandable_panel';
import { useRightPanelContext } from '../context';
import { LeftPanelKey, LeftPanelVisualizeTabPath } from '../../left';
-import { ANALYZER_PREVIEW_TITLE, ANALYZER_PREVIEW_TEXT } from './translations';
-import {
- ANALYZER_TREE_TEST_ID,
- ANALYZER_TREE_LOADING_TEST_ID,
- ANALYZER_TREE_ERROR_TEST_ID,
- ANALYZER_TREE_VIEW_DETAILS_BUTTON_TEST_ID,
-} from './test_ids';
+import { ANALYZER_PREVIEW_TITLE } from './translations';
+import { ANALYZER_PREVIEW_TEST_ID } from './test_ids';
import type { StatsNode } from '../../../common/containers/alerts/use_alert_prevalence_from_process_tree';
import { getTreeNodes } from '../utils/analyzer_helpers';
-import { ERROR_TITLE, ERROR_MESSAGE } from '../../shared/translations';
export interface AnalyzerTreeProps {
/**
@@ -83,42 +72,24 @@ export const AnalyzerTree: React.FC = ({
});
}, [eventId, openLeftPanel, indexName, scopeId]);
- if (loading) {
- return ;
- }
-
- if (error) {
- return (
- {ERROR_TITLE(ANALYZER_PREVIEW_TEXT)}}
- body={{ERROR_MESSAGE(ANALYZER_PREVIEW_TEXT)}
}
- data-test-subj={ANALYZER_TREE_ERROR_TEST_ID}
- />
- );
- }
-
if (items && items.length !== 0) {
return (
-
-
-
- {ANALYZER_PREVIEW_TITLE}
-
-
-
-
+
+
+
);
}
return null;
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.test.tsx
index dfd81606c10bd..b5be75716664a 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.test.tsx
@@ -9,16 +9,18 @@ import React from 'react';
import { render } from '@testing-library/react';
import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context';
import { RightPanelContext } from '../context';
-import {
- INSIGHTS_CORRELATIONS_CONTENT_TEST_ID,
- INSIGHTS_CORRELATIONS_LOADING_TEST_ID,
- INSIGHTS_CORRELATIONS_TITLE_TEST_ID,
- INSIGHTS_CORRELATIONS_VIEW_ALL_BUTTON_TEST_ID,
-} from './test_ids';
import { TestProviders } from '../../../common/mock';
import { CorrelationsOverview } from './correlations_overview';
import { LeftPanelInsightsTabPath, LeftPanelKey } from '../../left';
import { useCorrelations } from '../../shared/hooks/use_correlations';
+import {
+ INSIGHTS_CORRELATIONS_CONTENT_TEST_ID,
+ INSIGHTS_CORRELATIONS_LOADING_TEST_ID,
+ INSIGHTS_CORRELATIONS_TITLE_ICON_TEST_ID,
+ INSIGHTS_CORRELATIONS_TITLE_LINK_TEST_ID,
+ INSIGHTS_CORRELATIONS_TITLE_TEXT_TEST_ID,
+ INSIGHTS_CORRELATIONS_TOGGLE_ICON_TEST_ID,
+} from './test_ids';
jest.mock('../../shared/hooks/use_correlations');
@@ -38,8 +40,22 @@ const renderCorrelationsOverview = (contextValue: RightPanelContext) => (
);
-describe(' ', () => {
- it('should show component with all rows in summary panel', () => {
+describe(' ', () => {
+ it('should render wrapper component', () => {
+ (useCorrelations as jest.Mock).mockReturnValue({
+ loading: false,
+ error: false,
+ data: [],
+ });
+
+ const { getByTestId, queryByTestId } = render(renderCorrelationsOverview(panelContextValue));
+ expect(queryByTestId(INSIGHTS_CORRELATIONS_TOGGLE_ICON_TEST_ID)).not.toBeInTheDocument();
+ expect(getByTestId(INSIGHTS_CORRELATIONS_TITLE_LINK_TEST_ID)).toBeInTheDocument();
+ expect(getByTestId(INSIGHTS_CORRELATIONS_TITLE_ICON_TEST_ID)).toBeInTheDocument();
+ expect(queryByTestId(INSIGHTS_CORRELATIONS_TITLE_TEXT_TEST_ID)).not.toBeInTheDocument();
+ });
+
+ it('should show component with all rows in expandable panel', () => {
(useCorrelations as jest.Mock).mockReturnValue({
loading: false,
error: false,
@@ -53,7 +69,7 @@ describe(' ', () => {
});
const { getByTestId } = render(renderCorrelationsOverview(panelContextValue));
- expect(getByTestId(INSIGHTS_CORRELATIONS_TITLE_TEST_ID)).toHaveTextContent('Correlations');
+ expect(getByTestId(INSIGHTS_CORRELATIONS_TITLE_LINK_TEST_ID)).toHaveTextContent('Correlations');
expect(getByTestId(INSIGHTS_CORRELATIONS_CONTENT_TEST_ID)).toHaveTextContent('1 related case');
expect(getByTestId(INSIGHTS_CORRELATIONS_CONTENT_TEST_ID)).toHaveTextContent(
'2 alerts related by ancestry'
@@ -64,7 +80,6 @@ describe(' ', () => {
expect(getByTestId(INSIGHTS_CORRELATIONS_CONTENT_TEST_ID)).toHaveTextContent(
'4 alerts related by session'
);
- expect(getByTestId(INSIGHTS_CORRELATIONS_VIEW_ALL_BUTTON_TEST_ID)).toBeInTheDocument();
});
it('should hide row if data is missing', () => {
@@ -93,8 +108,8 @@ describe(' ', () => {
dataCount: 0,
});
- const { container } = render(renderCorrelationsOverview(panelContextValue));
- expect(container).toBeEmptyDOMElement();
+ const { getByTestId } = render(renderCorrelationsOverview(panelContextValue));
+ expect(getByTestId(INSIGHTS_CORRELATIONS_CONTENT_TEST_ID)).toBeEmptyDOMElement();
});
it('should render loading if any rows are loading', () => {
@@ -136,7 +151,7 @@ describe(' ', () => {
);
- getByTestId(INSIGHTS_CORRELATIONS_VIEW_ALL_BUTTON_TEST_ID).click();
+ getByTestId(INSIGHTS_CORRELATIONS_TITLE_LINK_TEST_ID).click();
expect(flyoutContextValue.openLeftPanel).toHaveBeenCalledWith({
id: LeftPanelKey,
path: LeftPanelInsightsTabPath,
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.tsx
index 3936e80155a0d..92bf782f4988a 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.tsx
@@ -6,14 +6,14 @@
*/
import React, { useCallback, useMemo } from 'react';
-import { EuiButtonEmpty, EuiFlexGroup, EuiPanel } from '@elastic/eui';
+import { EuiFlexGroup } from '@elastic/eui';
import { useExpandableFlyoutContext } from '@kbn/expandable-flyout';
+import { ExpandablePanel } from '../../shared/components/expandable_panel';
import { InsightsSummaryRow } from './insights_summary_row';
import { useCorrelations } from '../../shared/hooks/use_correlations';
import { INSIGHTS_CORRELATIONS_TEST_ID } from './test_ids';
-import { InsightsSubSection } from './insights_subsection';
import { useRightPanelContext } from '../context';
-import { CORRELATIONS_TEXT, CORRELATIONS_TITLE, VIEW_ALL } from './translations';
+import { CORRELATIONS_TITLE } from './translations';
import { LeftPanelKey, LeftPanelInsightsTabPath } from '../../left';
/**
@@ -60,27 +60,19 @@ export const CorrelationsOverview: React.FC = () => {
);
return (
-
-
-
- {correlationRows}
-
-
-
- {VIEW_ALL(CORRELATIONS_TEXT)}
-
-
+
+ {correlationRows}
+
+
);
};
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.test.tsx
index d059b5180abab..29bb8068281ae 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.test.tsx
@@ -9,18 +9,40 @@ import React from 'react';
import { render } from '@testing-library/react';
import { RightPanelContext } from '../context';
import {
- ENTITIES_HEADER_TEST_ID,
- ENTITIES_USER_CONTENT_TEST_ID,
- ENTITIES_HOST_CONTENT_TEST_ID,
ENTITIES_HOST_OVERVIEW_TEST_ID,
ENTITIES_USER_OVERVIEW_TEST_ID,
+ INSIGHTS_ENTITIES_TOGGLE_ICON_TEST_ID,
+ INSIGHTS_ENTITIES_TITLE_LINK_TEST_ID,
+ INSIGHTS_ENTITIES_TITLE_ICON_TEST_ID,
+ INSIGHTS_ENTITIES_TITLE_TEXT_TEST_ID,
} from './test_ids';
import { EntitiesOverview } from './entities_overview';
import { TestProviders } from '../../../common/mock';
import { mockGetFieldsData } from '../mocks/mock_context';
describe(' ', () => {
- it('should render user and host by default', () => {
+ it('should render wrapper component', () => {
+ const contextValue = {
+ eventId: 'event id',
+ getFieldsData: mockGetFieldsData,
+ } as unknown as RightPanelContext;
+
+ const { getByTestId, queryByTestId } = render(
+
+
+
+
+
+ );
+
+ expect(queryByTestId(INSIGHTS_ENTITIES_TOGGLE_ICON_TEST_ID)).not.toBeInTheDocument();
+ expect(getByTestId(INSIGHTS_ENTITIES_TITLE_LINK_TEST_ID)).toBeInTheDocument();
+ expect(getByTestId(INSIGHTS_ENTITIES_TITLE_LINK_TEST_ID)).toHaveTextContent('Entities');
+ expect(getByTestId(INSIGHTS_ENTITIES_TITLE_ICON_TEST_ID)).toBeInTheDocument();
+ expect(queryByTestId(INSIGHTS_ENTITIES_TITLE_TEXT_TEST_ID)).not.toBeInTheDocument();
+ });
+
+ it('should render user and host', () => {
const contextValue = {
eventId: 'event id',
getFieldsData: mockGetFieldsData,
@@ -33,9 +55,8 @@ describe(' ', () => {
);
- expect(getByTestId(ENTITIES_HEADER_TEST_ID)).toHaveTextContent('Entities');
- expect(getByTestId(ENTITIES_USER_CONTENT_TEST_ID)).toBeInTheDocument();
- expect(getByTestId(ENTITIES_HOST_CONTENT_TEST_ID)).toBeInTheDocument();
+ expect(getByTestId(ENTITIES_USER_OVERVIEW_TEST_ID)).toBeInTheDocument();
+ expect(getByTestId(ENTITIES_HOST_OVERVIEW_TEST_ID)).toBeInTheDocument();
});
it('should only render user when host name is null', () => {
@@ -44,7 +65,7 @@ describe(' ', () => {
getFieldsData: (field: string) => (field === 'user.name' ? 'user1' : null),
} as unknown as RightPanelContext;
- const { queryByTestId, queryByText, getByTestId } = render(
+ const { queryByTestId, getByTestId } = render(
@@ -52,10 +73,8 @@ describe(' ', () => {
);
- expect(getByTestId(ENTITIES_USER_CONTENT_TEST_ID)).toBeInTheDocument();
- expect(queryByTestId(ENTITIES_HOST_CONTENT_TEST_ID)).not.toBeInTheDocument();
- expect(queryByText('user1')).toBeInTheDocument();
- expect(queryByTestId(ENTITIES_USER_OVERVIEW_TEST_ID)).toBeInTheDocument();
+ expect(getByTestId(ENTITIES_USER_OVERVIEW_TEST_ID)).toBeInTheDocument();
+ expect(queryByTestId(ENTITIES_HOST_OVERVIEW_TEST_ID)).not.toBeInTheDocument();
});
it('should only render host when user name is null', () => {
@@ -64,7 +83,7 @@ describe(' ', () => {
getFieldsData: (field: string) => (field === 'host.name' ? 'host1' : null),
} as unknown as RightPanelContext;
- const { queryByTestId, queryByText, getByTestId } = render(
+ const { queryByTestId, getByTestId } = render(
@@ -72,10 +91,8 @@ describe(' ', () => {
);
- expect(getByTestId(ENTITIES_HOST_CONTENT_TEST_ID)).toBeInTheDocument();
- expect(queryByTestId(ENTITIES_USER_CONTENT_TEST_ID)).not.toBeInTheDocument();
- expect(queryByText('host1')).toBeInTheDocument();
- expect(queryByTestId(ENTITIES_HOST_OVERVIEW_TEST_ID)).toBeInTheDocument();
+ expect(getByTestId(ENTITIES_HOST_OVERVIEW_TEST_ID)).toBeInTheDocument();
+ expect(queryByTestId(ENTITIES_USER_OVERVIEW_TEST_ID)).not.toBeInTheDocument();
});
it('should not render if both host name and user name are null/blank', () => {
@@ -84,7 +101,7 @@ describe(' ', () => {
getFieldsData: (field: string) => {},
} as unknown as RightPanelContext;
- const { queryByTestId } = render(
+ const { container } = render(
@@ -92,9 +109,7 @@ describe(' ', () => {
);
- expect(queryByTestId(ENTITIES_HEADER_TEST_ID)).not.toBeInTheDocument();
- expect(queryByTestId(ENTITIES_HOST_CONTENT_TEST_ID)).not.toBeInTheDocument();
- expect(queryByTestId(ENTITIES_USER_CONTENT_TEST_ID)).not.toBeInTheDocument();
+ expect(container).toBeEmptyDOMElement();
});
it('should not render if eventId is null', () => {
@@ -103,7 +118,7 @@ describe(' ', () => {
getFieldsData: (field: string) => {},
} as unknown as RightPanelContext;
- const { queryByTestId } = render(
+ const { container } = render(
@@ -111,6 +126,6 @@ describe(' ', () => {
);
- expect(queryByTestId(ENTITIES_HEADER_TEST_ID)).not.toBeInTheDocument();
+ expect(container).toBeEmptyDOMElement();
});
});
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.tsx
index b0a8d5c2faeb2..3a6c58caeb54f 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.tsx
@@ -6,26 +6,17 @@
*/
import React, { useCallback } from 'react';
-import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiTitle, EuiButtonEmpty } from '@elastic/eui';
+import { EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui';
import { useExpandableFlyoutContext } from '@kbn/expandable-flyout';
+import { ExpandablePanel } from '../../shared/components/expandable_panel';
import { useRightPanelContext } from '../context';
-import {
- ENTITIES_HEADER_TEST_ID,
- ENTITIES_CONTENT_TEST_ID,
- ENTITIES_HOST_CONTENT_TEST_ID,
- ENTITIES_USER_CONTENT_TEST_ID,
- ENTITIES_VIEW_ALL_BUTTON_TEST_ID,
-} from './test_ids';
-import { ENTITIES_TITLE, ENTITIES_TEXT, VIEW_ALL } from './translations';
-import { EntityPanel } from './entity_panel';
+import { INSIGHTS_ENTITIES_TEST_ID } from './test_ids';
+import { ENTITIES_TITLE } from './translations';
import { getField } from '../../shared/utils';
import { HostEntityOverview } from './host_entity_overview';
import { UserEntityOverview } from './user_entity_overview';
import { LeftPanelKey, LeftPanelInsightsTabPath } from '../../left';
-const USER_ICON = 'user';
-const HOST_ICON = 'storage';
-
/**
* Entities section under Insights section, overview tab. It contains a preview of host and user information.
*/
@@ -53,43 +44,28 @@ export const EntitiesOverview: React.FC = () => {
return (
<>
-
- {ENTITIES_TITLE}
-
-
-
- {userName && (
-
-
+
+
+ {userName && (
+
-
-
- )}
- {hostName && (
-
-
+
+ )}
+
+ {hostName && (
+
-
-
- )}
-
- {VIEW_ALL(ENTITIES_TEXT)}
-
-
+
+ )}
+
+
>
);
};
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/entity_panel.stories.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/entity_panel.stories.tsx
deleted file mode 100644
index 183d4c4b643b3..0000000000000
--- a/x-pack/plugins/security_solution/public/flyout/right/components/entity_panel.stories.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import React from 'react';
-import type { Story } from '@storybook/react';
-import { EuiIcon } from '@elastic/eui';
-import { EntityPanel } from './entity_panel';
-
-export default {
- component: EntityPanel,
- title: 'Flyout/EntityPanel',
-};
-
-const defaultProps = {
- title: 'title',
- iconType: 'storage',
-};
-const headerContent = ;
-
-const children = {'test content'}
;
-
-export const Default: Story = () => {
- return {children} ;
-};
-
-export const DefaultWithHeaderContent: Story = () => {
- return (
-
- {children}
-
- );
-};
-
-export const Expandable: Story = () => {
- return (
-
- {children}
-
- );
-};
-
-export const ExpandableDefaultOpen: Story = () => {
- return (
-
- {children}
-
- );
-};
-
-export const EmptyDefault: Story = () => {
- return ;
-};
-
-export const EmptyDefaultExpanded: Story = () => {
- return ;
-};
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/entity_panel.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/entity_panel.test.tsx
deleted file mode 100644
index 5eedc99cf5e61..0000000000000
--- a/x-pack/plugins/security_solution/public/flyout/right/components/entity_panel.test.tsx
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import React from 'react';
-import { render } from '@testing-library/react';
-import { EntityPanel } from './entity_panel';
-import {
- ENTITY_PANEL_TOGGLE_BUTTON_TEST_ID,
- ENTITY_PANEL_HEADER_TEST_ID,
- ENTITY_PANEL_HEADER_LEFT_SECTION_TEST_ID,
- ENTITY_PANEL_HEADER_RIGHT_SECTION_TEST_ID,
- ENTITY_PANEL_CONTENT_TEST_ID,
-} from './test_ids';
-import { ThemeProvider } from 'styled-components';
-import { getMockTheme } from '../../../common/lib/kibana/kibana_react.mock';
-
-const mockTheme = getMockTheme({ eui: { euiColorMediumShade: '#ece' } });
-const ENTITY_PANEL_TEST_ID = 'entityPanel';
-const defaultProps = {
- title: 'test',
- iconType: 'storage',
- 'data-test-subj': ENTITY_PANEL_TEST_ID,
-};
-const children = {'test content'}
;
-
-describe(' ', () => {
- describe('panel is not expandable by default', () => {
- it('should render non-expandable panel by default', () => {
- const { getByTestId, queryByTestId } = render(
-
- {children}
-
- );
- expect(getByTestId(ENTITY_PANEL_TEST_ID)).toBeInTheDocument();
- expect(getByTestId(ENTITY_PANEL_HEADER_TEST_ID)).toBeInTheDocument();
- expect(getByTestId(ENTITY_PANEL_CONTENT_TEST_ID)).toHaveTextContent('test content');
- expect(queryByTestId(ENTITY_PANEL_TOGGLE_BUTTON_TEST_ID)).not.toBeInTheDocument();
- });
-
- it('should only render left section of panel header when headerContent is not passed', () => {
- const { getByTestId, queryByTestId } = render(
-
- {children}
-
- );
- expect(getByTestId(ENTITY_PANEL_HEADER_LEFT_SECTION_TEST_ID)).toHaveTextContent('test');
- expect(queryByTestId(ENTITY_PANEL_HEADER_RIGHT_SECTION_TEST_ID)).not.toBeInTheDocument();
- });
-
- it('should render header properly when headerContent is available', () => {
- const { getByTestId } = render(
-
- {'test header content'}>}>
- {children}
-
-
- );
- expect(getByTestId(ENTITY_PANEL_HEADER_LEFT_SECTION_TEST_ID)).toBeInTheDocument();
- expect(getByTestId(ENTITY_PANEL_HEADER_RIGHT_SECTION_TEST_ID)).toBeInTheDocument();
- });
-
- it('should not render content when content is null', () => {
- const { queryByTestId } = render(
-
-
-
- );
-
- expect(queryByTestId(ENTITY_PANEL_CONTENT_TEST_ID)).not.toBeInTheDocument();
- expect(queryByTestId(ENTITY_PANEL_TOGGLE_BUTTON_TEST_ID)).not.toBeInTheDocument();
- });
- });
-
- describe('panel is expandable', () => {
- it('should render panel with toggle and collapsed by default', () => {
- const { getByTestId, queryByTestId } = render(
-
-
- {children}
-
-
- );
- expect(getByTestId(ENTITY_PANEL_TEST_ID)).toBeInTheDocument();
- expect(getByTestId(ENTITY_PANEL_HEADER_TEST_ID)).toHaveTextContent('test');
- expect(queryByTestId(ENTITY_PANEL_CONTENT_TEST_ID)).not.toBeInTheDocument();
- });
-
- it('click toggle button should expand the panel', () => {
- const { getByTestId } = render(
-
-
- {children}
-
-
- );
-
- const toggle = getByTestId(ENTITY_PANEL_TOGGLE_BUTTON_TEST_ID);
- expect(toggle.firstChild).toHaveAttribute('data-euiicon-type', 'arrowRight');
- toggle.click();
-
- expect(getByTestId(ENTITY_PANEL_CONTENT_TEST_ID)).toHaveTextContent('test content');
- expect(toggle.firstChild).toHaveAttribute('data-euiicon-type', 'arrowDown');
- });
-
- it('should not render toggle or content when content is null', () => {
- const { queryByTestId } = render(
-
-
-
- );
- expect(queryByTestId(ENTITY_PANEL_TOGGLE_BUTTON_TEST_ID)).not.toBeInTheDocument();
- expect(queryByTestId(ENTITY_PANEL_CONTENT_TEST_ID)).not.toBeInTheDocument();
- });
- });
-
- describe('panel is expandable and expanded by default', () => {
- it('should render header and content', () => {
- const { getByTestId } = render(
-
-
- {children}
-
-
- );
- expect(getByTestId(ENTITY_PANEL_TEST_ID)).toBeInTheDocument();
- expect(getByTestId(ENTITY_PANEL_HEADER_TEST_ID)).toHaveTextContent('test');
- expect(getByTestId(ENTITY_PANEL_CONTENT_TEST_ID)).toHaveTextContent('test content');
- expect(getByTestId(ENTITY_PANEL_TOGGLE_BUTTON_TEST_ID)).toBeInTheDocument();
- });
-
- it('click toggle button should collapse the panel', () => {
- const { getByTestId, queryByTestId } = render(
-
-
- {children}
-
-
- );
-
- const toggle = getByTestId(ENTITY_PANEL_TOGGLE_BUTTON_TEST_ID);
- expect(toggle.firstChild).toHaveAttribute('data-euiicon-type', 'arrowDown');
- expect(getByTestId(ENTITY_PANEL_CONTENT_TEST_ID)).toBeInTheDocument();
-
- toggle.click();
- expect(toggle.firstChild).toHaveAttribute('data-euiicon-type', 'arrowRight');
- expect(queryByTestId(ENTITY_PANEL_CONTENT_TEST_ID)).not.toBeInTheDocument();
- });
-
- it('should not render content when content is null', () => {
- const { queryByTestId } = render(
-
-
-
- );
- expect(queryByTestId(ENTITY_PANEL_TOGGLE_BUTTON_TEST_ID)).not.toBeInTheDocument();
- expect(queryByTestId(ENTITY_PANEL_CONTENT_TEST_ID)).not.toBeInTheDocument();
- });
- });
-});
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/entity_panel.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/entity_panel.tsx
deleted file mode 100644
index d095bf72e4c39..0000000000000
--- a/x-pack/plugins/security_solution/public/flyout/right/components/entity_panel.tsx
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import React, { useMemo, useState, useCallback } from 'react';
-import {
- EuiButtonIcon,
- EuiSplitPanel,
- EuiText,
- EuiFlexGroup,
- EuiFlexItem,
- EuiTitle,
- EuiPanel,
- EuiIcon,
-} from '@elastic/eui';
-import styled from 'styled-components';
-import {
- ENTITY_PANEL_TOGGLE_BUTTON_TEST_ID,
- ENTITY_PANEL_HEADER_TEST_ID,
- ENTITY_PANEL_HEADER_LEFT_SECTION_TEST_ID,
- ENTITY_PANEL_HEADER_RIGHT_SECTION_TEST_ID,
- ENTITY_PANEL_CONTENT_TEST_ID,
-} from './test_ids';
-
-const PanelHeaderRightSectionWrapper = styled(EuiFlexItem)`
- margin-right: ${({ theme }) => theme.eui.euiSizeM};
-`;
-
-const IconWrapper = styled(EuiIcon)`
- margin: ${({ theme }) => theme.eui.euiSizeS} 0;
-`;
-
-export interface EntityPanelProps {
- /**
- * String value of the title to be displayed in the header of panel
- */
- title: string;
- /**
- * Icon string for displaying the specified icon in the header
- */
- iconType: string;
- /**
- * Boolean to determine the panel to be collapsable (with toggle)
- */
- expandable?: boolean;
- /**
- * Boolean to allow the component to be expanded or collapsed on first render
- */
- expanded?: boolean;
- /**
- Optional content and actions to be displayed on the right side of header
- */
- headerContent?: React.ReactNode;
- /**
- Data test subject string for testing
- */
- ['data-test-subj']?: string;
-}
-
-/**
- * Panel component to display user or host information.
- */
-export const EntityPanel: React.FC = ({
- title,
- iconType,
- children,
- expandable = false,
- expanded = false,
- headerContent,
- 'data-test-subj': dataTestSub,
-}) => {
- const [toggleStatus, setToggleStatus] = useState(expanded);
- const toggleQuery = useCallback(() => {
- setToggleStatus(!toggleStatus);
- }, [setToggleStatus, toggleStatus]);
-
- const toggleIcon = useMemo(
- () => (
-
- ),
- [toggleStatus, toggleQuery]
- );
-
- const headerLeftSection = useMemo(
- () => (
-
-
- {expandable && children && toggleIcon}
-
-
-
-
-
- {title}
-
-
-
-
- ),
- [title, children, toggleIcon, expandable, iconType]
- );
-
- const headerRightSection = useMemo(
- () =>
- headerContent && (
-
- {headerContent}
-
- ),
- [headerContent]
- );
-
- const showContent = useMemo(() => {
- if (!children) {
- return false;
- }
- return !expandable || (expandable && toggleStatus);
- }, [children, expandable, toggleStatus]);
-
- return (
-
-
-
- {headerLeftSection}
- {headerRightSection}
-
-
- {showContent && (
-
- {children}
-
- )}
-
- );
-};
-
-EntityPanel.displayName = 'EntityPanel';
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/host_entity_overview.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/host_entity_overview.test.tsx
index 4515e011d3790..c7cd137808c18 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/host_entity_overview.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/host_entity_overview.test.tsx
@@ -12,9 +12,15 @@ import { useRiskScore } from '../../../explore/containers/risk_score';
import { useHostDetails } from '../../../explore/hosts/containers/hosts/details';
import {
ENTITIES_HOST_OVERVIEW_IP_TEST_ID,
+ ENTITIES_HOST_OVERVIEW_LINK_TEST_ID,
ENTITIES_HOST_OVERVIEW_RISK_LEVEL_TEST_ID,
TECHNICAL_PREVIEW_ICON_TEST_ID,
} from './test_ids';
+import { RightPanelContext } from '../context';
+import { mockContextValue } from '../mocks/mock_right_panel_context';
+import { mockDataFormattedForFieldBrowser } from '../mocks/mock_context';
+import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context';
+import { LeftPanelInsightsTabPath, LeftPanelKey } from '../../left';
const hostName = 'host';
const ip = '10.200.000.000';
@@ -24,6 +30,15 @@ const selectedPatterns = 'alerts';
const hostData = { host: { ip: [ip] } };
const riskLevel = [{ host: { risk: { calculated_level: 'Medium' } } }];
+const panelContextValue = {
+ ...mockContextValue,
+ dataFormattedForFieldBrowser: mockDataFormattedForFieldBrowser,
+};
+
+const flyoutContextValue = {
+ openLeftPanel: jest.fn(),
+} as unknown as ExpandableFlyoutContext;
+
const mockUseGlobalTime = jest.fn().mockReturnValue({ from, to });
jest.mock('../../../common/containers/use_global_time', () => {
return {
@@ -52,7 +67,9 @@ describe(' ', () => {
const { getByTestId } = render(
-
+
+
+
);
@@ -67,7 +84,9 @@ describe(' ', () => {
const { getByTestId } = render(
-
+
+
+
);
expect(getByTestId(ENTITIES_HOST_OVERVIEW_IP_TEST_ID)).toHaveTextContent('—');
@@ -82,7 +101,9 @@ describe(' ', () => {
mockUseRiskScore.mockReturnValue({ data: riskLevel, isAuthorized: false });
const { getByTestId, queryByTestId } = render(
-
+
+
+
);
@@ -95,12 +116,40 @@ describe(' ', () => {
mockUseRiskScore.mockReturnValue({ data: null, isAuthorized: false });
const { getByTestId, queryByTestId } = render(
-
+
+
+
);
expect(getByTestId(ENTITIES_HOST_OVERVIEW_IP_TEST_ID)).toHaveTextContent('—');
expect(queryByTestId(TECHNICAL_PREVIEW_ICON_TEST_ID)).not.toBeInTheDocument();
});
+
+ it('should navigate to left panel entities tab when clicking on title', () => {
+ mockUseHostDetails.mockReturnValue([false, { hostDetails: hostData }]);
+ mockUseRiskScore.mockReturnValue({ data: riskLevel, isAuthorized: true });
+
+ const { getByTestId } = render(
+
+
+
+
+
+
+
+ );
+
+ getByTestId(ENTITIES_HOST_OVERVIEW_LINK_TEST_ID).click();
+ expect(flyoutContextValue.openLeftPanel).toHaveBeenCalledWith({
+ id: LeftPanelKey,
+ path: LeftPanelInsightsTabPath,
+ params: {
+ id: panelContextValue.eventId,
+ indexName: panelContextValue.indexName,
+ scopeId: panelContextValue.scopeId,
+ },
+ });
+ });
});
});
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/host_entity_overview.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/host_entity_overview.tsx
index 14a72804ead1f..d32df4f205088 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/host_entity_overview.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/host_entity_overview.tsx
@@ -5,10 +5,20 @@
* 2.0.
*/
-import React, { useMemo } from 'react';
-import { EuiFlexGroup, EuiFlexItem, EuiBetaBadge } from '@elastic/eui';
+import React, { useCallback, useMemo } from 'react';
+import {
+ EuiFlexGroup,
+ EuiFlexItem,
+ EuiBetaBadge,
+ EuiLink,
+ EuiIcon,
+ useEuiTheme,
+ useEuiFontSize,
+} from '@elastic/eui';
+import { css } from '@emotion/css';
import { getOr } from 'lodash/fp';
-import styled from 'styled-components';
+import { useExpandableFlyoutContext } from '@kbn/expandable-flyout';
+import { useRightPanelContext } from '../context';
import type { DescriptionList } from '../../../../common/utility_types';
import {
buildHostNamesFilter,
@@ -32,11 +42,11 @@ import {
ENTITIES_HOST_OVERVIEW_TEST_ID,
ENTITIES_HOST_OVERVIEW_IP_TEST_ID,
ENTITIES_HOST_OVERVIEW_RISK_LEVEL_TEST_ID,
+ ENTITIES_HOST_OVERVIEW_LINK_TEST_ID,
} from './test_ids';
+import { LeftPanelInsightsTabPath, LeftPanelKey } from '../../left';
-const StyledEuiBetaBadge = styled(EuiBetaBadge)`
- margin-left: ${({ theme }) => theme.eui.euiSizeXS};
-`;
+const HOST_ICON = 'storage';
const CONTEXT_ID = `flyout-host-entity-overview`;
export interface HostEntityOverviewProps {
@@ -50,6 +60,20 @@ export interface HostEntityOverviewProps {
* Host preview content for the entities preview in right flyout. It contains ip addresses and risk classification
*/
export const HostEntityOverview: React.FC = ({ hostName }) => {
+ const { eventId, indexName, scopeId } = useRightPanelContext();
+ const { openLeftPanel } = useExpandableFlyoutContext();
+ const goToEntitiesTab = useCallback(() => {
+ openLeftPanel({
+ id: LeftPanelKey,
+ path: LeftPanelInsightsTabPath,
+ params: {
+ id: eventId,
+ indexName,
+ scopeId,
+ },
+ });
+ }, [eventId, openLeftPanel, indexName, scopeId]);
+
const { from, to } = useGlobalTime();
const { selectedPatterns } = useSourcererDataView();
@@ -80,6 +104,9 @@ export const HostEntityOverview: React.FC = ({ hostName
endDate: to,
});
+ const { euiTheme } = useEuiTheme();
+ const xsFontSize = useEuiFontSize('xs').fontSize;
+
const [hostRiskLevel] = useMemo(() => {
const hostRiskData = hostRisk && hostRisk.length > 0 ? hostRisk[0] : undefined;
return [
@@ -87,7 +114,10 @@ export const HostEntityOverview: React.FC = ({ hostName
title: (
<>
{i18n.HOST_RISK_CLASSIFICATION}
- = ({ hostName
),
},
];
- }, [hostRisk]);
+ }, [euiTheme.size.xs, hostRisk]);
const descriptionList: DescriptionList[] = useMemo(
() => [
@@ -130,20 +160,43 @@ export const HostEntityOverview: React.FC = ({ hostName
);
return (
-
+
-
+
+
+
+
+
+
+ {hostName}
+
+
+
- {isAuthorized && (
-
- )}
+
+
+
+
+
+ {isAuthorized && (
+
+ )}
+
+
);
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/insights_section.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/insights_section.tsx
index 7e78e9f121a12..86d0447a5a590 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/insights_section.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/insights_section.tsx
@@ -6,6 +6,7 @@
*/
import React from 'react';
+import { EuiSpacer } from '@elastic/eui';
import { CorrelationsOverview } from './correlations_overview';
import { PrevalenceOverview } from './prevalence_overview';
import { ThreatIntelligenceOverview } from './threat_intelligence_overview';
@@ -28,8 +29,11 @@ export const InsightsSection: React.FC = ({ expanded = fal
return (
+
+
+
);
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/insights_subsection.stories.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/insights_subsection.stories.tsx
deleted file mode 100644
index c1fc9dfe8a7f8..0000000000000
--- a/x-pack/plugins/security_solution/public/flyout/right/components/insights_subsection.stories.tsx
+++ /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.
- */
-
-import React from 'react';
-import type { Story } from '@storybook/react';
-import { InsightsSubSection } from './insights_subsection';
-
-export default {
- component: InsightsSubSection,
- title: 'Flyout/InsightsSubSection',
-};
-
-const title = 'Title';
-const children = {'hello'}
;
-
-export const Basic: Story = () => {
- return {children} ;
-};
-
-export const Loading: Story = () => {
- return (
-
- {null}
-
- );
-};
-
-export const NoTitle: Story = () => {
- return {children} ;
-};
-
-export const NoChildren: Story = () => {
- return {null} ;
-};
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/insights_subsection.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/insights_subsection.test.tsx
deleted file mode 100644
index 271953c8e8105..0000000000000
--- a/x-pack/plugins/security_solution/public/flyout/right/components/insights_subsection.test.tsx
+++ /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 React from 'react';
-import { render } from '@testing-library/react';
-import { InsightsSubSection } from './insights_subsection';
-
-const title = 'Title';
-const dataTestSubj = 'test';
-const children = {'hello'}
;
-
-describe(' ', () => {
- it('should render children component', () => {
- const { getByTestId } = render(
-
- {children}
-
- );
-
- const titleDataTestSubj = `${dataTestSubj}Title`;
- const contentDataTestSubj = `${dataTestSubj}Content`;
-
- expect(getByTestId(titleDataTestSubj)).toHaveTextContent(title);
- expect(getByTestId(contentDataTestSubj)).toBeInTheDocument();
- });
-
- it('should render loading component', () => {
- const { getByTestId } = render(
-
- {children}
-
- );
-
- const loadingDataTestSubj = `${dataTestSubj}Loading`;
- expect(getByTestId(loadingDataTestSubj)).toBeInTheDocument();
- });
-
- it('should render null if error', () => {
- const { container } = render(
-
- {children}
-
- );
-
- expect(container).toBeEmptyDOMElement();
- });
-
- it('should render null if no title', () => {
- const { container } = render({children} );
-
- expect(container).toBeEmptyDOMElement();
- });
-
- it('should render null if no children', () => {
- const { container } = render(
-
- {null}
-
- );
-
- expect(container).toBeEmptyDOMElement();
- });
-});
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/insights_subsection.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/insights_subsection.tsx
deleted file mode 100644
index 5993d2d7555c3..0000000000000
--- a/x-pack/plugins/security_solution/public/flyout/right/components/insights_subsection.tsx
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import React from 'react';
-import { EuiFlexGroup, EuiFlexItem, EuiLoadingSpinner, EuiSpacer, EuiTitle } from '@elastic/eui';
-
-export interface InsightsSubSectionProps {
- /**
- * Renders a loading spinner if true
- */
- loading?: boolean;
- /**
- * Returns a null component if true
- */
- error?: boolean;
- /**
- * Title at the top of the component
- */
- title: string;
- /**
- * Content of the component
- */
- children: React.ReactNode;
- /**
- * Prefix data-test-subj to use for the elements
- */
- ['data-test-subj']?: string;
-}
-
-/**
- * Presentational component to handle loading and error in the subsections of the Insights section.
- * Should be used for Entities, Threat Intelligence, Prevalence, Correlations and Results
- */
-export const InsightsSubSection: React.FC = ({
- loading = false,
- error = false,
- title,
- 'data-test-subj': dataTestSubj,
- children,
-}) => {
- // showing the loading in this component as well as in SummaryPanel because we're hiding the entire section if no data
- const loadingDataTestSubj = `${dataTestSubj}Loading`;
- if (loading) {
- return (
-
-
-
-
-
- );
- }
-
- // hide everything
- if (error || !title || !children) {
- return null;
- }
-
- const titleDataTestSubj = `${dataTestSubj}Title`;
- const contentDataTestSubj = `${dataTestSubj}Content`;
-
- return (
- <>
-
- {title}
-
-
-
- {children}
-
- >
- );
-};
-
-InsightsSubSection.displayName = 'InsightsSubSection';
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.test.tsx
index 55e635097311f..d3a3e3c57d4ed 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.test.tsx
@@ -9,7 +9,12 @@ import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context';
import { render } from '@testing-library/react';
import { TestProviders } from '../../../common/mock';
import { RightPanelContext } from '../context';
-import { INSIGHTS_PREVALENCE_TEST_ID } from './test_ids';
+import {
+ INSIGHTS_PREVALENCE_TITLE_ICON_TEST_ID,
+ INSIGHTS_PREVALENCE_TITLE_LINK_TEST_ID,
+ INSIGHTS_PREVALENCE_TITLE_TEXT_TEST_ID,
+ INSIGHTS_PREVALENCE_TOGGLE_ICON_TEST_ID,
+} from './test_ids';
import { LeftPanelInsightsTabPath, LeftPanelKey } from '../../left';
import React from 'react';
import { PrevalenceOverview } from './prevalence_overview';
@@ -17,6 +22,7 @@ import { usePrevalence } from '../hooks/use_prevalence';
import { PrevalenceOverviewRow } from './prevalence_overview_row';
import { useFetchFieldValuePairWithAggregation } from '../../shared/hooks/use_fetch_field_value_pair_with_aggregation';
import { useFetchUniqueByField } from '../../shared/hooks/use_fetch_unique_by_field';
+import type { BrowserFields, TimelineEventsDetailsItem } from '@kbn/timelines-plugin/common';
jest.mock('../../shared/hooks/use_fetch_field_value_pair_with_aggregation');
jest.mock('../../shared/hooks/use_fetch_unique_by_field');
@@ -26,14 +32,18 @@ const highlightedField = {
name: 'field',
values: ['values'],
};
-const callbackIfNull = jest.fn();
-
-const panelContextValue = {
- eventId: 'event id',
- indexName: 'indexName',
- browserFields: {},
- dataFormattedForFieldBrowser: [],
-} as unknown as RightPanelContext;
+const panelContextValue = (
+ eventId: string | null,
+ browserFields: BrowserFields | null,
+ dataFormattedForFieldBrowser: TimelineEventsDetailsItem[] | null
+) =>
+ ({
+ eventId,
+ indexName: 'indexName',
+ browserFields,
+ dataFormattedForFieldBrowser,
+ scopeId: 'scopeId',
+ } as unknown as RightPanelContext);
const renderPrevalenceOverview = (contextValue: RightPanelContext) => (
@@ -44,7 +54,7 @@ const renderPrevalenceOverview = (contextValue: RightPanelContext) => (
);
describe(' ', () => {
- it('should render PrevalenceOverviewRows', () => {
+ it('should render wrapper component', () => {
(useFetchFieldValuePairWithAggregation as jest.Mock).mockReturnValue({
loading: false,
error: false,
@@ -55,35 +65,62 @@ describe(' ', () => {
error: false,
count: 10,
});
- (usePrevalence as jest.Mock).mockReturnValue({
- empty: false,
- prevalenceRows: [
- ,
- ],
+ (usePrevalence as jest.Mock).mockReturnValue([]);
+
+ const { getByTestId, queryByTestId } = render(
+ renderPrevalenceOverview(panelContextValue('eventId', {}, []))
+ );
+ expect(queryByTestId(INSIGHTS_PREVALENCE_TOGGLE_ICON_TEST_ID)).not.toBeInTheDocument();
+ expect(getByTestId(INSIGHTS_PREVALENCE_TITLE_LINK_TEST_ID)).toBeInTheDocument();
+ expect(getByTestId(INSIGHTS_PREVALENCE_TITLE_ICON_TEST_ID)).toBeInTheDocument();
+ expect(queryByTestId(INSIGHTS_PREVALENCE_TITLE_TEXT_TEST_ID)).not.toBeInTheDocument();
+ });
+
+ it('should render component', () => {
+ (useFetchFieldValuePairWithAggregation as jest.Mock).mockReturnValue({
+ loading: false,
+ error: false,
+ count: 1,
});
+ (useFetchUniqueByField as jest.Mock).mockReturnValue({
+ loading: false,
+ error: false,
+ count: 10,
+ });
+ (usePrevalence as jest.Mock).mockReturnValue([
+ ,
+ ]);
- const titleDataTestSubj = `${INSIGHTS_PREVALENCE_TEST_ID}Title`;
- const iconDataTestSubj = 'testIcon';
- const valueDataTestSubj = 'testValue';
+ const { getByTestId } = render(renderPrevalenceOverview(panelContextValue('eventId', {}, [])));
- const { getByTestId } = render(renderPrevalenceOverview(panelContextValue));
+ expect(getByTestId(INSIGHTS_PREVALENCE_TITLE_LINK_TEST_ID)).toHaveTextContent('Prevalence');
- expect(getByTestId(titleDataTestSubj)).toBeInTheDocument();
+ const iconDataTestSubj = 'testIcon';
+ const valueDataTestSubj = 'testValue';
expect(getByTestId(iconDataTestSubj)).toBeInTheDocument();
expect(getByTestId(valueDataTestSubj)).toBeInTheDocument();
});
- it('should render null if no rows are rendered', () => {
- (usePrevalence as jest.Mock).mockReturnValue({
- empty: true,
- prevalenceRows: [],
- });
+ it('should render null if eventId is null', () => {
+ (usePrevalence as jest.Mock).mockReturnValue([]);
- const { container } = render(renderPrevalenceOverview(panelContextValue));
+ const { container } = render(renderPrevalenceOverview(panelContextValue(null, {}, [])));
+
+ expect(container).toBeEmptyDOMElement();
+ });
+
+ it('should render null if browserFields is null', () => {
+ (usePrevalence as jest.Mock).mockReturnValue([]);
+
+ const { container } = render(renderPrevalenceOverview(panelContextValue('eventId', null, [])));
+
+ expect(container).toBeEmptyDOMElement();
+ });
+
+ it('should render null if dataFormattedForFieldBrowser is null', () => {
+ (usePrevalence as jest.Mock).mockReturnValue([]);
+
+ const { container } = render(renderPrevalenceOverview(panelContextValue('eventId', {}, null)));
expect(container).toBeEmptyDOMElement();
});
@@ -99,16 +136,9 @@ describe(' ', () => {
error: false,
count: 10,
});
- (usePrevalence as jest.Mock).mockReturnValue({
- empty: false,
- prevalenceRows: [
- ,
- ],
- });
+ (usePrevalence as jest.Mock).mockReturnValue([
+ ,
+ ]);
const flyoutContextValue = {
openLeftPanel: jest.fn(),
} as unknown as ExpandableFlyoutContext;
@@ -116,21 +146,21 @@ describe(' ', () => {
const { getByTestId } = render(
-
+
);
- getByTestId(`${INSIGHTS_PREVALENCE_TEST_ID}ViewAllButton`).click();
+ getByTestId(INSIGHTS_PREVALENCE_TITLE_LINK_TEST_ID).click();
expect(flyoutContextValue.openLeftPanel).toHaveBeenCalledWith({
id: LeftPanelKey,
path: LeftPanelInsightsTabPath,
params: {
- id: panelContextValue.eventId,
- indexName: panelContextValue.indexName,
- scopeId: panelContextValue.scopeId,
+ id: 'eventId',
+ indexName: 'indexName',
+ scopeId: 'scopeId',
},
});
});
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.tsx
index 77f5065bad450..c4a9dfd235949 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.tsx
@@ -7,13 +7,13 @@
import type { FC } from 'react';
import React, { useCallback } from 'react';
-import { EuiButtonEmpty, EuiFlexGroup, EuiPanel } from '@elastic/eui';
+import { EuiFlexGroup } from '@elastic/eui';
import { useExpandableFlyoutContext } from '@kbn/expandable-flyout';
+import { ExpandablePanel } from '../../shared/components/expandable_panel';
import { usePrevalence } from '../hooks/use_prevalence';
import { INSIGHTS_PREVALENCE_TEST_ID } from './test_ids';
-import { InsightsSubSection } from './insights_subsection';
import { useRightPanelContext } from '../context';
-import { PREVALENCE_TEXT, PREVALENCE_TITLE, VIEW_ALL } from './translations';
+import { PREVALENCE_TITLE } from './translations';
import { LeftPanelKey, LeftPanelInsightsTabPath } from '../../left';
/**
@@ -38,34 +38,30 @@ export const PrevalenceOverview: FC = () => {
});
}, [eventId, openLeftPanel, indexName, scopeId]);
- const { empty, prevalenceRows } = usePrevalence({
+ const prevalenceRows = usePrevalence({
eventId,
browserFields,
dataFormattedForFieldBrowser,
scopeId,
});
- if (!eventId || !browserFields || !dataFormattedForFieldBrowser || empty) {
+ if (!eventId || !browserFields || !dataFormattedForFieldBrowser) {
return null;
}
return (
-
-
-
- {prevalenceRows}
-
-
-
- {VIEW_ALL(PREVALENCE_TEXT)}
-
-
+
+
+ {prevalenceRows}
+
+
);
};
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview_row.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview_row.test.tsx
index fc1a4ce2b1a3f..6398a55b50cdd 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview_row.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview_row.test.tsx
@@ -38,11 +38,7 @@ describe(' ', () => {
});
const { getByTestId, getAllByText, queryByTestId } = render(
- {}}
- data-test-subj={dataTestSubj}
- />
+
);
const { name, values } = highlightedField;
@@ -64,18 +60,12 @@ describe(' ', () => {
error: false,
count: 2,
});
- const callbackIfNull = jest.fn();
const { queryAllByAltText } = render(
-
+
);
expect(queryAllByAltText('is uncommon')).toHaveLength(0);
- expect(callbackIfNull).toHaveBeenCalled();
});
it('should not display row if error retrieving data', () => {
@@ -89,18 +79,12 @@ describe(' ', () => {
error: true,
count: 0,
});
- const callbackIfNull = jest.fn();
const { queryAllByAltText } = render(
-
+
);
expect(queryAllByAltText('is uncommon')).toHaveLength(0);
- expect(callbackIfNull).toHaveBeenCalled();
});
it('should display loading', () => {
@@ -116,11 +100,7 @@ describe(' ', () => {
});
const { getByTestId } = render(
- {}}
- data-test-subj={dataTestSubj}
- />
+
);
expect(getByTestId(loadingDataTestSubj)).toBeInTheDocument();
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview_row.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview_row.tsx
index d7cef2fe99f8b..12e44a42220db 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview_row.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview_row.tsx
@@ -20,10 +20,6 @@ export interface PrevalenceOverviewRowProps {
* The highlighted field name and values
* */
highlightedField: { name: string; values: string[] };
- /**
- * This is a solution to allow the parent component to NOT render if all its row children are null
- */
- callbackIfNull: () => void;
/**
* Prefix data-test-subj because this component will be used in multiple places
*/
@@ -32,12 +28,10 @@ export interface PrevalenceOverviewRowProps {
/**
* Retrieves the unique hosts for the field/value pair as well as the total number of unique hosts,
- * calculate the prevalence. If the prevalence is higher than 1, use the callback method to let the parent know
- * the row will render null.
+ * calculate the prevalence. If the prevalence is higher than 0.1, the row will render null.
*/
export const PrevalenceOverviewRow: VFC = ({
highlightedField,
- callbackIfNull,
'data-test-subj': dataTestSubj,
}) => {
const {
@@ -67,11 +61,6 @@ export const PrevalenceOverviewRow: VFC = ({
const shouldNotRender =
isFinite(prevalence) && (prevalence === 0 || prevalence > PERCENTAGE_THRESHOLD);
- // callback to let the parent component aware of which rows are null (so it can hide itself completely if all are null)
- if (!loading && (error || shouldNotRender)) {
- callbackIfNull();
- }
-
return (
{
jest.resetAllMocks();
});
+ it('should render wrapper component', () => {
+ jest.mocked(useProcessData).mockReturnValue({
+ processName: 'process1',
+ userName: 'user1',
+ startAt: '2022-01-01T00:00:00.000Z',
+ ruleName: 'rule1',
+ ruleId: 'id',
+ workdir: '/path/to/workdir',
+ command: 'command1',
+ });
+
+ renderSessionPreview();
+
+ expect(screen.queryByTestId(SESSION_PREVIEW_TOGGLE_ICON_TEST_ID)).not.toBeInTheDocument();
+ expect(screen.getByTestId(SESSION_PREVIEW_TITLE_LINK_TEST_ID)).toBeInTheDocument();
+ expect(screen.getByTestId(SESSION_PREVIEW_TITLE_ICON_TEST_ID)).toBeInTheDocument();
+ expect(screen.getByTestId(SESSION_PREVIEW_CONTENT_TEST_ID)).toBeInTheDocument();
+ expect(screen.queryByTestId(SESSION_PREVIEW_TITLE_TEXT_TEST_ID)).not.toBeInTheDocument();
+ });
+
it('renders session preview with all data', () => {
jest.mocked(useProcessData).mockReturnValue({
processName: 'process1',
@@ -61,7 +87,7 @@ describe('SessionPreview', () => {
expect(screen.getByText('started')).toBeInTheDocument();
expect(screen.getByText('process1')).toBeInTheDocument();
expect(screen.getByText('at')).toBeInTheDocument();
- expect(screen.getByText('Jan 1, 2022 @ 00:00:00.000')).toBeInTheDocument();
+ expect(screen.getByText('2022-01-01T00:00:00Z')).toBeInTheDocument();
expect(screen.getByText('with rule')).toBeInTheDocument();
expect(screen.getByText('rule1')).toBeInTheDocument();
expect(screen.getByText('by')).toBeInTheDocument();
@@ -102,7 +128,7 @@ describe('SessionPreview', () => {
const { getByTestId } = renderSessionPreview();
- getByTestId(SESSION_PREVIEW_VIEW_DETAILS_BUTTON_TEST_ID).click();
+ getByTestId(SESSION_PREVIEW_TITLE_LINK_TEST_ID).click();
expect(flyoutContextValue.openLeftPanel).toHaveBeenCalledWith({
id: LeftPanelKey,
path: LeftPanelVisualizeTabPath,
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/session_preview.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/session_preview.tsx
index 0d79d2b51f25b..b6ba4398f7e6b 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/session_preview.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/session_preview.tsx
@@ -5,15 +5,16 @@
* 2.0.
*/
-import { EuiButtonEmpty, EuiCode, EuiIcon, EuiPanel, useEuiTheme } from '@elastic/eui';
+import { EuiCode, EuiIcon, useEuiTheme } from '@elastic/eui';
import React, { useMemo, type FC, useCallback } from 'react';
import { useExpandableFlyoutContext } from '@kbn/expandable-flyout';
+import { ExpandablePanel } from '../../shared/components/expandable_panel';
import { SIGNAL_RULE_NAME_FIELD_NAME } from '../../../timelines/components/timeline/body/renderers/constants';
import { useRightPanelContext } from '../context';
import { PreferenceFormattedDate } from '../../../common/components/formatted_date';
import { useProcessData } from '../hooks/use_process_data';
-import { SESSION_PREVIEW_TEST_ID, SESSION_PREVIEW_VIEW_DETAILS_BUTTON_TEST_ID } from './test_ids';
+import { SESSION_PREVIEW_TEST_ID } from './test_ids';
import {
SESSION_PREVIEW_COMMAND_TEXT,
SESSION_PREVIEW_PROCESS_TEXT,
@@ -120,29 +121,25 @@ export const SessionPreview: FC = () => {
}, [command, workdir]);
return (
-
-
-
- {SESSION_PREVIEW_TITLE}
-
-
-
-
-
-
- {userName}
-
- {processNameFragment}
- {timeFragment}
- {ruleFragment}
- {commandFragment}
-
-
-
+
+
+
+
+
+ {userName}
+
+ {processNameFragment}
+ {timeFragment}
+ {ruleFragment}
+ {commandFragment}
+
+
);
};
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/right/components/test_ids.ts
index 3224619575a07..43868275c0399 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/test_ids.ts
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/test_ids.ts
@@ -5,6 +5,14 @@
* 2.0.
*/
+import {
+ EXPANDABLE_PANEL_CONTENT_TEST_ID,
+ EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID,
+ EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID,
+ EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID,
+ EXPANDABLE_PANEL_LOADING_TEST_ID,
+ EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID,
+} from '../../shared/components/test_ids';
import { RESPONSE_BASE_TEST_ID } from '../../left/components/test_ids';
import { CONTENT_TEST_ID, HEADER_TEST_ID } from './expandable_section';
@@ -64,85 +72,145 @@ export const HIGHLIGHTED_FIELDS_AGENT_STATUS_CELL_TEST_ID =
export const INVESTIGATION_GUIDE_BUTTON_TEST_ID =
'securitySolutionDocumentDetailsFlyoutInvestigationGuideButton';
-/* Insights section*/
+/* Insights section */
export const INSIGHTS_TEST_ID = 'securitySolutionDocumentDetailsFlyoutInsights';
-export const INSIGHTS_HEADER_TEST_ID = 'securitySolutionDocumentDetailsFlyoutInsightsHeader';
-export const ENTITIES_HEADER_TEST_ID = 'securitySolutionDocumentDetailsFlyoutEntitiesHeader';
-export const ENTITIES_CONTENT_TEST_ID = 'securitySolutionDocumentDetailsFlyoutEntitiesContent';
-export const ENTITIES_USER_CONTENT_TEST_ID =
- 'securitySolutionDocumentDetailsFlyoutEntitiesUserContent';
-export const ENTITIES_HOST_CONTENT_TEST_ID =
- 'securitySolutionDocumentDetailsFlyoutEntitiesHostContent';
-export const ENTITIES_VIEW_ALL_BUTTON_TEST_ID =
- 'securitySolutionDocumentDetailsFlyoutEntitiesViewAllButton';
-export const ENTITY_PANEL_TOGGLE_BUTTON_TEST_ID =
- 'securitySolutionDocumentDetailsFlyoutEntityPanelToggleButton';
-export const ENTITY_PANEL_HEADER_TEST_ID = 'securitySolutionDocumentDetailsFlyoutEntityPanelHeader';
-export const ENTITY_PANEL_HEADER_LEFT_SECTION_TEST_ID =
- 'securitySolutionDocumentDetailsFlyoutEntityPanelHeaderLeftSection';
-export const ENTITY_PANEL_HEADER_RIGHT_SECTION_TEST_ID =
- 'securitySolutionDocumentDetailsFlyoutEntityPanelHeaderRightSection';
-export const ENTITY_PANEL_CONTENT_TEST_ID =
- 'securitySolutionDocumentDetailsFlyoutEntityPanelContent';
+export const INSIGHTS_HEADER_TEST_ID = `${INSIGHTS_TEST_ID}Header`;
+
+/* Insights Entities */
+
+export const INSIGHTS_ENTITIES_TEST_ID = 'securitySolutionDocumentDetailsFlyoutInsightsEntities';
+export const INSIGHTS_ENTITIES_TOGGLE_ICON_TEST_ID =
+ EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID(INSIGHTS_ENTITIES_TEST_ID);
+export const INSIGHTS_ENTITIES_TITLE_LINK_TEST_ID =
+ EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID(INSIGHTS_ENTITIES_TEST_ID);
+export const INSIGHTS_ENTITIES_TITLE_TEXT_TEST_ID =
+ EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID(INSIGHTS_ENTITIES_TEST_ID);
+export const INSIGHTS_ENTITIES_TITLE_ICON_TEST_ID =
+ EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID(INSIGHTS_ENTITIES_TEST_ID);
+export const INSIGHTS_ENTITIES_CONTENT_TEST_ID =
+ EXPANDABLE_PANEL_CONTENT_TEST_ID(INSIGHTS_ENTITIES_TEST_ID);
export const TECHNICAL_PREVIEW_ICON_TEST_ID =
'securitySolutionDocumentDetailsFlyoutTechnicalPreviewIcon';
export const ENTITIES_USER_OVERVIEW_TEST_ID =
'securitySolutionDocumentDetailsFlyoutEntitiesUserOverview';
-export const ENTITIES_USER_OVERVIEW_IP_TEST_ID =
- 'securitySolutionDocumentDetailsFlyoutEntitiesUserOverviewIP';
-export const ENTITIES_USER_OVERVIEW_RISK_LEVEL_TEST_ID =
- 'securitySolutionDocumentDetailsFlyoutEntitiesUserOverviewRiskLevel';
+export const ENTITIES_USER_OVERVIEW_LINK_TEST_ID = `${ENTITIES_USER_OVERVIEW_TEST_ID}Link`;
+export const ENTITIES_USER_OVERVIEW_IP_TEST_ID = `${ENTITIES_USER_OVERVIEW_TEST_ID}IP`;
+export const ENTITIES_USER_OVERVIEW_RISK_LEVEL_TEST_ID = `${ENTITIES_USER_OVERVIEW_TEST_ID}RiskLevel`;
export const ENTITIES_HOST_OVERVIEW_TEST_ID =
'securitySolutionDocumentDetailsFlyoutEntitiesHostOverview';
-export const ENTITIES_HOST_OVERVIEW_IP_TEST_ID =
- 'securitySolutionDocumentDetailsFlyoutEntitiesHostOverviewIP';
-export const ENTITIES_HOST_OVERVIEW_RISK_LEVEL_TEST_ID =
- 'securitySolutionDocumentDetailsFlyoutEntitiesHostOverviewRiskLevel';
+export const ENTITIES_HOST_OVERVIEW_LINK_TEST_ID = `${ENTITIES_HOST_OVERVIEW_TEST_ID}Link`;
+export const ENTITIES_HOST_OVERVIEW_IP_TEST_ID = `${ENTITIES_HOST_OVERVIEW_TEST_ID}IP`;
+export const ENTITIES_HOST_OVERVIEW_RISK_LEVEL_TEST_ID = `${ENTITIES_HOST_OVERVIEW_TEST_ID}RiskLevel`;
/* Insights Threat Intelligence */
export const INSIGHTS_THREAT_INTELLIGENCE_TEST_ID =
'securitySolutionDocumentDetailsFlyoutInsightsThreatIntelligence';
-export const INSIGHTS_THREAT_INTELLIGENCE_TITLE_TEST_ID = `${INSIGHTS_THREAT_INTELLIGENCE_TEST_ID}Title`;
-export const INSIGHTS_THREAT_INTELLIGENCE_CONTENT_TEST_ID = `${INSIGHTS_THREAT_INTELLIGENCE_TEST_ID}Content`;
-export const INSIGHTS_THREAT_INTELLIGENCE_VIEW_ALL_BUTTON_TEST_ID = `${INSIGHTS_THREAT_INTELLIGENCE_TEST_ID}ViewAllButton`;
-export const INSIGHTS_THREAT_INTELLIGENCE_LOADING_TEST_ID = `${INSIGHTS_THREAT_INTELLIGENCE_TEST_ID}Loading`;
+export const INSIGHTS_THREAT_INTELLIGENCE_TOGGLE_ICON_TEST_ID =
+ EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID(INSIGHTS_THREAT_INTELLIGENCE_TEST_ID);
+export const INSIGHTS_THREAT_INTELLIGENCE_TITLE_LINK_TEST_ID =
+ EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID(INSIGHTS_THREAT_INTELLIGENCE_TEST_ID);
+export const INSIGHTS_THREAT_INTELLIGENCE_TITLE_TEXT_TEST_ID =
+ EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID(INSIGHTS_THREAT_INTELLIGENCE_TEST_ID);
+export const INSIGHTS_THREAT_INTELLIGENCE_TITLE_ICON_TEST_ID =
+ EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID(INSIGHTS_THREAT_INTELLIGENCE_TEST_ID);
+export const INSIGHTS_THREAT_INTELLIGENCE_LOADING_TEST_ID = EXPANDABLE_PANEL_LOADING_TEST_ID(
+ INSIGHTS_THREAT_INTELLIGENCE_TEST_ID
+);
+export const INSIGHTS_THREAT_INTELLIGENCE_CONTENT_TEST_ID = EXPANDABLE_PANEL_CONTENT_TEST_ID(
+ INSIGHTS_THREAT_INTELLIGENCE_TEST_ID
+);
+export const INSIGHTS_THREAT_INTELLIGENCE_CONTAINER_TEST_ID = `${INSIGHTS_THREAT_INTELLIGENCE_TEST_ID}Container`;
export const INSIGHTS_THREAT_INTELLIGENCE_VALUE_TEST_ID = `${INSIGHTS_THREAT_INTELLIGENCE_TEST_ID}Value`;
/* Insights Correlations */
export const INSIGHTS_CORRELATIONS_TEST_ID =
'securitySolutionDocumentDetailsFlyoutInsightsCorrelations';
-export const INSIGHTS_CORRELATIONS_TITLE_TEST_ID = `${INSIGHTS_CORRELATIONS_TEST_ID}Title`;
-export const INSIGHTS_CORRELATIONS_CONTENT_TEST_ID = `${INSIGHTS_CORRELATIONS_TEST_ID}Content`;
-export const INSIGHTS_CORRELATIONS_VIEW_ALL_BUTTON_TEST_ID = `${INSIGHTS_CORRELATIONS_TEST_ID}ViewAllButton`;
-export const INSIGHTS_CORRELATIONS_LOADING_TEST_ID = `${INSIGHTS_CORRELATIONS_TEST_ID}Loading`;
+export const INSIGHTS_CORRELATIONS_TOGGLE_ICON_TEST_ID = EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID(
+ INSIGHTS_CORRELATIONS_TEST_ID
+);
+export const INSIGHTS_CORRELATIONS_TITLE_LINK_TEST_ID = EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID(
+ INSIGHTS_CORRELATIONS_TEST_ID
+);
+export const INSIGHTS_CORRELATIONS_TITLE_TEXT_TEST_ID = EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID(
+ INSIGHTS_CORRELATIONS_TEST_ID
+);
+export const INSIGHTS_CORRELATIONS_TITLE_ICON_TEST_ID = EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID(
+ INSIGHTS_CORRELATIONS_TEST_ID
+);
+export const INSIGHTS_CORRELATIONS_LOADING_TEST_ID = EXPANDABLE_PANEL_LOADING_TEST_ID(
+ INSIGHTS_CORRELATIONS_TEST_ID
+);
+export const INSIGHTS_CORRELATIONS_CONTENT_TEST_ID = EXPANDABLE_PANEL_CONTENT_TEST_ID(
+ INSIGHTS_CORRELATIONS_TEST_ID
+);
export const INSIGHTS_CORRELATIONS_VALUE_TEST_ID = `${INSIGHTS_CORRELATIONS_TEST_ID}Value`;
/* Insights Prevalence */
export const INSIGHTS_PREVALENCE_TEST_ID =
'securitySolutionDocumentDetailsFlyoutInsightsPrevalence';
-export const INSIGHTS_PREVALENCE_TITLE_TEST_ID = `${INSIGHTS_PREVALENCE_TEST_ID}Title`;
-export const INSIGHTS_PREVALENCE_CONTENT_TEST_ID = `${INSIGHTS_PREVALENCE_TEST_ID}Content`;
-export const INSIGHTS_PREVALENCE_VIEW_ALL_BUTTON_TEST_ID = `${INSIGHTS_PREVALENCE_TEST_ID}ViewAllButton`;
+export const INSIGHTS_PREVALENCE_TOGGLE_ICON_TEST_ID = EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID(
+ INSIGHTS_PREVALENCE_TEST_ID
+);
+export const INSIGHTS_PREVALENCE_TITLE_LINK_TEST_ID = EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID(
+ INSIGHTS_PREVALENCE_TEST_ID
+);
+export const INSIGHTS_PREVALENCE_TITLE_TEXT_TEST_ID = EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID(
+ INSIGHTS_PREVALENCE_TEST_ID
+);
+export const INSIGHTS_PREVALENCE_TITLE_ICON_TEST_ID = EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID(
+ INSIGHTS_PREVALENCE_TEST_ID
+);
+export const INSIGHTS_PREVALENCE_LOADING_TEST_ID = EXPANDABLE_PANEL_LOADING_TEST_ID(
+ INSIGHTS_PREVALENCE_TEST_ID
+);
+export const INSIGHTS_PREVALENCE_CONTENT_TEST_ID = EXPANDABLE_PANEL_CONTENT_TEST_ID(
+ INSIGHTS_PREVALENCE_TEST_ID
+);
export const INSIGHTS_PREVALENCE_VALUE_TEST_ID = `${INSIGHTS_PREVALENCE_TEST_ID}Value`;
+export const INSIGHTS_PREVALENCE_ROW_TEST_ID =
+ 'securitySolutionDocumentDetailsFlyoutInsightsPrevalenceRow';
/* Visualizations section */
export const VISUALIZATIONS_SECTION_TEST_ID = 'securitySolutionDocumentDetailsVisualizationsTitle';
export const VISUALIZATIONS_SECTION_HEADER_TEST_ID =
'securitySolutionDocumentDetailsVisualizationsTitleHeader';
+
+/* Visualizations analyzer preview */
+
export const ANALYZER_PREVIEW_TEST_ID = 'securitySolutionDocumentDetailsAnalayzerPreview';
-export const ANALYZER_TREE_TEST_ID = 'securitySolutionDocumentDetailsAnalayzerTree';
-export const ANALYZER_TREE_VIEW_DETAILS_BUTTON_TEST_ID =
- 'securitySolutionDocumentDetailsAnalayzerTreeViewDetailsButton';
-export const ANALYZER_TREE_LOADING_TEST_ID = 'securitySolutionDocumentDetailsAnalayzerTreeLoading';
-export const ANALYZER_TREE_ERROR_TEST_ID = 'securitySolutionDocumentDetailsAnalayzerTreeError';
+export const ANALYZER_PREVIEW_TOGGLE_ICON_TEST_ID =
+ EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID(ANALYZER_PREVIEW_TEST_ID);
+export const ANALYZER_PREVIEW_TITLE_LINK_TEST_ID =
+ EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID(ANALYZER_PREVIEW_TEST_ID);
+export const ANALYZER_PREVIEW_TITLE_TEXT_TEST_ID =
+ EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID(ANALYZER_PREVIEW_TEST_ID);
+export const ANALYZER_PREVIEW_TITLE_ICON_TEST_ID =
+ EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID(ANALYZER_PREVIEW_TEST_ID);
+export const ANALYZER_PREVIEW_LOADING_TEST_ID =
+ EXPANDABLE_PANEL_LOADING_TEST_ID(ANALYZER_PREVIEW_TEST_ID);
+export const ANALYZER_PREVIEW_CONTENT_TEST_ID =
+ EXPANDABLE_PANEL_CONTENT_TEST_ID(ANALYZER_PREVIEW_TEST_ID);
+
+/* Visualizations session preview */
+
export const SESSION_PREVIEW_TEST_ID = 'securitySolutionDocumentDetailsSessionPreview';
-export const SESSION_PREVIEW_VIEW_DETAILS_BUTTON_TEST_ID =
- 'securitySolutionDocumentDetailsSessionPreviewViewDetailsButton';
+export const SESSION_PREVIEW_TOGGLE_ICON_TEST_ID =
+ EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID(SESSION_PREVIEW_TEST_ID);
+export const SESSION_PREVIEW_TITLE_LINK_TEST_ID =
+ EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID(SESSION_PREVIEW_TEST_ID);
+export const SESSION_PREVIEW_TITLE_TEXT_TEST_ID =
+ EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID(SESSION_PREVIEW_TEST_ID);
+export const SESSION_PREVIEW_TITLE_ICON_TEST_ID =
+ EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID(SESSION_PREVIEW_TEST_ID);
+export const SESSION_PREVIEW_LOADING_TEST_ID =
+ EXPANDABLE_PANEL_LOADING_TEST_ID(SESSION_PREVIEW_TEST_ID);
+export const SESSION_PREVIEW_CONTENT_TEST_ID =
+ EXPANDABLE_PANEL_CONTENT_TEST_ID(SESSION_PREVIEW_TEST_ID);
/* Response section */
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.test.tsx
index ba954d0960913..09628a71fbbba 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.test.tsx
@@ -9,16 +9,19 @@ import React from 'react';
import { render } from '@testing-library/react';
import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context';
import { RightPanelContext } from '../context';
-import {
- INSIGHTS_THREAT_INTELLIGENCE_CONTENT_TEST_ID,
- INSIGHTS_THREAT_INTELLIGENCE_LOADING_TEST_ID,
- INSIGHTS_THREAT_INTELLIGENCE_TITLE_TEST_ID,
- INSIGHTS_THREAT_INTELLIGENCE_VIEW_ALL_BUTTON_TEST_ID,
-} from './test_ids';
import { TestProviders } from '../../../common/mock';
import { ThreatIntelligenceOverview } from './threat_intelligence_overview';
import { LeftPanelInsightsTabPath, LeftPanelKey } from '../../left';
import { useFetchThreatIntelligence } from '../hooks/use_fetch_threat_intelligence';
+import {
+ INSIGHTS_THREAT_INTELLIGENCE_CONTAINER_TEST_ID,
+ INSIGHTS_THREAT_INTELLIGENCE_CONTENT_TEST_ID,
+ INSIGHTS_THREAT_INTELLIGENCE_LOADING_TEST_ID,
+ INSIGHTS_THREAT_INTELLIGENCE_TITLE_ICON_TEST_ID,
+ INSIGHTS_THREAT_INTELLIGENCE_TITLE_LINK_TEST_ID,
+ INSIGHTS_THREAT_INTELLIGENCE_TITLE_TEXT_TEST_ID,
+ INSIGHTS_THREAT_INTELLIGENCE_TOGGLE_ICON_TEST_ID,
+} from './test_ids';
jest.mock('../hooks/use_fetch_threat_intelligence');
@@ -37,6 +40,21 @@ const renderThreatIntelligenceOverview = (contextValue: RightPanelContext) => (
);
describe(' ', () => {
+ it('should render wrapper component', () => {
+ (useFetchThreatIntelligence as jest.Mock).mockReturnValue({
+ loading: false,
+ });
+
+ const { getByTestId, queryByTestId } = render(
+ renderThreatIntelligenceOverview(panelContextValue)
+ );
+
+ expect(queryByTestId(INSIGHTS_THREAT_INTELLIGENCE_TOGGLE_ICON_TEST_ID)).not.toBeInTheDocument();
+ expect(getByTestId(INSIGHTS_THREAT_INTELLIGENCE_TITLE_ICON_TEST_ID)).toBeInTheDocument();
+ expect(getByTestId(INSIGHTS_THREAT_INTELLIGENCE_TITLE_LINK_TEST_ID)).toBeInTheDocument();
+ expect(queryByTestId(INSIGHTS_THREAT_INTELLIGENCE_TITLE_TEXT_TEST_ID)).not.toBeInTheDocument();
+ });
+
it('should render 1 match detected and 1 field enriched', () => {
(useFetchThreatIntelligence as jest.Mock).mockReturnValue({
loading: false,
@@ -46,7 +64,7 @@ describe(' ', () => {
const { getByTestId } = render(renderThreatIntelligenceOverview(panelContextValue));
- expect(getByTestId(INSIGHTS_THREAT_INTELLIGENCE_TITLE_TEST_ID)).toHaveTextContent(
+ expect(getByTestId(INSIGHTS_THREAT_INTELLIGENCE_TITLE_LINK_TEST_ID)).toHaveTextContent(
'Threat Intelligence'
);
expect(getByTestId(INSIGHTS_THREAT_INTELLIGENCE_CONTENT_TEST_ID)).toHaveTextContent(
@@ -55,7 +73,6 @@ describe(' ', () => {
expect(getByTestId(INSIGHTS_THREAT_INTELLIGENCE_CONTENT_TEST_ID)).toHaveTextContent(
'1 field enriched with threat intelligence'
);
- expect(getByTestId(INSIGHTS_THREAT_INTELLIGENCE_VIEW_ALL_BUTTON_TEST_ID)).toBeInTheDocument();
});
it('should render 2 matches detected and 2 fields enriched', () => {
@@ -67,7 +84,7 @@ describe(' ', () => {
const { getByTestId } = render(renderThreatIntelligenceOverview(panelContextValue));
- expect(getByTestId(INSIGHTS_THREAT_INTELLIGENCE_TITLE_TEST_ID)).toHaveTextContent(
+ expect(getByTestId(INSIGHTS_THREAT_INTELLIGENCE_TITLE_LINK_TEST_ID)).toHaveTextContent(
'Threat Intelligence'
);
expect(getByTestId(INSIGHTS_THREAT_INTELLIGENCE_CONTENT_TEST_ID)).toHaveTextContent(
@@ -76,7 +93,6 @@ describe(' ', () => {
expect(getByTestId(INSIGHTS_THREAT_INTELLIGENCE_CONTENT_TEST_ID)).toHaveTextContent(
'2 fields enriched with threat intelligence'
);
- expect(getByTestId(INSIGHTS_THREAT_INTELLIGENCE_VIEW_ALL_BUTTON_TEST_ID)).toBeInTheDocument();
});
it('should render 0 field enriched', () => {
@@ -126,9 +142,9 @@ describe(' ', () => {
eventId: null,
} as unknown as RightPanelContext;
- const { container } = render(renderThreatIntelligenceOverview(contextValue));
+ const { getByTestId } = render(renderThreatIntelligenceOverview(contextValue));
- expect(container).toBeEmptyDOMElement();
+ expect(getByTestId(INSIGHTS_THREAT_INTELLIGENCE_CONTAINER_TEST_ID)).toBeEmptyDOMElement();
});
it('should render null when dataFormattedForFieldBrowser is null', () => {
@@ -141,9 +157,9 @@ describe(' ', () => {
dataFormattedForFieldBrowser: null,
} as unknown as RightPanelContext;
- const { container } = render(renderThreatIntelligenceOverview(contextValue));
+ const { getByTestId } = render(renderThreatIntelligenceOverview(contextValue));
- expect(container).toBeEmptyDOMElement();
+ expect(getByTestId(INSIGHTS_THREAT_INTELLIGENCE_CONTAINER_TEST_ID)).toBeEmptyDOMElement();
});
it('should navigate to left section Insights tab when clicking on button', () => {
@@ -166,7 +182,7 @@ describe(' ', () => {
);
- getByTestId(INSIGHTS_THREAT_INTELLIGENCE_VIEW_ALL_BUTTON_TEST_ID).click();
+ getByTestId(INSIGHTS_THREAT_INTELLIGENCE_TITLE_LINK_TEST_ID).click();
expect(flyoutContextValue.openLeftPanel).toHaveBeenCalledWith({
id: LeftPanelKey,
path: LeftPanelInsightsTabPath,
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.tsx
index 3c9bbc1e356df..aa6ced53979e8 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.tsx
@@ -7,17 +7,15 @@
import type { FC } from 'react';
import React, { useCallback } from 'react';
-import { EuiButtonEmpty, EuiFlexGroup, EuiPanel } from '@elastic/eui';
+import { EuiFlexGroup } from '@elastic/eui';
import { useExpandableFlyoutContext } from '@kbn/expandable-flyout';
+import { ExpandablePanel } from '../../shared/components/expandable_panel';
import { useFetchThreatIntelligence } from '../hooks/use_fetch_threat_intelligence';
-import { InsightsSubSection } from './insights_subsection';
import { InsightsSummaryRow } from './insights_summary_row';
import { useRightPanelContext } from '../context';
import { INSIGHTS_THREAT_INTELLIGENCE_TEST_ID } from './test_ids';
import {
- VIEW_ALL,
THREAT_INTELLIGENCE_TITLE,
- THREAT_INTELLIGENCE_TEXT,
THREAT_MATCH_DETECTED,
THREAT_ENRICHMENT,
THREAT_MATCHES_DETECTED,
@@ -58,41 +56,37 @@ export const ThreatIntelligenceOverview: FC = () => {
const error: boolean = !eventId || !dataFormattedForFieldBrowser || threatIntelError;
return (
-
-
-
-
-
-
-
-
- {VIEW_ALL(THREAT_INTELLIGENCE_TEXT)}
-
-
+
+
+
+
);
};
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/translations.ts b/x-pack/plugins/security_solution/public/flyout/right/components/translations.ts
index 03b3c8d4b9d80..65dcb49f36f21 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/translations.ts
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/translations.ts
@@ -31,13 +31,6 @@ export const SEVERITY_TITLE = i18n.translate(
}
);
-export const STATUS_TITLE = i18n.translate(
- 'xpack.securitySolution.flyout.documentDetails.statusTitle',
- {
- defaultMessage: 'Status',
- }
-);
-
export const RISK_SCORE_TITLE = i18n.translate(
'xpack.securitySolution.flyout.documentDetails.riskScoreTitle',
{
@@ -158,20 +151,6 @@ export const TECHNICAL_PREVIEW_MESSAGE = i18n.translate(
}
);
-export const ENTITIES_TEXT = i18n.translate(
- 'xpack.securitySolution.flyout.documentDetails.overviewTab.entitiesText',
- {
- defaultMessage: 'entities',
- }
-);
-
-export const THREAT_INTELLIGENCE_TEXT = i18n.translate(
- 'xpack.securitySolution.flyout.documentDetails.overviewTab.threatIntelligenceText',
- {
- defaultMessage: 'fields of threat intelligence',
- }
-);
-
export const THREAT_MATCH_DETECTED = i18n.translate(
'xpack.securitySolution.flyout.documentDetails.overviewTab.threatIntelligence.threatMatch',
{
@@ -200,73 +179,6 @@ export const THREAT_ENRICHMENTS = i18n.translate(
}
);
-export const CORRELATIONS_TEXT = i18n.translate(
- 'xpack.securitySolution.flyout.documentDetails.overviewTab.correlationsText',
- {
- defaultMessage: 'fields of correlation',
- }
-);
-
-export const CORRELATIONS_ANCESTRY_ALERT = i18n.translate(
- 'xpack.securitySolution.flyout.documentDetails.overviewTab.correlations.ancestryAlert',
- {
- defaultMessage: 'alert related by ancestry',
- }
-);
-
-export const CORRELATIONS_ANCESTRY_ALERTS = i18n.translate(
- 'xpack.securitySolution.flyout.documentDetails.overviewTab.correlations.ancestryAlerts',
- {
- defaultMessage: 'alerts related by ancestry',
- }
-);
-export const CORRELATIONS_SAME_SOURCE_EVENT_ALERT = i18n.translate(
- 'xpack.securitySolution.flyout.documentDetails.overviewTab.correlations.sameSourceEventAlert',
- {
- defaultMessage: 'alert related by the same source event',
- }
-);
-
-export const CORRELATIONS_SAME_SOURCE_EVENT_ALERTS = i18n.translate(
- 'xpack.securitySolution.flyout.documentDetails.overviewTab.correlations.sameSourceEventAlerts',
- {
- defaultMessage: 'alerts related by the same source event',
- }
-);
-export const CORRELATIONS_SAME_SESSION_ALERT = i18n.translate(
- 'xpack.securitySolution.flyout.documentDetails.overviewTab.correlations.sameSessionAlert',
- {
- defaultMessage: 'alert related by session',
- }
-);
-
-export const CORRELATIONS_SAME_SESSION_ALERTS = i18n.translate(
- 'xpack.securitySolution.flyout.documentDetails.overviewTab.correlations.sameSessionAlerts',
- {
- defaultMessage: 'alerts related by session',
- }
-);
-export const CORRELATIONS_RELATED_CASE = i18n.translate(
- 'xpack.securitySolution.flyout.documentDetails.overviewTab.correlations.relatedCase',
- {
- defaultMessage: 'related case',
- }
-);
-
-export const CORRELATIONS_RELATED_CASES = i18n.translate(
- 'xpack.securitySolution.flyout.documentDetails.overviewTab.correlations.relatedCases',
- {
- defaultMessage: 'related cases',
- }
-);
-
-export const PREVALENCE_TEXT = i18n.translate(
- 'xpack.securitySolution.flyout.documentDetails.overviewTab.prevalenceText',
- {
- defaultMessage: 'fields of prevalence',
- }
-);
-
export const PREVALENCE_ROW_UNCOMMON = i18n.translate(
'xpack.securitySolution.flyout.documentDetails.overviewTab.prevalenceRowText',
{
@@ -274,11 +186,6 @@ export const PREVALENCE_ROW_UNCOMMON = i18n.translate(
}
);
-export const VIEW_ALL = (text: string) =>
- i18n.translate('xpack.securitySolution.flyout.documentDetails.overviewTab.viewAllButton', {
- values: { text },
- defaultMessage: 'View all {text}',
- });
export const VISUALIZATIONS_TITLE = i18n.translate(
'xpack.securitySolution.flyout.documentDetails.visualizationsTitle',
{ defaultMessage: 'Visualizations' }
@@ -289,13 +196,6 @@ export const ANALYZER_PREVIEW_TITLE = i18n.translate(
{ defaultMessage: 'Analyzer preview' }
);
-export const ANALYZER_PREVIEW_TEXT = i18n.translate(
- 'xpack.securitySolution.flyout.documentDetails.analyzerPreviewText',
- {
- defaultMessage: 'analyzer preview.',
- }
-);
-
export const SHARE = i18n.translate('xpack.securitySolution.flyout.documentDetails.share', {
defaultMessage: 'Share Alert',
});
@@ -349,13 +249,6 @@ export const RESPONSE_TITLE = i18n.translate(
}
);
-export const RESPONSE_BUTTON = i18n.translate(
- 'xpack.securitySolution.flyout.documentDetails.responseSectionButton',
- {
- defaultMessage: 'Response details',
- }
-);
-
export const RESPONSE_EMPTY = i18n.translate('xpack.securitySolution.flyout.response.empty', {
defaultMessage: 'There are no response actions defined for this event.',
});
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/user_entity_overview.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/user_entity_overview.test.tsx
index 1d97eb642967d..c2c26a8d288b8 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/user_entity_overview.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/user_entity_overview.test.tsx
@@ -12,10 +12,16 @@ import { useRiskScore } from '../../../explore/containers/risk_score';
import {
ENTITIES_USER_OVERVIEW_IP_TEST_ID,
+ ENTITIES_USER_OVERVIEW_LINK_TEST_ID,
ENTITIES_USER_OVERVIEW_RISK_LEVEL_TEST_ID,
TECHNICAL_PREVIEW_ICON_TEST_ID,
} from './test_ids';
import { useObservedUserDetails } from '../../../explore/users/containers/users/observed_details';
+import { mockContextValue } from '../mocks/mock_right_panel_context';
+import { mockDataFormattedForFieldBrowser } from '../mocks/mock_context';
+import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context';
+import { RightPanelContext } from '../context';
+import { LeftPanelInsightsTabPath, LeftPanelKey } from '../../left';
const userName = 'user';
const ip = '10.200.000.000';
@@ -25,6 +31,15 @@ const selectedPatterns = 'alerts';
const userData = { host: { ip: [ip] } };
const riskLevel = [{ user: { risk: { calculated_level: 'Medium' } } }];
+const panelContextValue = {
+ ...mockContextValue,
+ dataFormattedForFieldBrowser: mockDataFormattedForFieldBrowser,
+};
+
+const flyoutContextValue = {
+ openLeftPanel: jest.fn(),
+} as unknown as ExpandableFlyoutContext;
+
const mockUseGlobalTime = jest.fn().mockReturnValue({ from, to });
jest.mock('../../../common/containers/use_global_time', () => {
return {
@@ -53,7 +68,9 @@ describe(' ', () => {
const { getByTestId } = render(
-
+
+
+
);
@@ -68,7 +85,9 @@ describe(' ', () => {
const { getByTestId } = render(
-
+
+
+
);
expect(getByTestId(ENTITIES_USER_OVERVIEW_IP_TEST_ID)).toHaveTextContent('—');
@@ -83,7 +102,9 @@ describe(' ', () => {
mockUseRiskScore.mockReturnValue({ data: riskLevel, isAuthorized: false });
const { getByTestId, queryByTestId } = render(
-
+
+
+
);
@@ -96,12 +117,40 @@ describe(' ', () => {
mockUseRiskScore.mockReturnValue({ data: null, isAuthorized: false });
const { getByTestId, queryByTestId } = render(
-
+
+
+
);
expect(getByTestId(ENTITIES_USER_OVERVIEW_IP_TEST_ID)).toHaveTextContent('—');
expect(queryByTestId(TECHNICAL_PREVIEW_ICON_TEST_ID)).not.toBeInTheDocument();
});
+
+ it('should navigate to left panel entities tab when clicking on title', () => {
+ mockUseUserDetails.mockReturnValue([false, { userDetails: userData }]);
+ mockUseRiskScore.mockReturnValue({ data: riskLevel, isAuthorized: true });
+
+ const { getByTestId } = render(
+
+
+
+
+
+
+
+ );
+
+ getByTestId(ENTITIES_USER_OVERVIEW_LINK_TEST_ID).click();
+ expect(flyoutContextValue.openLeftPanel).toHaveBeenCalledWith({
+ id: LeftPanelKey,
+ path: LeftPanelInsightsTabPath,
+ params: {
+ id: panelContextValue.eventId,
+ indexName: panelContextValue.indexName,
+ scopeId: panelContextValue.scopeId,
+ },
+ });
+ });
});
});
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/user_entity_overview.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/user_entity_overview.tsx
index da821902ff190..61a598ddef771 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/user_entity_overview.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/user_entity_overview.tsx
@@ -5,10 +5,21 @@
* 2.0.
*/
-import React, { useMemo } from 'react';
-import { EuiFlexGroup, EuiFlexItem, EuiBetaBadge } from '@elastic/eui';
+import React, { useCallback, useMemo } from 'react';
+import {
+ EuiFlexGroup,
+ EuiFlexItem,
+ EuiBetaBadge,
+ EuiIcon,
+ EuiLink,
+ useEuiTheme,
+ useEuiFontSize,
+} from '@elastic/eui';
+import { css } from '@emotion/css';
import { getOr } from 'lodash/fp';
-import styled from 'styled-components';
+import { useExpandableFlyoutContext } from '@kbn/expandable-flyout';
+import { LeftPanelInsightsTabPath, LeftPanelKey } from '../../left';
+import { useRightPanelContext } from '../context';
import type { DescriptionList } from '../../../../common/utility_types';
import {
buildUserNamesFilter,
@@ -31,13 +42,11 @@ import {
ENTITIES_USER_OVERVIEW_TEST_ID,
ENTITIES_USER_OVERVIEW_IP_TEST_ID,
ENTITIES_USER_OVERVIEW_RISK_LEVEL_TEST_ID,
+ ENTITIES_USER_OVERVIEW_LINK_TEST_ID,
} from './test_ids';
import { useObservedUserDetails } from '../../../explore/users/containers/users/observed_details';
-const StyledEuiBetaBadge = styled(EuiBetaBadge)`
- margin-left: ${({ theme }) => theme.eui.euiSizeXS};
-`;
-
+const USER_ICON = 'user';
const CONTEXT_ID = `flyout-user-entity-overview`;
export interface UserEntityOverviewProps {
@@ -51,6 +60,20 @@ export interface UserEntityOverviewProps {
* User preview content for the entities preview in right flyout. It contains ip addresses and risk classification
*/
export const UserEntityOverview: React.FC = ({ userName }) => {
+ const { eventId, indexName, scopeId } = useRightPanelContext();
+ const { openLeftPanel } = useExpandableFlyoutContext();
+ const goToEntitiesTab = useCallback(() => {
+ openLeftPanel({
+ id: LeftPanelKey,
+ path: LeftPanelInsightsTabPath,
+ params: {
+ id: eventId,
+ indexName,
+ scopeId,
+ },
+ });
+ }, [eventId, openLeftPanel, indexName, scopeId]);
+
const { from, to } = useGlobalTime();
const { selectedPatterns } = useSourcererDataView();
@@ -97,6 +120,9 @@ export const UserEntityOverview: React.FC = ({ userName
[data]
);
+ const { euiTheme } = useEuiTheme();
+ const xsFontSize = useEuiFontSize('xs').fontSize;
+
const [userRiskLevel] = useMemo(() => {
const userRiskData = userRisk && userRisk.length > 0 ? userRisk[0] : undefined;
@@ -105,7 +131,10 @@ export const UserEntityOverview: React.FC = ({ userName
title: (
<>
{i18n.USER_RISK_CLASSIFICATION}
- = ({ userName
),
},
];
- }, [userRisk]);
+ }, [euiTheme.size.xs, userRisk]);
return (
-
+
-
+
+
+
+
+
+
+ {userName}
+
+
+
- {isAuthorized && (
-
- )}
+
+
+
+
+
+ {isAuthorized && (
+
+ )}
+
+
);
diff --git a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_prevalence.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/hooks/use_prevalence.test.tsx
index dfbdf3f278ef5..aff691037d435 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_prevalence.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/hooks/use_prevalence.test.tsx
@@ -5,8 +5,8 @@
* 2.0.
*/
+import type { ReactElement } from 'react';
import { getSummaryRows } from '../../../common/components/event_details/get_alert_summary_rows';
-import type { UsePrevalenceResult } from './use_prevalence';
import { usePrevalence } from './use_prevalence';
import type { RenderHookResult } from '@testing-library/react-hooks';
import { renderHook } from '@testing-library/react-hooks';
@@ -20,7 +20,7 @@ const dataFormattedForFieldBrowser = mockDataFormattedForFieldBrowser;
const scopeId = 'scopeId';
describe('usePrevalence', () => {
- let hookResult: RenderHookResult;
+ let hookResult: RenderHookResult;
it('should return 1 row to render', () => {
const mockSummaryRow = {
@@ -38,8 +38,7 @@ describe('usePrevalence', () => {
usePrevalence({ browserFields, dataFormattedForFieldBrowser, eventId, scopeId })
);
- expect(hookResult.result.current.prevalenceRows.length).toEqual(1);
- expect(hookResult.result.current.empty).toEqual(false);
+ expect(hookResult.result.current.length).toEqual(1);
});
it('should return empty true', () => {
@@ -49,7 +48,6 @@ describe('usePrevalence', () => {
usePrevalence({ browserFields, dataFormattedForFieldBrowser, eventId, scopeId })
);
- expect(hookResult.result.current.prevalenceRows.length).toEqual(0);
- expect(hookResult.result.current.empty).toEqual(true);
+ expect(hookResult.result.current.length).toEqual(0);
});
});
diff --git a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_prevalence.tsx b/x-pack/plugins/security_solution/public/flyout/right/hooks/use_prevalence.tsx
index 82a359d0e70f1..162bc8bc851aa 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_prevalence.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/hooks/use_prevalence.tsx
@@ -7,10 +7,10 @@
import type { BrowserFields, TimelineEventsDetailsItem } from '@kbn/timelines-plugin/common';
import type { ReactElement } from 'react';
-import React, { useMemo, useState } from 'react';
+import React, { useMemo } from 'react';
import { getSummaryRows } from '../../../common/components/event_details/get_alert_summary_rows';
import { PrevalenceOverviewRow } from '../components/prevalence_overview_row';
-import { INSIGHTS_PREVALENCE_TEST_ID } from '../components/test_ids';
+import { INSIGHTS_PREVALENCE_ROW_TEST_ID } from '../components/test_ids';
export interface UsePrevalenceParams {
/**
@@ -30,16 +30,6 @@ export interface UsePrevalenceParams {
*/
scopeId: string;
}
-export interface UsePrevalenceResult {
- /**
- * Returns all row children to render
- */
- prevalenceRows: ReactElement[];
- /**
- * Returns true if all row children render null
- */
- empty: boolean;
-}
/**
* This hook retrieves the highlighted fields from the {@link getSummaryRows} method, then iterates through them
@@ -52,9 +42,7 @@ export const usePrevalence = ({
browserFields,
dataFormattedForFieldBrowser,
scopeId,
-}: UsePrevalenceParams): UsePrevalenceResult => {
- const [count, setCount] = useState(0); // TODO this needs to be changed at it causes a re-render when the count is updated
-
+}: UsePrevalenceParams): ReactElement[] => {
// retrieves the highlighted fields
const summaryRows = useMemo(
() =>
@@ -68,7 +56,7 @@ export const usePrevalence = ({
[browserFields, dataFormattedForFieldBrowser, eventId, scopeId]
);
- const prevalenceRows = useMemo(
+ return useMemo(
() =>
summaryRows.map((row) => {
const highlightedField = {
@@ -79,17 +67,11 @@ export const usePrevalence = ({
return (
setCount((prevCount) => prevCount + 1)}
- data-test-subj={INSIGHTS_PREVALENCE_TEST_ID}
+ data-test-subj={INSIGHTS_PREVALENCE_ROW_TEST_ID}
key={row.description.data.field}
/>
);
}),
[summaryRows]
);
-
- return {
- prevalenceRows,
- empty: count >= summaryRows.length,
- };
};
diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.stories.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.stories.tsx
new file mode 100644
index 0000000000000..25b5243e82d3a
--- /dev/null
+++ b/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.stories.tsx
@@ -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 React from 'react';
+import type { Story } from '@storybook/react';
+import { EuiIcon } from '@elastic/eui';
+import { ExpandablePanel } from './expandable_panel';
+
+export default {
+ component: ExpandablePanel,
+ title: 'Flyout/ExpandablePanel',
+};
+
+const defaultProps = {
+ header: {
+ title: 'title',
+ iconType: 'storage',
+ },
+};
+const headerContent = ;
+
+const children = {'test content'}
;
+
+export const Default: Story = () => {
+ return {children} ;
+};
+
+export const DefaultWithHeaderContent: Story = () => {
+ const props = {
+ ...defaultProps,
+ header: { ...defaultProps.header, headerContent },
+ };
+ return {children} ;
+};
+
+export const Expandable: Story = () => {
+ const props = {
+ ...defaultProps,
+ expand: { expandable: true },
+ };
+ return {children} ;
+};
+
+export const ExpandableDefaultOpen: Story = () => {
+ const props = {
+ ...defaultProps,
+ expand: { expandable: true, expandedOnFirstRender: true },
+ };
+ return {children} ;
+};
+
+export const EmptyDefault: Story = () => {
+ return ;
+};
+
+export const EmptyDefaultExpanded: Story = () => {
+ const props = {
+ ...defaultProps,
+ expand: { expandable: true },
+ };
+ return ;
+};
diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.test.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.test.tsx
new file mode 100644
index 0000000000000..7c7f46a11c308
--- /dev/null
+++ b/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.test.tsx
@@ -0,0 +1,190 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React from 'react';
+import { render } from '@testing-library/react';
+import {
+ EXPANDABLE_PANEL_HEADER_LEFT_SECTION_TEST_ID,
+ EXPANDABLE_PANEL_HEADER_RIGHT_SECTION_TEST_ID,
+ EXPANDABLE_PANEL_CONTENT_TEST_ID,
+ EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID,
+ EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID,
+} from './test_ids';
+import { ThemeProvider } from 'styled-components';
+import { getMockTheme } from '../../../common/lib/kibana/kibana_react.mock';
+import { ExpandablePanel } from './expandable_panel';
+
+const mockTheme = getMockTheme({ eui: { euiColorMediumShade: '#ece' } });
+const TEST_ID = 'test-id';
+const defaultProps = {
+ header: {
+ title: 'test title',
+ iconType: 'storage',
+ },
+ 'data-test-subj': TEST_ID,
+};
+const children = {'test content'}
;
+
+describe(' ', () => {
+ describe('panel is not expandable by default', () => {
+ it('should render non-expandable panel by default', () => {
+ const { getByTestId, queryByTestId } = render(
+
+ {children}
+
+ );
+ expect(getByTestId(TEST_ID)).toBeInTheDocument();
+ expect(getByTestId(EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID(TEST_ID))).toBeInTheDocument();
+ expect(getByTestId(EXPANDABLE_PANEL_CONTENT_TEST_ID(TEST_ID))).toHaveTextContent(
+ 'test content'
+ );
+ expect(queryByTestId(EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID(TEST_ID))).not.toBeInTheDocument();
+ });
+
+ it('should only render left section of panel header when headerContent is not passed', () => {
+ const { getByTestId, queryByTestId } = render(
+
+ {children}
+
+ );
+ expect(getByTestId(EXPANDABLE_PANEL_HEADER_LEFT_SECTION_TEST_ID(TEST_ID))).toHaveTextContent(
+ 'test title'
+ );
+ expect(
+ queryByTestId(EXPANDABLE_PANEL_HEADER_RIGHT_SECTION_TEST_ID(TEST_ID))
+ ).not.toBeInTheDocument();
+ });
+
+ it('should render header properly when headerContent is available', () => {
+ const props = {
+ ...defaultProps,
+ header: { ...defaultProps.header, headerContent: <>{'test header content'}> },
+ };
+ const { getByTestId } = render(
+
+ {children}
+
+ );
+ expect(
+ getByTestId(EXPANDABLE_PANEL_HEADER_LEFT_SECTION_TEST_ID(TEST_ID))
+ ).toBeInTheDocument();
+ expect(
+ getByTestId(EXPANDABLE_PANEL_HEADER_RIGHT_SECTION_TEST_ID(TEST_ID))
+ ).toBeInTheDocument();
+ expect(getByTestId(EXPANDABLE_PANEL_HEADER_RIGHT_SECTION_TEST_ID(TEST_ID))).toHaveTextContent(
+ 'test header content'
+ );
+ });
+
+ it('should not render content when content is null', () => {
+ const { queryByTestId } = render(
+
+
+
+ );
+
+ expect(queryByTestId(EXPANDABLE_PANEL_CONTENT_TEST_ID(TEST_ID))).not.toBeInTheDocument();
+ expect(queryByTestId(EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID(TEST_ID))).not.toBeInTheDocument();
+ });
+ });
+
+ describe('panel is expandable', () => {
+ const expandableDefaultProps = {
+ ...defaultProps,
+ expand: { expandable: true },
+ };
+
+ it('should render panel with toggle and collapsed by default', () => {
+ const { getByTestId, queryByTestId } = render(
+
+ {children}
+
+ );
+ expect(getByTestId(TEST_ID)).toBeInTheDocument();
+ expect(getByTestId(EXPANDABLE_PANEL_HEADER_LEFT_SECTION_TEST_ID(TEST_ID))).toHaveTextContent(
+ 'test title'
+ );
+ expect(queryByTestId(EXPANDABLE_PANEL_CONTENT_TEST_ID(TEST_ID))).not.toBeInTheDocument();
+ });
+
+ it('click toggle button should expand the panel', () => {
+ const { getByTestId } = render(
+
+ {children}
+
+ );
+
+ const toggle = getByTestId(EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID(TEST_ID));
+ expect(toggle.firstChild).toHaveAttribute('data-euiicon-type', 'arrowRight');
+ toggle.click();
+
+ expect(getByTestId(EXPANDABLE_PANEL_CONTENT_TEST_ID(TEST_ID))).toHaveTextContent(
+ 'test content'
+ );
+ expect(toggle.firstChild).toHaveAttribute('data-euiicon-type', 'arrowDown');
+ });
+
+ it('should not render toggle or content when content is null', () => {
+ const { queryByTestId } = render(
+
+
+
+ );
+ expect(queryByTestId(EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID(TEST_ID))).not.toBeInTheDocument();
+ expect(queryByTestId(EXPANDABLE_PANEL_CONTENT_TEST_ID(TEST_ID))).not.toBeInTheDocument();
+ });
+ });
+
+ describe('panel is expandable and expanded', () => {
+ const expandedDefaultProps = {
+ ...defaultProps,
+ expand: { expandable: true, expandedOnFirstRender: true },
+ };
+
+ it('should render header and content', () => {
+ const { getByTestId } = render(
+
+ {children}
+
+ );
+ expect(getByTestId(TEST_ID)).toBeInTheDocument();
+ expect(getByTestId(EXPANDABLE_PANEL_HEADER_LEFT_SECTION_TEST_ID(TEST_ID))).toHaveTextContent(
+ 'test title'
+ );
+ expect(getByTestId(EXPANDABLE_PANEL_CONTENT_TEST_ID(TEST_ID))).toHaveTextContent(
+ 'test content'
+ );
+ expect(getByTestId(EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID(TEST_ID))).toBeInTheDocument();
+ });
+
+ it('click toggle button should collapse the panel', () => {
+ const { getByTestId, queryByTestId } = render(
+
+ {children}
+
+ );
+
+ const toggle = getByTestId(EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID(TEST_ID));
+ expect(toggle.firstChild).toHaveAttribute('data-euiicon-type', 'arrowDown');
+ expect(getByTestId(EXPANDABLE_PANEL_CONTENT_TEST_ID(TEST_ID))).toBeInTheDocument();
+
+ toggle.click();
+ expect(toggle.firstChild).toHaveAttribute('data-euiicon-type', 'arrowRight');
+ expect(queryByTestId(EXPANDABLE_PANEL_CONTENT_TEST_ID(TEST_ID))).not.toBeInTheDocument();
+ });
+
+ it('should not render content when content is null', () => {
+ const { queryByTestId } = render(
+
+
+
+ );
+ expect(queryByTestId(EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID(TEST_ID))).not.toBeInTheDocument();
+ expect(queryByTestId(EXPANDABLE_PANEL_CONTENT_TEST_ID(TEST_ID))).not.toBeInTheDocument();
+ });
+ });
+});
diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.tsx
new file mode 100644
index 0000000000000..f9bf5994dff35
--- /dev/null
+++ b/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.tsx
@@ -0,0 +1,194 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React, { useMemo, useState, useCallback } from 'react';
+import {
+ EuiButtonIcon,
+ EuiSplitPanel,
+ EuiFlexGroup,
+ EuiFlexItem,
+ EuiPanel,
+ EuiIcon,
+ EuiLink,
+ EuiTitle,
+ EuiText,
+ EuiLoadingSpinner,
+} from '@elastic/eui';
+import styled from 'styled-components';
+
+const StyledEuiFlexItem = styled(EuiFlexItem)`
+ margin-right: ${({ theme }) => theme.eui.euiSizeM};
+`;
+
+const StyledEuiIcon = styled(EuiIcon)`
+ margin: ${({ theme }) => theme.eui.euiSizeS} 0;
+`;
+
+const StyledEuiLink = styled(EuiLink)`
+ font-size: 12px;
+ font-weight: 700;
+`;
+
+export interface ExpandablePanelPanelProps {
+ header: {
+ /**
+ * String value of the title to be displayed in the header of panel
+ */
+ title: string;
+ /**
+ * Callback function to be called when the title is clicked
+ */
+ callback?: () => void;
+ /**
+ * Icon string for displaying the specified icon in the header
+ */
+ iconType: string;
+ /**
+ * Optional content and actions to be displayed on the right side of header
+ */
+ headerContent?: React.ReactNode;
+ };
+ content?: {
+ /**
+ * Renders a loading spinner if true
+ */
+ loading?: boolean;
+ /**
+ * Returns a null component if true
+ */
+ error?: boolean;
+ };
+ expand?: {
+ /**
+ * Boolean to determine the panel to be collapsable (with toggle)
+ */
+ expandable?: boolean;
+ /**
+ * Boolean to allow the component to be expanded or collapsed on first render
+ */
+ expandedOnFirstRender?: boolean;
+ };
+ /**
+ Data test subject string for testing
+ */
+ ['data-test-subj']?: string;
+}
+
+/**
+ * Wrapper component that is composed of a header section and a content section.
+ * The header can display an icon, a title (that can be a link), and an optional content section on the right.
+ * The content section can display a loading spinner, an error message, or any other content.
+ * The component can be expanded or collapsed by clicking on the chevron icon on the left of the title.
+ */
+export const ExpandablePanel: React.FC = ({
+ header: { title, callback, iconType, headerContent },
+ content: { loading, error } = { loading: false, error: false },
+ expand: { expandable, expandedOnFirstRender } = {
+ expandable: false,
+ expandedOnFirstRender: false,
+ },
+ 'data-test-subj': dataTestSubj,
+ children,
+}) => {
+ const [toggleStatus, setToggleStatus] = useState(expandedOnFirstRender);
+ const toggleQuery = useCallback(() => {
+ setToggleStatus(!toggleStatus);
+ }, [setToggleStatus, toggleStatus]);
+
+ const toggleIcon = useMemo(
+ () => (
+
+ ),
+ [dataTestSubj, toggleStatus, toggleQuery]
+ );
+
+ const headerLeftSection = useMemo(
+ () => (
+
+
+ {expandable && children && toggleIcon}
+
+
+
+
+ {callback ? (
+
+ {title}
+
+ ) : (
+
+ {title}
+
+ )}
+
+
+
+ ),
+ [dataTestSubj, expandable, children, toggleIcon, callback, iconType, title]
+ );
+
+ const headerRightSection = useMemo(
+ () =>
+ headerContent && (
+
+ {headerContent}
+
+ ),
+ [dataTestSubj, headerContent]
+ );
+
+ const showContent = useMemo(() => {
+ if (!children) {
+ return false;
+ }
+ return !expandable || (expandable && toggleStatus);
+ }, [children, expandable, toggleStatus]);
+
+ const content = loading ? (
+
+
+
+
+
+ ) : error ? null : (
+ children
+ );
+
+ return (
+
+
+
+ {headerLeftSection}
+ {headerRightSection}
+
+
+ {showContent && (
+
+ {content}
+
+ )}
+
+ );
+};
+
+ExpandablePanel.displayName = 'ExpandablePanel';
diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/shared/components/test_ids.ts
new file mode 100644
index 0000000000000..1e5ed99958b04
--- /dev/null
+++ b/x-pack/plugins/security_solution/public/flyout/shared/components/test_ids.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.
+ */
+
+/* Insights section*/
+
+export const EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID = (dataTestSubj: string) =>
+ `${dataTestSubj}ToggleIcon`;
+export const EXPANDABLE_PANEL_HEADER_LEFT_SECTION_TEST_ID = (dataTestSubj: string) =>
+ `${dataTestSubj}LeftSection`;
+export const EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID = (dataTestSubj: string) =>
+ `${dataTestSubj}TitleIcon`;
+export const EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID = (dataTestSubj: string) =>
+ `${dataTestSubj}TitleLink`;
+export const EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID = (dataTestSubj: string) =>
+ `${dataTestSubj}TitleText`;
+export const EXPANDABLE_PANEL_HEADER_RIGHT_SECTION_TEST_ID = (dataTestSubj: string) =>
+ `${dataTestSubj}RightSection`;
+export const EXPANDABLE_PANEL_LOADING_TEST_ID = (dataTestSubj: string) => `${dataTestSubj}Loading`;
+export const EXPANDABLE_PANEL_CONTENT_TEST_ID = (dataTestSubj: string) => `${dataTestSubj}Content`;
diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json
index e1d6766eab2d1..cb45aa2eec3d8 100644
--- a/x-pack/plugins/translations/translations/fr-FR.json
+++ b/x-pack/plugins/translations/translations/fr-FR.json
@@ -30066,7 +30066,6 @@
"xpack.securitySolution.flyout.correlations.relatedCasesHeading": "{count} associé {count, plural, one {cas} many {aux cas suivants} other {aux cas suivants}}",
"xpack.securitySolution.flyout.correlations.sessionAlertsHeading": "{count, plural, one {# alerte} many {# alertes} other {Alertes #}} associé(es) par session",
"xpack.securitySolution.flyout.correlations.sourceAlertsHeading": "{count, plural, one {# alerte} many {# alertes} other {Alertes #}} associé(es) par événement source",
- "xpack.securitySolution.flyout.documentDetails.overviewTab.viewAllButton": "Afficher tous les {text}",
"xpack.securitySolution.flyout.errorMessage": "Une erreur est survenue lors de l'affichage de {message}",
"xpack.securitySolution.flyout.errorTitle": "Impossible d'afficher {title}",
"xpack.securitySolution.footer.autoRefreshActiveTooltip": "Lorsque le rafraîchissement automatique est activé, la chronologie vous montre les {numberOfItems} derniers événements qui correspondent à votre requête.",
@@ -33336,7 +33335,6 @@
"xpack.securitySolution.flyout.correlations.timestampColumnTitle": "Horodatage",
"xpack.securitySolution.flyout.documentDetails.alertReasonTitle": "Raison d'alerte",
"xpack.securitySolution.flyout.documentDetails.analyzerGraphButton": "Graph Analyseur",
- "xpack.securitySolution.flyout.documentDetails.analyzerPreviewText": "aperçu de l'analyseur.",
"xpack.securitySolution.flyout.documentDetails.analyzerPreviewTitle": "Aperçu de l'analyseur",
"xpack.securitySolution.flyout.documentDetails.collapseDetailButton": "Réduire les détails de l'alerte",
"xpack.securitySolution.flyout.documentDetails.correlationsButton": "Corrélations",
@@ -33365,14 +33363,11 @@
"xpack.securitySolution.flyout.documentDetails.overviewTab.correlations.sameSourceEventAlert": "alerte associée par le même événement source",
"xpack.securitySolution.flyout.documentDetails.overviewTab.correlations.sameSourceEventAlerts": "alertes associées par le même événement source",
"xpack.securitySolution.flyout.documentDetails.overviewTab.correlationsText": "champs de corrélation",
- "xpack.securitySolution.flyout.documentDetails.overviewTab.entitiesText": "les entités sélectionnées",
"xpack.securitySolution.flyout.documentDetails.overviewTab.prevalenceRowText": "est inhabituel",
- "xpack.securitySolution.flyout.documentDetails.overviewTab.prevalenceText": "champs de prévalence",
"xpack.securitySolution.flyout.documentDetails.overviewTab.threatIntelligence.threatEnrichment": "champ enrichi avec la Threat Intelligence",
"xpack.securitySolution.flyout.documentDetails.overviewTab.threatIntelligence.threatEnrichments": "champs enrichis avec la Threat Intelligence",
"xpack.securitySolution.flyout.documentDetails.overviewTab.threatIntelligence.threatMatch": "correspondance de menace détectée",
"xpack.securitySolution.flyout.documentDetails.overviewTab.threatIntelligence.threatMatches": "correspondances de menaces détectées",
- "xpack.securitySolution.flyout.documentDetails.overviewTab.threatIntelligenceText": "champs de Threat Intelligence",
"xpack.securitySolution.flyout.documentDetails.prevalenceButton": "Prévalence",
"xpack.securitySolution.flyout.documentDetails.prevalenceTitle": "Prévalence",
"xpack.securitySolution.flyout.documentDetails.riskScoreTitle": "Score de risque",
diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json
index 86ed70f542dfc..c9ee7f1a68ba4 100644
--- a/x-pack/plugins/translations/translations/ja-JP.json
+++ b/x-pack/plugins/translations/translations/ja-JP.json
@@ -30065,7 +30065,6 @@
"xpack.securitySolution.flyout.correlations.relatedCasesHeading": "{count}件の関連する{count, plural, other {ケース}}",
"xpack.securitySolution.flyout.correlations.sessionAlertsHeading": "セッションに関連する{count, plural, other {#件のアラート}}",
"xpack.securitySolution.flyout.correlations.sourceAlertsHeading": "ソースイベントに関連する{count, plural, other {#件のアラート}}",
- "xpack.securitySolution.flyout.documentDetails.overviewTab.viewAllButton": "すべての{text}を表示",
"xpack.securitySolution.flyout.errorMessage": "{message}の表示中にエラーが発生しました",
"xpack.securitySolution.flyout.errorTitle": "{title}を表示できません",
"xpack.securitySolution.footer.autoRefreshActiveTooltip": "自動更新が有効な間、タイムラインはクエリに一致する直近{numberOfItems}件のイベントを表示します。",
@@ -33335,7 +33334,6 @@
"xpack.securitySolution.flyout.correlations.timestampColumnTitle": "タイムスタンプ",
"xpack.securitySolution.flyout.documentDetails.alertReasonTitle": "アラートの理由",
"xpack.securitySolution.flyout.documentDetails.analyzerGraphButton": "アナライザーグラフ",
- "xpack.securitySolution.flyout.documentDetails.analyzerPreviewText": "アナライザープレビュー。",
"xpack.securitySolution.flyout.documentDetails.analyzerPreviewTitle": "アナライザープレビュー",
"xpack.securitySolution.flyout.documentDetails.collapseDetailButton": "アラート詳細を折りたたむ",
"xpack.securitySolution.flyout.documentDetails.correlationsButton": "相関関係",
@@ -33364,14 +33362,11 @@
"xpack.securitySolution.flyout.documentDetails.overviewTab.correlations.sameSourceEventAlert": "同じソースイベントに関連するアラート",
"xpack.securitySolution.flyout.documentDetails.overviewTab.correlations.sameSourceEventAlerts": "同じソースイベントに関連するアラート",
"xpack.securitySolution.flyout.documentDetails.overviewTab.correlationsText": "相関のフィールド",
- "xpack.securitySolution.flyout.documentDetails.overviewTab.entitiesText": "エンティティ",
"xpack.securitySolution.flyout.documentDetails.overviewTab.prevalenceRowText": "共通しない",
- "xpack.securitySolution.flyout.documentDetails.overviewTab.prevalenceText": "発生率のフィールド",
"xpack.securitySolution.flyout.documentDetails.overviewTab.threatIntelligence.threatEnrichment": "脅威インテリジェンスで拡張されたフィールド",
"xpack.securitySolution.flyout.documentDetails.overviewTab.threatIntelligence.threatEnrichments": "脅威インテリジェンスで拡張されたフィールド",
"xpack.securitySolution.flyout.documentDetails.overviewTab.threatIntelligence.threatMatch": "脅威一致が検出されました",
"xpack.securitySolution.flyout.documentDetails.overviewTab.threatIntelligence.threatMatches": "脅威一致が検出されました",
- "xpack.securitySolution.flyout.documentDetails.overviewTab.threatIntelligenceText": "脅威インテリジェンスのフィールド",
"xpack.securitySolution.flyout.documentDetails.prevalenceButton": "発生率",
"xpack.securitySolution.flyout.documentDetails.prevalenceTitle": "発生率",
"xpack.securitySolution.flyout.documentDetails.riskScoreTitle": "リスクスコア",
diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json
index 0ee3c9fbd860e..cf1102139b09a 100644
--- a/x-pack/plugins/translations/translations/zh-CN.json
+++ b/x-pack/plugins/translations/translations/zh-CN.json
@@ -30061,7 +30061,6 @@
"xpack.securitySolution.flyout.correlations.relatedCasesHeading": "{count} 个相关{count, plural, other {案例}}",
"xpack.securitySolution.flyout.correlations.sessionAlertsHeading": "{count, plural, other {# 个告警}}与会话相关",
"xpack.securitySolution.flyout.correlations.sourceAlertsHeading": "{count, plural, other {# 个告警}}与源事件相关",
- "xpack.securitySolution.flyout.documentDetails.overviewTab.viewAllButton": "查看所有 {text}",
"xpack.securitySolution.flyout.errorMessage": "显示 {message} 时出现错误",
"xpack.securitySolution.flyout.errorTitle": "无法显示 {title}",
"xpack.securitySolution.footer.autoRefreshActiveTooltip": "自动刷新已启用时,时间线将显示匹配查询的最近 {numberOfItems} 个事件。",
@@ -33331,7 +33330,6 @@
"xpack.securitySolution.flyout.correlations.timestampColumnTitle": "时间戳",
"xpack.securitySolution.flyout.documentDetails.alertReasonTitle": "告警原因",
"xpack.securitySolution.flyout.documentDetails.analyzerGraphButton": "分析器图表",
- "xpack.securitySolution.flyout.documentDetails.analyzerPreviewText": "分析器预览。",
"xpack.securitySolution.flyout.documentDetails.analyzerPreviewTitle": "分析器预览",
"xpack.securitySolution.flyout.documentDetails.collapseDetailButton": "折叠告警详情",
"xpack.securitySolution.flyout.documentDetails.correlationsButton": "相关性",
@@ -33360,14 +33358,11 @@
"xpack.securitySolution.flyout.documentDetails.overviewTab.correlations.sameSourceEventAlert": "告警与同一源事件相关",
"xpack.securitySolution.flyout.documentDetails.overviewTab.correlations.sameSourceEventAlerts": "告警与同一源事件相关",
"xpack.securitySolution.flyout.documentDetails.overviewTab.correlationsText": "相关性字段",
- "xpack.securitySolution.flyout.documentDetails.overviewTab.entitiesText": "实体",
"xpack.securitySolution.flyout.documentDetails.overviewTab.prevalenceRowText": "不常见",
- "xpack.securitySolution.flyout.documentDetails.overviewTab.prevalenceText": "普及率字段",
"xpack.securitySolution.flyout.documentDetails.overviewTab.threatIntelligence.threatEnrichment": "已使用威胁情报扩充字段",
"xpack.securitySolution.flyout.documentDetails.overviewTab.threatIntelligence.threatEnrichments": "已使用威胁情报扩充字段",
"xpack.securitySolution.flyout.documentDetails.overviewTab.threatIntelligence.threatMatch": "检测到威胁匹配",
"xpack.securitySolution.flyout.documentDetails.overviewTab.threatIntelligence.threatMatches": "检测到威胁匹配",
- "xpack.securitySolution.flyout.documentDetails.overviewTab.threatIntelligenceText": "威胁情报字段",
"xpack.securitySolution.flyout.documentDetails.prevalenceButton": "普及率",
"xpack.securitySolution.flyout.documentDetails.prevalenceTitle": "普及率",
"xpack.securitySolution.flyout.documentDetails.riskScoreTitle": "风险分数",
From 0a74fa03a028e7002b5fdebdbfa7dc0c7283aa75 Mon Sep 17 00:00:00 2001
From: Nathan Reese
Date: Fri, 11 Aug 2023 13:58:19 -0600
Subject: [PATCH 34/46] [controls] fix Dashboard getting stuck at loading in
Kibana when Controls is used and mapping changed from integer to keyword
(#163529)
Closes https://github.com/elastic/kibana/issues/162474
### Changes
* RangeSliderEmbeddable - call setInitializationFinished when
runRangeSliderQuery throws. This fixes the issue
* Investigated if OptionsListEmbeddable is vulnerable to the same issue.
It's not because it uses its own REST API that has a service wrapper
`OptionsListService`. `OptionsListService` handles REST API errors.
* Add unit test verifying OptionsListService.runOptionsListRequest does
not throw when there are REST API errors and always returns a response.
* Add unit tests ensuring setInitializationFinished is called for both
RangeSliderEmbeddable and OptionsListEmbeddable in all cases
* Other clean up
* Fix uses of `dataViewsService.get`. `dataViewsService.get` throws when
data view is not found. It does not return undefined. PR updates
OptionsListEmbeddable, RangeSliderEmbeddable, and mocked data service
* Fix uses of `dataView.getFieldByName`. `dataView.getFieldByName`
returns undefined when field is not found and never throws. PR updates
OptionsListEmbeddable and RangeSliderEmbeddable
* Remove `resp` wrapper around mocked `fetch` results.
### Test instructions
1) In console run
```
PUT test1
PUT test1/_mapping
{
"properties": {
"value": {
"type": "integer"
}
}
}
PUT test1/_doc/1
{
"value" : 1
}
PUT test1/_doc/2
{
"value" : 10
}
```
2) create data view `test*`
3) create dashboard with range slider control on test*.value.
4) select a range in the range slider
5) save dashboard
6) run the following in console
```
PUT test2
PUT test2/_mapping
{
"properties": {
"value": {
"type": "keyword"
}
}
}
PUT test2/_doc/1
{
"value" : "foo"
}
DELETE test1
```
7) Open dashboard saved above. Verify dashboard opens and control
displays an error message about being unable to run aggregation on
keyword field.
---------
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Devon Thomson
---
.../options_list_embeddable.test.tsx | 108 +++++++++
.../embeddable/options_list_embeddable.tsx | 35 +--
.../range_slider_embeddable.test.tsx | 211 ++++++++++++++++++
.../embeddable/range_slider_embeddable.tsx | 85 +++----
.../public/services/data/data.story.ts | 4 +-
.../services/data_views/data_views.story.ts | 36 ++-
.../options_list/options_list_service.test.ts | 62 +++++
.../options_list/options_list_service.ts | 7 +-
.../public/__stories__/fixtures/flights.ts | 21 +-
.../translations/translations/fr-FR.json | 2 -
.../translations/translations/ja-JP.json | 2 -
.../translations/translations/zh-CN.json | 2 -
12 files changed, 471 insertions(+), 104 deletions(-)
create mode 100644 src/plugins/controls/public/options_list/embeddable/options_list_embeddable.test.tsx
create mode 100644 src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.test.tsx
create mode 100644 src/plugins/controls/public/services/options_list/options_list_service.test.ts
diff --git a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.test.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.test.tsx
new file mode 100644
index 0000000000000..d3c5bb4736e4f
--- /dev/null
+++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.test.tsx
@@ -0,0 +1,108 @@
+/*
+ * Copyright 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 { ControlGroupInput } from '../../../common';
+import { lazyLoadReduxToolsPackage } from '@kbn/presentation-util-plugin/public';
+import { storybookFlightsDataView } from '@kbn/presentation-util-plugin/public/mocks';
+import { OPTIONS_LIST_CONTROL } from '../../../common';
+import { ControlGroupContainer } from '../../control_group/embeddable/control_group_container';
+import { pluginServices } from '../../services';
+import { injectStorybookDataView } from '../../services/data_views/data_views.story';
+import { OptionsListEmbeddableFactory } from './options_list_embeddable_factory';
+import { OptionsListEmbeddable } from './options_list_embeddable';
+
+pluginServices.getServices().controls.getControlFactory = jest
+ .fn()
+ .mockImplementation((type: string) => {
+ if (type === OPTIONS_LIST_CONTROL) return new OptionsListEmbeddableFactory();
+ });
+
+describe('initialize', () => {
+ describe('without selected options', () => {
+ test('should notify control group when initialization is finished', async () => {
+ const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage();
+ const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput;
+ const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput);
+
+ // data view not required for test case
+ // setInitializationFinished is called before fetching options when value is not provided
+ injectStorybookDataView(undefined);
+
+ const control = await container.addOptionsListControl({
+ dataViewId: 'demoDataFlights',
+ fieldName: 'OriginCityName',
+ });
+
+ expect(container.getInput().panels[control.getInput().id].type).toBe(OPTIONS_LIST_CONTROL);
+ expect(container.getOutput().embeddableLoaded[control.getInput().id]).toBe(true);
+ });
+ });
+
+ describe('with selected options', () => {
+ test('should set error message when data view can not be found', async () => {
+ const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage();
+ const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput;
+ const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput);
+
+ injectStorybookDataView(undefined);
+
+ const control = (await container.addOptionsListControl({
+ dataViewId: 'demoDataFlights',
+ fieldName: 'OriginCityName',
+ selectedOptions: ['Seoul', 'Tokyo'],
+ })) as OptionsListEmbeddable;
+
+ // await redux dispatch
+ await new Promise((resolve) => process.nextTick(resolve));
+
+ const reduxState = control.getState();
+ expect(reduxState.output.loading).toBe(false);
+ expect(reduxState.componentState.error).toBe(
+ 'mock DataViews service currentDataView is undefined, call injectStorybookDataView to set'
+ );
+ });
+
+ test('should set error message when field can not be found', async () => {
+ const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage();
+ const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput;
+ const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput);
+
+ injectStorybookDataView(storybookFlightsDataView);
+
+ const control = (await container.addOptionsListControl({
+ dataViewId: 'demoDataFlights',
+ fieldName: 'myField',
+ selectedOptions: ['Seoul', 'Tokyo'],
+ })) as OptionsListEmbeddable;
+
+ // await redux dispatch
+ await new Promise((resolve) => process.nextTick(resolve));
+
+ const reduxState = control.getState();
+ expect(reduxState.output.loading).toBe(false);
+ expect(reduxState.componentState.error).toBe('Could not locate field: myField');
+ });
+
+ test('should notify control group when initialization is finished', async () => {
+ const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage();
+ const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput;
+ const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput);
+
+ injectStorybookDataView(storybookFlightsDataView);
+
+ const control = await container.addOptionsListControl({
+ dataViewId: 'demoDataFlights',
+ fieldName: 'OriginCityName',
+ selectedOptions: ['Seoul', 'Tokyo'],
+ });
+
+ expect(container.getInput().panels[control.getInput().id].type).toBe(OPTIONS_LIST_CONTROL);
+ expect(container.getOutput().embeddableLoaded[control.getInput().id]).toBe(true);
+ });
+ });
+});
diff --git a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx
index 3b7555ed97f82..5431cdffc560a 100644
--- a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx
+++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx
@@ -245,13 +245,6 @@ export class OptionsListEmbeddable
if (!this.dataView || this.dataView.id !== dataViewId) {
try {
this.dataView = await this.dataViewsService.get(dataViewId);
- if (!this.dataView)
- throw new Error(
- i18n.translate('controls.optionsList.errors.dataViewNotFound', {
- defaultMessage: 'Could not locate data view: {dataViewId}',
- values: { dataViewId },
- })
- );
} catch (e) {
this.dispatch.setErrorMessage(e.message);
}
@@ -260,25 +253,21 @@ export class OptionsListEmbeddable
}
if (this.dataView && (!this.field || this.field.name !== fieldName)) {
- try {
- const originalField = this.dataView.getFieldByName(fieldName);
- if (!originalField) {
- throw new Error(
- i18n.translate('controls.optionsList.errors.fieldNotFound', {
- defaultMessage: 'Could not locate field: {fieldName}',
- values: { fieldName },
- })
- );
- }
-
- this.field = originalField.toSpec();
- } catch (e) {
- this.dispatch.setErrorMessage(e.message);
+ const field = this.dataView.getFieldByName(fieldName);
+ if (field) {
+ this.field = field.toSpec();
+ this.dispatch.setField(this.field);
+ } else {
+ this.dispatch.setErrorMessage(
+ i18n.translate('controls.optionsList.errors.fieldNotFound', {
+ defaultMessage: 'Could not locate field: {fieldName}',
+ values: { fieldName },
+ })
+ );
}
- this.dispatch.setField(this.field);
}
- return { dataView: this.dataView, field: this.field! };
+ return { dataView: this.dataView, field: this.field };
};
private runOptionsListQuery = async (size: number = MIN_OPTIONS_LIST_REQUEST_SIZE) => {
diff --git a/src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.test.tsx b/src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.test.tsx
new file mode 100644
index 0000000000000..9629e78dd5285
--- /dev/null
+++ b/src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.test.tsx
@@ -0,0 +1,211 @@
+/*
+ * Copyright 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 { of } from 'rxjs';
+import { ControlGroupInput } from '../../../common';
+import { lazyLoadReduxToolsPackage } from '@kbn/presentation-util-plugin/public';
+import { storybookFlightsDataView } from '@kbn/presentation-util-plugin/public/mocks';
+import { RANGE_SLIDER_CONTROL } from '../../../common';
+import { ControlGroupContainer } from '../../control_group/embeddable/control_group_container';
+import { pluginServices } from '../../services';
+import { injectStorybookDataView } from '../../services/data_views/data_views.story';
+import { RangeSliderEmbeddableFactory } from './range_slider_embeddable_factory';
+import { RangeSliderEmbeddable } from './range_slider_embeddable';
+
+let totalResults = 20;
+beforeEach(() => {
+ totalResults = 20;
+
+ pluginServices.getServices().controls.getControlFactory = jest
+ .fn()
+ .mockImplementation((type: string) => {
+ if (type === RANGE_SLIDER_CONTROL) return new RangeSliderEmbeddableFactory();
+ });
+
+ pluginServices.getServices().data.searchSource.create = jest.fn().mockImplementation(() => {
+ let isAggsRequest = false;
+ return {
+ setField: (key: string) => {
+ if (key === 'aggs') {
+ isAggsRequest = true;
+ }
+ },
+ fetch$: () => {
+ return isAggsRequest
+ ? of({
+ rawResponse: { aggregations: { minAgg: { value: 0 }, maxAgg: { value: 1000 } } },
+ })
+ : of({
+ rawResponse: { hits: { total: { value: totalResults } } },
+ });
+ },
+ };
+ });
+});
+
+describe('initialize', () => {
+ describe('without selected range', () => {
+ test('should notify control group when initialization is finished', async () => {
+ const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage();
+ const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput;
+ const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput);
+
+ // data view not required for test case
+ // setInitializationFinished is called before fetching slider range when value is not provided
+ injectStorybookDataView(undefined);
+
+ const control = await container.addRangeSliderControl({
+ dataViewId: 'demoDataFlights',
+ fieldName: 'AvgTicketPrice',
+ });
+
+ expect(container.getInput().panels[control.getInput().id].type).toBe(RANGE_SLIDER_CONTROL);
+ expect(container.getOutput().embeddableLoaded[control.getInput().id]).toBe(true);
+ });
+ });
+
+ describe('with selected range', () => {
+ test('should set error message when data view can not be found', async () => {
+ const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage();
+ const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput;
+ const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput);
+
+ injectStorybookDataView(undefined);
+
+ const control = (await container.addRangeSliderControl({
+ dataViewId: 'demoDataFlights',
+ fieldName: 'AvgTicketPrice',
+ value: ['150', '300'],
+ })) as RangeSliderEmbeddable;
+
+ // await redux dispatch
+ await new Promise((resolve) => process.nextTick(resolve));
+
+ const reduxState = control.getState();
+ expect(reduxState.output.loading).toBe(false);
+ expect(reduxState.componentState.error).toBe(
+ 'mock DataViews service currentDataView is undefined, call injectStorybookDataView to set'
+ );
+ });
+
+ test('should set error message when field can not be found', async () => {
+ const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage();
+ const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput;
+ const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput);
+
+ injectStorybookDataView(storybookFlightsDataView);
+
+ const control = (await container.addRangeSliderControl({
+ dataViewId: 'demoDataFlights',
+ fieldName: 'myField',
+ value: ['150', '300'],
+ })) as RangeSliderEmbeddable;
+
+ // await redux dispatch
+ await new Promise((resolve) => process.nextTick(resolve));
+
+ const reduxState = control.getState();
+ expect(reduxState.output.loading).toBe(false);
+ expect(reduxState.componentState.error).toBe('Could not locate field: myField');
+ });
+
+ test('should set invalid state when filter returns zero results', async () => {
+ const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage();
+ const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput;
+ const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput);
+
+ injectStorybookDataView(storybookFlightsDataView);
+ totalResults = 0;
+
+ const control = (await container.addRangeSliderControl({
+ dataViewId: 'demoDataFlights',
+ fieldName: 'AvgTicketPrice',
+ value: ['150', '300'],
+ })) as RangeSliderEmbeddable;
+
+ // await redux dispatch
+ await new Promise((resolve) => process.nextTick(resolve));
+
+ const reduxState = control.getState();
+ expect(reduxState.output.filters?.length).toBe(0);
+ expect(reduxState.componentState.isInvalid).toBe(true);
+ });
+
+ test('should set range and filter', async () => {
+ const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage();
+ const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput;
+ const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput);
+
+ injectStorybookDataView(storybookFlightsDataView);
+
+ const control = (await container.addRangeSliderControl({
+ dataViewId: 'demoDataFlights',
+ fieldName: 'AvgTicketPrice',
+ value: ['150', '300'],
+ })) as RangeSliderEmbeddable;
+
+ // await redux dispatch
+ await new Promise((resolve) => process.nextTick(resolve));
+
+ const reduxState = control.getState();
+ expect(reduxState.output.filters?.length).toBe(1);
+ expect(reduxState.output.filters?.[0].query).toEqual({
+ range: {
+ AvgTicketPrice: {
+ gte: 150,
+ lte: 300,
+ },
+ },
+ });
+ expect(reduxState.componentState.isInvalid).toBe(false);
+ expect(reduxState.componentState.min).toBe(0);
+ expect(reduxState.componentState.max).toBe(1000);
+ });
+
+ test('should notify control group when initialization is finished', async () => {
+ const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage();
+ const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput;
+ const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput);
+
+ injectStorybookDataView(storybookFlightsDataView);
+
+ const control = await container.addRangeSliderControl({
+ dataViewId: 'demoDataFlights',
+ fieldName: 'AvgTicketPrice',
+ value: ['150', '300'],
+ });
+
+ expect(container.getInput().panels[control.getInput().id].type).toBe(RANGE_SLIDER_CONTROL);
+ expect(container.getOutput().embeddableLoaded[control.getInput().id]).toBe(true);
+ });
+
+ test('should notify control group when initialization throws', async () => {
+ const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage();
+ const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput;
+ const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput);
+
+ injectStorybookDataView(storybookFlightsDataView);
+
+ pluginServices.getServices().data.searchSource.create = jest.fn().mockImplementation(() => ({
+ setField: () => {},
+ fetch$: () => {
+ throw new Error('Simulated _search request error');
+ },
+ }));
+
+ const control = await container.addRangeSliderControl({
+ dataViewId: 'demoDataFlights',
+ fieldName: 'AvgTicketPrice',
+ value: ['150', '300'],
+ });
+
+ expect(container.getInput().panels[control.getInput().id].type).toBe(RANGE_SLIDER_CONTROL);
+ expect(container.getOutput().embeddableLoaded[control.getInput().id]).toBe(true);
+ });
+ });
+});
diff --git a/src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx b/src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx
index 5ee6036146041..e45927862abfc 100644
--- a/src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx
+++ b/src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx
@@ -62,14 +62,6 @@ interface RangeSliderDataFetchProps {
validate?: boolean;
}
-const fieldMissingError = (fieldName: string) =>
- new Error(
- i18n.translate('controls.rangeSlider.errors.fieldNotFound', {
- defaultMessage: 'Could not locate field: {fieldName}',
- values: { fieldName },
- })
- );
-
export const RangeSliderControlContext = createContext(null);
export const useRangeSlider = (): RangeSliderEmbeddable => {
const rangeSlider = useContext(RangeSliderControlContext);
@@ -147,15 +139,14 @@ export class RangeSliderEmbeddable
try {
await this.runRangeSliderQuery();
await this.buildFilter();
- if (initialValue) {
- this.setInitializationFinished();
- }
} catch (e) {
- batch(() => {
- this.dispatch.setLoading(false);
- this.dispatch.setErrorMessage(e.message);
- });
+ this.onLoadingError(e.message);
+ }
+
+ if (initialValue) {
+ this.setInitializationFinished();
}
+
this.setupSubscriptions();
};
@@ -182,7 +173,7 @@ export class RangeSliderEmbeddable
await this.runRangeSliderQuery();
await this.buildFilter();
} catch (e) {
- this.dispatch.setErrorMessage(e.message);
+ this.onLoadingError(e.message);
}
})
);
@@ -209,34 +200,27 @@ export class RangeSliderEmbeddable
if (!this.dataView || this.dataView.id !== dataViewId) {
try {
this.dataView = await this.dataViewsService.get(dataViewId);
- if (!this.dataView) {
- throw new Error(
- i18n.translate('controls.rangeSlider.errors.dataViewNotFound', {
- defaultMessage: 'Could not locate data view: {dataViewId}',
- values: { dataViewId },
- })
- );
- }
this.dispatch.setDataViewId(this.dataView.id);
} catch (e) {
- this.dispatch.setErrorMessage(e.message);
+ this.onLoadingError(e.message);
}
}
if (this.dataView && (!this.field || this.field.name !== fieldName)) {
- try {
- this.field = this.dataView.getFieldByName(fieldName);
- if (this.field === undefined) {
- throw fieldMissingError(fieldName);
- }
-
+ this.field = this.dataView.getFieldByName(fieldName);
+ if (this.field) {
this.dispatch.setField(this.field?.toSpec());
- } catch (e) {
- this.dispatch.setErrorMessage(e.message);
+ } else {
+ this.onLoadingError(
+ i18n.translate('controls.rangeSlider.errors.fieldNotFound', {
+ defaultMessage: 'Could not locate field: {fieldName}',
+ values: { fieldName },
+ })
+ );
}
}
- return { dataView: this.dataView, field: this.field! };
+ return { dataView: this.dataView, field: this.field };
};
private runRangeSliderQuery = async () => {
@@ -245,16 +229,6 @@ export class RangeSliderEmbeddable
const { dataView, field } = await this.getCurrentDataViewAndField();
if (!dataView || !field) return;
- const { fieldName } = this.getInput();
-
- if (!field) {
- batch(() => {
- this.dispatch.setLoading(false);
- this.dispatch.publishFilters([]);
- });
- throw fieldMissingError(fieldName);
- }
-
const embeddableInput = this.getInput();
const { ignoreParentSettings, timeRange: globalTimeRange, timeslice } = embeddableInput;
let { filters = [] } = embeddableInput;
@@ -278,8 +252,6 @@ export class RangeSliderEmbeddable
const { min, max } = await this.fetchMinMax({
dataView,
field,
- }).catch((e) => {
- throw e;
});
this.dispatch.setMinMax({
@@ -332,9 +304,7 @@ export class RangeSliderEmbeddable
};
searchSource.setField('aggs', aggs);
- const resp = await lastValueFrom(searchSource.fetch$()).catch((e) => {
- throw e;
- });
+ const resp = await lastValueFrom(searchSource.fetch$());
const min = get(resp, 'rawResponse.aggregations.minAgg.value');
const max = get(resp, 'rawResponse.aggregations.maxAgg.value');
@@ -397,11 +367,8 @@ export class RangeSliderEmbeddable
searchSource.setField('query', query);
}
- const {
- rawResponse: {
- hits: { total },
- },
- } = await lastValueFrom(searchSource.fetch$());
+ const resp = await lastValueFrom(searchSource.fetch$());
+ const total = resp?.rawResponse?.hits?.total;
const docCount = typeof total === 'number' ? total : total?.value;
if (!docCount) {
@@ -425,6 +392,14 @@ export class RangeSliderEmbeddable
});
};
+ private onLoadingError(errorMessage: string) {
+ batch(() => {
+ this.dispatch.setLoading(false);
+ this.dispatch.publishFilters([]);
+ this.dispatch.setErrorMessage(errorMessage);
+ });
+ }
+
public clearSelections() {
this.dispatch.setSelectedRange(['', '']);
}
@@ -434,7 +409,7 @@ export class RangeSliderEmbeddable
await this.runRangeSliderQuery();
await this.buildFilter();
} catch (e) {
- this.dispatch.setErrorMessage(e.message);
+ this.onLoadingError(e.message);
}
};
diff --git a/src/plugins/controls/public/services/data/data.story.ts b/src/plugins/controls/public/services/data/data.story.ts
index d94bd40e093f0..a3b19e4ae5ead 100644
--- a/src/plugins/controls/public/services/data/data.story.ts
+++ b/src/plugins/controls/public/services/data/data.story.ts
@@ -19,9 +19,7 @@ export const dataServiceFactory: DataServiceFactory = () => ({
setField: () => {},
fetch$: () =>
of({
- resp: {
- rawResponse: { aggregations: { minAgg: { value: 0 }, maxAgg: { value: 1000 } } },
- },
+ rawResponse: { aggregations: { minAgg: { value: 0 }, maxAgg: { value: 1000 } } },
}),
}),
} as unknown as DataPublicPluginStart['search']['searchSource'],
diff --git a/src/plugins/controls/public/services/data_views/data_views.story.ts b/src/plugins/controls/public/services/data_views/data_views.story.ts
index 5d118fd975e2c..9042a834ad357 100644
--- a/src/plugins/controls/public/services/data_views/data_views.story.ts
+++ b/src/plugins/controls/public/services/data_views/data_views.story.ts
@@ -13,17 +13,39 @@ import { ControlsDataViewsService } from './types';
export type DataViewsServiceFactory = PluginServiceFactory;
-let currentDataView: DataView;
-export const injectStorybookDataView = (dataView: DataView) => (currentDataView = dataView);
+let currentDataView: DataView | undefined;
+export const injectStorybookDataView = (dataView?: DataView) => (currentDataView = dataView);
export const dataViewsServiceFactory: DataViewsServiceFactory = () => ({
- get: (() =>
- new Promise((r) =>
- setTimeout(() => r(currentDataView), 100)
+ get: ((dataViewId) =>
+ new Promise((resolve, reject) =>
+ setTimeout(() => {
+ if (!currentDataView) {
+ reject(
+ new Error(
+ 'mock DataViews service currentDataView is undefined, call injectStorybookDataView to set'
+ )
+ );
+ } else if (currentDataView.id === dataViewId) {
+ resolve(currentDataView);
+ } else {
+ reject(
+ new Error(
+ `mock DataViews service currentDataView.id: ${currentDataView.id} does not match requested dataViewId: ${dataViewId}`
+ )
+ );
+ }
+ }, 100)
) as unknown) as DataViewsPublicPluginStart['get'],
getIdsWithTitle: (() =>
- new Promise((r) =>
- setTimeout(() => r([{ id: currentDataView.id, title: currentDataView.title }]), 100)
+ new Promise((resolve) =>
+ setTimeout(() => {
+ const idsWithTitle: Array<{ id: string | undefined; title: string }> = [];
+ if (currentDataView) {
+ idsWithTitle.push({ id: currentDataView.id, title: currentDataView.title });
+ }
+ resolve(idsWithTitle);
+ }, 100)
) as unknown) as DataViewsPublicPluginStart['getIdsWithTitle'],
getDefaultId: () => Promise.resolve(currentDataView?.id ?? null),
});
diff --git a/src/plugins/controls/public/services/options_list/options_list_service.test.ts b/src/plugins/controls/public/services/options_list/options_list_service.test.ts
new file mode 100644
index 0000000000000..52af6fcdd8c01
--- /dev/null
+++ b/src/plugins/controls/public/services/options_list/options_list_service.test.ts
@@ -0,0 +1,62 @@
+/*
+ * Copyright 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 { DataView, FieldSpec } from '@kbn/data-views-plugin/common';
+import { KibanaPluginServiceParams } from '@kbn/presentation-util-plugin/public';
+import type { OptionsListRequest } from '../../../common/options_list/types';
+import type { ControlsPluginStartDeps } from '../../types';
+import type { ControlsHTTPService } from '../http/types';
+import type { ControlsDataService } from '../data/types';
+import { optionsListServiceFactory } from './options_list_service';
+
+describe('runOptionsListRequest', () => {
+ test('should return OptionsListFailureResponse when fetch throws', async () => {
+ const mockCore = {
+ coreStart: {
+ uiSettings: {
+ get: () => {
+ return undefined;
+ },
+ },
+ },
+ } as unknown as KibanaPluginServiceParams;
+ const mockData = {
+ query: {
+ timefilter: {
+ timefilter: {},
+ },
+ },
+ } as unknown as ControlsDataService;
+ const mockHttp = {
+ fetch: () => {
+ throw new Error('Simulated network error');
+ },
+ } as unknown as ControlsHTTPService;
+ const optionsListService = optionsListServiceFactory(mockCore, {
+ data: mockData,
+ http: mockHttp,
+ });
+
+ const response = (await optionsListService.runOptionsListRequest(
+ {
+ dataView: {
+ toSpec: () => {
+ return {};
+ },
+ title: 'myDataView',
+ } as unknown as DataView,
+ field: {
+ name: 'myField',
+ } as unknown as FieldSpec,
+ } as unknown as OptionsListRequest,
+ {} as unknown as AbortSignal
+ )) as any;
+
+ expect(response.error.message).toBe('Simulated network error');
+ });
+});
diff --git a/src/plugins/controls/public/services/options_list/options_list_service.ts b/src/plugins/controls/public/services/options_list/options_list_service.ts
index 5620a0db4e6d7..d64a3a777e8ce 100644
--- a/src/plugins/controls/public/services/options_list/options_list_service.ts
+++ b/src/plugins/controls/public/services/options_list/options_list_service.ts
@@ -151,6 +151,9 @@ export type OptionsListServiceFactory = KibanaPluginServiceFactory<
OptionsListServiceRequiredServices
>;
-export const optionsListServiceFactory: OptionsListServiceFactory = (core, requiredServices) => {
- return new OptionsListService(core.coreStart, requiredServices);
+export const optionsListServiceFactory: OptionsListServiceFactory = (
+ startParams,
+ requiredServices
+) => {
+ return new OptionsListService(startParams.coreStart, requiredServices);
};
diff --git a/src/plugins/presentation_util/public/__stories__/fixtures/flights.ts b/src/plugins/presentation_util/public/__stories__/fixtures/flights.ts
index 17cedff90ad23..7b6d6efc880c8 100644
--- a/src/plugins/presentation_util/public/__stories__/fixtures/flights.ts
+++ b/src/plugins/presentation_util/public/__stories__/fixtures/flights.ts
@@ -61,14 +61,19 @@ const numberFields = [
const getConfig = (() => {}) as FieldFormatsGetConfigFn;
export const flightFieldByName: { [key: string]: DataViewField } = {};
-flightFieldNames.forEach(
- (flightFieldName) =>
- (flightFieldByName[flightFieldName] = {
- name: flightFieldName,
- type: numberFields.includes(flightFieldName) ? 'number' : 'string',
- aggregatable: true,
- } as unknown as DataViewField)
-);
+flightFieldNames.forEach((flightFieldName) => {
+ const fieldBase = {
+ name: flightFieldName,
+ type: numberFields.includes(flightFieldName) ? 'number' : 'string',
+ aggregatable: true,
+ };
+ flightFieldByName[flightFieldName] = {
+ ...fieldBase,
+ toSpec: () => {
+ return fieldBase;
+ },
+ } as unknown as DataViewField;
+});
flightFieldByName.Cancelled = { name: 'Cancelled', type: 'boolean' } as DataViewField;
flightFieldByName.timestamp = { name: 'timestamp', type: 'date' } as DataViewField;
diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json
index cb45aa2eec3d8..10039c28b2c3c 100644
--- a/x-pack/plugins/translations/translations/fr-FR.json
+++ b/x-pack/plugins/translations/translations/fr-FR.json
@@ -399,7 +399,6 @@
"controls.controlGroup.manageControl.controlTypeSettings.formGroupDescription": "Paramètres personnalisés pour votre contrôle {controlType}.",
"controls.controlGroup.manageControl.controlTypeSettings.formGroupTitle": "Paramètres de {controlType}",
"controls.optionsList.controlAndPopover.exists": "{negate, plural, one {Existe} many {Existent} other {Existent}}",
- "controls.optionsList.errors.dataViewNotFound": "Impossible de localiser la vue de données : {dataViewId}",
"controls.optionsList.errors.fieldNotFound": "Impossible de localiser le champ : {fieldName}",
"controls.optionsList.popover.ariaLabel": "Fenêtre contextuelle pour le contrôle {fieldName}",
"controls.optionsList.popover.cardinalityLabel": "{totalOptions, number} {totalOptions, plural, one {option} many {options disponibles} other {options}}",
@@ -409,7 +408,6 @@
"controls.optionsList.popover.invalidSelectionsLabel": "{selectedOptions} {selectedOptions, plural, one {sélection ignorée} many {Sélections ignorées} other {sélections ignorées}}",
"controls.optionsList.popover.invalidSelectionsSectionTitle": "{invalidSelectionCount, plural, one {Sélection ignorée} many {Sélections ignorées} other {Sélections ignorées}}",
"controls.optionsList.popover.suggestionsAriaLabel": "{optionCount, plural, one {option disponible} many {options disponibles} other {options disponibles}} pour {fieldName}",
- "controls.rangeSlider.errors.dataViewNotFound": "Impossible de localiser la vue de données : {dataViewId}",
"controls.rangeSlider.errors.fieldNotFound": "Impossible de localiser le champ : {fieldName}",
"controls.controlGroup.emptyState.addControlButtonTitle": "Ajouter un contrôle",
"controls.controlGroup.emptyState.badgeText": "Nouveauté",
diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json
index c9ee7f1a68ba4..07046aa334aa3 100644
--- a/x-pack/plugins/translations/translations/ja-JP.json
+++ b/x-pack/plugins/translations/translations/ja-JP.json
@@ -399,7 +399,6 @@
"controls.controlGroup.manageControl.controlTypeSettings.formGroupDescription": "{controlType}コントロールのカスタム設定",
"controls.controlGroup.manageControl.controlTypeSettings.formGroupTitle": "{controlType}設定",
"controls.optionsList.controlAndPopover.exists": "{negate, plural, other {存在します}}",
- "controls.optionsList.errors.dataViewNotFound": "データビューが見つかりませんでした:{dataViewId}",
"controls.optionsList.errors.fieldNotFound": "フィールドが見つかりませんでした:{fieldName}",
"controls.optionsList.popover.ariaLabel": "{fieldName}コントロールのポップオーバー",
"controls.optionsList.popover.cardinalityLabel": "{totalOptions, number}{totalOptions, plural, other {オプション}}",
@@ -409,7 +408,6 @@
"controls.optionsList.popover.invalidSelectionsLabel": "{selectedOptions}{selectedOptions, plural, other {選択項目}}が無視されました",
"controls.optionsList.popover.invalidSelectionsSectionTitle": "{invalidSelectionCount, plural, other {選択項目}}が無視されました",
"controls.optionsList.popover.suggestionsAriaLabel": "{fieldName}の{optionCount, plural, other {オプション}}があります",
- "controls.rangeSlider.errors.dataViewNotFound": "データビューが見つかりませんでした:{dataViewId}",
"controls.rangeSlider.errors.fieldNotFound": "フィールドが見つかりませんでした:{fieldName}",
"controls.controlGroup.emptyState.addControlButtonTitle": "コントロールを追加",
"controls.controlGroup.emptyState.badgeText": "新規",
diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json
index cf1102139b09a..2a13938f0e939 100644
--- a/x-pack/plugins/translations/translations/zh-CN.json
+++ b/x-pack/plugins/translations/translations/zh-CN.json
@@ -399,7 +399,6 @@
"controls.controlGroup.manageControl.controlTypeSettings.formGroupDescription": "{controlType} 控件的定制设置。",
"controls.controlGroup.manageControl.controlTypeSettings.formGroupTitle": "{controlType} 设置",
"controls.optionsList.controlAndPopover.exists": "{negate, plural, other {存在}}",
- "controls.optionsList.errors.dataViewNotFound": "找不到数据视图:{dataViewId}",
"controls.optionsList.errors.fieldNotFound": "找不到字段:{fieldName}",
"controls.optionsList.popover.ariaLabel": "{fieldName} 控件的弹出框",
"controls.optionsList.popover.cardinalityLabel": "{totalOptions, number} 个{totalOptions, plural, other {选项}}",
@@ -409,7 +408,6 @@
"controls.optionsList.popover.invalidSelectionsLabel": "已忽略 {selectedOptions} 个{selectedOptions, plural, other {选择的内容}}",
"controls.optionsList.popover.invalidSelectionsSectionTitle": "已忽略{invalidSelectionCount, plural, other {选择的内容}}",
"controls.optionsList.popover.suggestionsAriaLabel": "{fieldName} 的可用{optionCount, plural, other {选项}}",
- "controls.rangeSlider.errors.dataViewNotFound": "找不到数据视图:{dataViewId}",
"controls.rangeSlider.errors.fieldNotFound": "找不到字段:{fieldName}",
"controls.controlGroup.emptyState.addControlButtonTitle": "添加控件",
"controls.controlGroup.emptyState.badgeText": "新建",
From 6acf72f25c2b396f9ad6c6ecb3113f9a66ba3408 Mon Sep 17 00:00:00 2001
From: Garrett Spong
Date: Fri, 11 Aug 2023 15:48:59 -0600
Subject: [PATCH 35/46] [Security Solution] Adds RBAC for Assistant (#163031)
## Summary
Adds `All`/`None` RBAC for the Elastic AI Assistant within the Security
app via Kibana feature privileges, and also via serverless PLI App
Features for the Security `complete` product (see
https://github.com/elastic/security-team/issues/7023).
Added as high-level category to enable future support of sub-features
(included sample `Create Conversation` sub-feature plumbed as example).
Note: Since [`minimumLicense:
'enterprise'`](https://github.com/elastic/kibana/pull/163031/files#diff-56de8b6234daf4e0e69efe680e5a4afc4f88d152243b773d90c3991fa9dabc19R28)
is configured on this privilege, when the license check isn't satisfied,
the privilege will be hidden (not disabled).
## Testing
Feature is available for `enterprise` licenses and when `All` privilege
is set, otherwise Assistant is hidden in Timeline, all `Chat` UI
elements are hidden, and the `cmd/ctrl + ;` shortcut is unavailable.
---
### On Prem Testing:
Create two roles, one for each `all`/`none` Security Elastic AI
Assistant privilege (via Dev Tools):
PUT /_security/role/assistant_all
``` ts
PUT /_security/role/assistant_all
{
"cluster": [
"all"
],
"indices": [
{
"names": [
"*"
],
"privileges": [
"all"
],
"field_security": {
"grant": [
"*"
],
"except": []
},
"allow_restricted_indices": false
}
],
"applications": [
{
"application": "kibana-.kibana",
"privileges": [
"feature_securitySolutionAssistant.minimal_all",
"feature_siem.all",
"feature_securitySolutionCases.all",
"feature_actions.all"
],
"resources": [
"*"
]
}
],
"run_as": [],
"metadata": {},
"transient_metadata": {
"enabled": true
}
}
```
PUT /_security/role/assistant_none
``` ts
PUT /_security/role/assistant_none
{
"cluster": [
"all"
],
"indices": [
{
"names": [
"*"
],
"privileges": [
"all"
],
"field_security": {
"grant": [
"*"
],
"except": []
},
"allow_restricted_indices": false
}
],
"applications": [
{
"application": "kibana-.kibana",
"privileges": [
"feature_siem.all",
"feature_securitySolutionCases.all",
"feature_actions.all"
],
"resources": [
"*"
]
}
],
"run_as": [],
"metadata": {},
"transient_metadata": {
"enabled": true
}
}
```
Create a new `assistant_user` (assigned both roles above), log in and
test assistant availability, then remove one role at a time testing
each:
POST /_security/user/assistant_user (ALL)
``` ts
POST /_security/user/assistant_user
{
"username": "assistant_user",
"password": "changeme",
"roles": [
"assistant_all",
"assistant_none"
],
"full_name": "Assistant User",
"email": "assistant-user@elastic.co",
"metadata": {},
"enabled": true
}
```
Test that assistant is available in UI via `Chat` buttons and shortcut
keys.
PUT /_security/user/assistant_user (NONE)
``` ts
PUT /_security/user/assistant_user
{
"username": "assistant_user",
"roles": [
"assistant_none"
],
"full_name": "Assistant User",
"email": "assistant-user@elastic.co",
"metadata": {},
"enabled": true
}
```
Test that assistant is **NOT** available in UI via `Chat` buttons or
shortcut keys.
---
### Serverless Testing:
To test with the Assistant available, set `productTypes` to `complete`
in `config/serverless.security.yml`
```
xpack.securitySolutionServerless.productTypes:
[
{ product_line: 'security', product_tier: 'complete' },
{ product_line: 'endpoint', product_tier: 'complete' },
]
```
otherwise to test without the Assistant, pick a different product type like `essentials`:
```
xpack.securitySolutionServerless.productTypes:
[
{ product_line: 'security', product_tier: 'essentials' },
{ product_line: 'endpoint', product_tier: 'essentials' },
]
```
Then start Serverless Kibana: `yarn serverless-security`
---
### Checklist
Delete any items that are not applicable to this PR.
- [X] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md)
- [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials
- [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios
---
.../security_solution/common/constants.ts | 1 +
.../common/types/app_features.ts | 15 +++-
.../cypress/tasks/privileges.ts | 4 +
.../use_assistant_availability/index.tsx | 10 ++-
.../public/common/mock/test_providers.tsx | 3 +-
.../pages/rule_details/index.test.tsx | 3 +
.../side_panel/event_details/index.test.tsx | 13 +++-
.../lib/app_features/app_features.test.ts | 54 ++++++++++++++
.../server/lib/app_features/app_features.ts | 28 +++++++
.../security_assistant_kibana_features.ts | 74 +++++++++++++++++++
.../security_assistant_kibana_sub_features.ts | 59 +++++++++++++++
.../server/lib/app_features/types.ts | 10 ++-
.../detections_admin/detections_role.json | 1 +
.../roles_users/hunter/detections_role.json | 1 +
.../hunter_no_actions/detections_role.json | 1 +
.../platform_engineer/detections_role.json | 1 +
.../roles_users/reader/detections_role.json | 1 +
.../rule_author/detections_role.json | 1 +
.../soc_manager/detections_role.json | 1 +
.../t1_analyst/detections_role.json | 1 +
.../t2_analyst/detections_role.json | 1 +
.../common/pli/pli_config.ts | 1 +
.../apis/features/features/features.ts | 1 +
.../apis/security/privileges.ts | 1 +
.../apis/security/privileges_basic.ts | 2 +
.../security_and_spaces/tests/nav_links.ts | 3 +-
26 files changed, 281 insertions(+), 10 deletions(-)
create mode 100644 x-pack/plugins/security_solution/server/lib/app_features/security_assistant_kibana_features.ts
create mode 100644 x-pack/plugins/security_solution/server/lib/app_features/security_assistant_kibana_sub_features.ts
diff --git a/x-pack/plugins/security_solution/common/constants.ts b/x-pack/plugins/security_solution/common/constants.ts
index 47c7cb7b39f70..3dd1f8b188178 100644
--- a/x-pack/plugins/security_solution/common/constants.ts
+++ b/x-pack/plugins/security_solution/common/constants.ts
@@ -20,6 +20,7 @@ export { SecurityPageName } from '@kbn/security-solution-navigation';
*/
export const APP_ID = 'securitySolution' as const;
export const APP_UI_ID = 'securitySolutionUI' as const;
+export const ASSISTANT_FEATURE_ID = 'securitySolutionAssistant' as const;
export const CASES_FEATURE_ID = 'securitySolutionCases' as const;
export const SERVER_APP_ID = 'siem' as const;
export const APP_NAME = 'Security' as const;
diff --git a/x-pack/plugins/security_solution/common/types/app_features.ts b/x-pack/plugins/security_solution/common/types/app_features.ts
index 80734f9f23992..a8c65aeadfc8a 100644
--- a/x-pack/plugins/security_solution/common/types/app_features.ts
+++ b/x-pack/plugins/security_solution/common/types/app_features.ts
@@ -55,6 +55,13 @@ export enum AppFeatureSecurityKey {
osqueryAutomatedResponseActions = 'osquery_automated_response_actions',
}
+export enum AppFeatureAssistantKey {
+ /**
+ * Enables Elastic AI Assistant
+ */
+ assistant = 'assistant',
+}
+
export enum AppFeatureCasesKey {
/**
* Enables Cases Connectors
@@ -63,9 +70,13 @@ export enum AppFeatureCasesKey {
}
// Merges the two enums.
-export type AppFeatureKey = AppFeatureSecurityKey | AppFeatureCasesKey;
+export type AppFeatureKey = AppFeatureSecurityKey | AppFeatureCasesKey | AppFeatureAssistantKey;
export type AppFeatureKeys = AppFeatureKey[];
// We need to merge the value and the type and export both to replicate how enum works.
-export const AppFeatureKey = { ...AppFeatureSecurityKey, ...AppFeatureCasesKey };
+export const AppFeatureKey = {
+ ...AppFeatureSecurityKey,
+ ...AppFeatureCasesKey,
+ ...AppFeatureAssistantKey,
+};
export const ALL_APP_FEATURE_KEYS = Object.freeze(Object.values(AppFeatureKey));
diff --git a/x-pack/plugins/security_solution/cypress/tasks/privileges.ts b/x-pack/plugins/security_solution/cypress/tasks/privileges.ts
index bd55745200b4f..b0489b14e8a8e 100644
--- a/x-pack/plugins/security_solution/cypress/tasks/privileges.ts
+++ b/x-pack/plugins/security_solution/cypress/tasks/privileges.ts
@@ -63,6 +63,7 @@ export const secAll: Role = {
{
feature: {
siem: ['all'],
+ securitySolutionAssistant: ['all'],
securitySolutionCases: ['all'],
actions: ['all'],
actionsSimulators: ['all'],
@@ -94,6 +95,7 @@ export const secReadCasesAll: Role = {
{
feature: {
siem: ['read'],
+ securitySolutionAssistant: ['all'],
securitySolutionCases: ['all'],
actions: ['all'],
actionsSimulators: ['all'],
@@ -125,6 +127,7 @@ export const secAllCasesOnlyReadDelete: Role = {
{
feature: {
siem: ['all'],
+ securitySolutionAssistant: ['all'],
securitySolutionCases: ['cases_read', 'cases_delete'],
actions: ['all'],
actionsSimulators: ['all'],
@@ -156,6 +159,7 @@ export const secAllCasesNoDelete: Role = {
{
feature: {
siem: ['all'],
+ securitySolutionAssistant: ['all'],
securitySolutionCases: ['minimal_all'],
actions: ['all'],
actionsSimulators: ['all'],
diff --git a/x-pack/plugins/security_solution/public/assistant/use_assistant_availability/index.tsx b/x-pack/plugins/security_solution/public/assistant/use_assistant_availability/index.tsx
index fb58fb5509ba2..b2206157661b9 100644
--- a/x-pack/plugins/security_solution/public/assistant/use_assistant_availability/index.tsx
+++ b/x-pack/plugins/security_solution/public/assistant/use_assistant_availability/index.tsx
@@ -6,6 +6,8 @@
*/
import { useLicense } from '../../common/hooks/use_license';
+import { useKibana } from '../../common/lib/kibana';
+import { ASSISTANT_FEATURE_ID } from '../../../common/constants';
export interface UseAssistantAvailability {
// True when user is Enterprise. When false, the Assistant is disabled and unavailable
@@ -16,11 +18,11 @@ export interface UseAssistantAvailability {
export const useAssistantAvailability = (): UseAssistantAvailability => {
const isEnterprise = useLicense().isEnterprise();
+ const capabilities = useKibana().services.application.capabilities;
+ const isAssistantEnabled = capabilities[ASSISTANT_FEATURE_ID]?.['ai-assistant'] === true;
+
return {
isAssistantEnabled: isEnterprise,
- // TODO: RBAC check (https://github.com/elastic/security-team/issues/6932)
- // Leaving as a placeholder for RBAC as the same behavior will be required
- // When false, the Assistant is hidden and unavailable
- hasAssistantPrivilege: true,
+ hasAssistantPrivilege: isAssistantEnabled,
};
};
diff --git a/x-pack/plugins/security_solution/public/common/mock/test_providers.tsx b/x-pack/plugins/security_solution/public/common/mock/test_providers.tsx
index ef8c68f9a25bb..44d9300a6d65e 100644
--- a/x-pack/plugins/security_solution/public/common/mock/test_providers.tsx
+++ b/x-pack/plugins/security_solution/public/common/mock/test_providers.tsx
@@ -35,7 +35,7 @@ import {
import type { FieldHook } from '../../shared_imports';
import { SUB_PLUGINS_REDUCER } from './utils';
import { createSecuritySolutionStorageMock, localStorageMock } from './mock_local_storage';
-import { CASES_FEATURE_ID } from '../../../common/constants';
+import { ASSISTANT_FEATURE_ID, CASES_FEATURE_ID } from '../../../common/constants';
import { UserPrivilegesProvider } from '../components/user_privileges/user_privileges_context';
const state: State = mockGlobalState;
@@ -125,6 +125,7 @@ const TestProvidersWithPrivilegesComponent: React.FC = ({
{
siem: { show: true, crud: true },
[CASES_FEATURE_ID]: { read_cases: true, crud_cases: false },
+ [ASSISTANT_FEATURE_ID]: { 'ai-assistant': true },
} as unknown as Capabilities
}
>
diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.test.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.test.tsx
index 33e93c748f270..ed3f06c54e50e 100644
--- a/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.test.tsx
+++ b/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.test.tsx
@@ -113,6 +113,9 @@ jest.mock('../../../../common/lib/kibana', () => {
save: true,
show: true,
},
+ siem: {
+ 'ai-assistant': true,
+ },
},
},
data: {
diff --git a/x-pack/plugins/security_solution/public/timelines/components/side_panel/event_details/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/side_panel/event_details/index.test.tsx
index ac425b18bbb7c..10a536f69c8d0 100644
--- a/x-pack/plugins/security_solution/public/timelines/components/side_panel/event_details/index.test.tsx
+++ b/x-pack/plugins/security_solution/public/timelines/components/side_panel/event_details/index.test.tsx
@@ -21,7 +21,11 @@ import { coreMock } from '@kbn/core/public/mocks';
import { mockCasesContext } from '@kbn/cases-plugin/public/mocks/mock_cases_context';
import { useTimelineEventsDetails } from '../../../containers/details';
import { allCasesPermissions } from '../../../../cases_test_utils';
-import { DEFAULT_ALERTS_INDEX, DEFAULT_PREVIEW_INDEX } from '../../../../../common/constants';
+import {
+ DEFAULT_ALERTS_INDEX,
+ DEFAULT_PREVIEW_INDEX,
+ ASSISTANT_FEATURE_ID,
+} from '../../../../../common/constants';
const ecsData: Ecs = {
_id: '1',
@@ -138,6 +142,13 @@ describe('event details panel component', () => {
(KibanaServices.get as jest.Mock).mockReturnValue(coreStartMock);
(useKibana as jest.Mock).mockReturnValue({
services: {
+ application: {
+ capabilities: {
+ [ASSISTANT_FEATURE_ID]: {
+ 'ai-assistant': true,
+ },
+ },
+ },
uiSettings: {
get: jest.fn().mockReturnValue([]),
},
diff --git a/x-pack/plugins/security_solution/server/lib/app_features/app_features.test.ts b/x-pack/plugins/security_solution/server/lib/app_features/app_features.test.ts
index 5de9c57e2938f..1951f6d8b00fa 100644
--- a/x-pack/plugins/security_solution/server/lib/app_features/app_features.test.ts
+++ b/x-pack/plugins/security_solution/server/lib/app_features/app_features.test.ts
@@ -48,6 +48,25 @@ const CASES_APP_FEATURE_CONFIG = {
},
};
+const ASSISTANT_BASE_CONFIG = {
+ bar: 'bar',
+};
+
+const ASSISTANT_APP_FEATURE_CONFIG = {
+ 'test-assistant-feature': {
+ privileges: {
+ all: {
+ ui: ['test-assistant-capability'],
+ api: ['test-assistant-capability'],
+ },
+ read: {
+ ui: ['test-assistant-capability'],
+ api: ['test-assistant-capability'],
+ },
+ },
+ },
+};
+
jest.mock('./security_kibana_features', () => {
return {
getSecurityBaseKibanaFeature: jest.fn(() => SECURITY_BASE_CONFIG),
@@ -75,6 +94,20 @@ jest.mock('./security_cases_kibana_sub_features', () => {
};
});
+jest.mock('./security_assistant_kibana_features', () => {
+ return {
+ getAssistantBaseKibanaFeature: jest.fn(() => ASSISTANT_BASE_CONFIG),
+ getAssistantBaseKibanaSubFeatureIds: jest.fn(() => ['subFeature1']),
+ getAssistantAppFeaturesConfig: jest.fn(() => ASSISTANT_APP_FEATURE_CONFIG),
+ };
+});
+
+jest.mock('./security_assistant_kibana_sub_features', () => {
+ return {
+ assistantSubFeaturesMap: new Map([['subFeature1', { baz: 'baz' }]]),
+ };
+});
+
describe('AppFeatures', () => {
it('should register enabled kibana features', () => {
const featuresSetup = {
@@ -118,4 +151,25 @@ describe('AppFeatures', () => {
subFeatures: [{ baz: 'baz' }],
});
});
+
+ it('should register enabled assistant features', () => {
+ const featuresSetup = {
+ registerKibanaFeature: jest.fn(),
+ } as unknown as PluginSetupContract;
+
+ const appFeatureKeys = ['test-assistant-feature'] as unknown as AppFeatureKeys;
+
+ const appFeatures = new AppFeatures(
+ loggingSystemMock.create().get('mock'),
+ [] as unknown as ExperimentalFeatures
+ );
+ appFeatures.init(featuresSetup);
+ appFeatures.set(appFeatureKeys);
+
+ expect(featuresSetup.registerKibanaFeature).toHaveBeenCalledWith({
+ ...ASSISTANT_BASE_CONFIG,
+ ...ASSISTANT_APP_FEATURE_CONFIG['test-assistant-feature'],
+ subFeatures: [{ baz: 'baz' }],
+ });
+ });
});
diff --git a/x-pack/plugins/security_solution/server/lib/app_features/app_features.ts b/x-pack/plugins/security_solution/server/lib/app_features/app_features.ts
index edeec0d533a40..0b17f6d71d00d 100644
--- a/x-pack/plugins/security_solution/server/lib/app_features/app_features.ts
+++ b/x-pack/plugins/security_solution/server/lib/app_features/app_features.ts
@@ -22,9 +22,16 @@ import {
import { AppFeaturesConfigMerger } from './app_features_config_merger';
import { casesSubFeaturesMap } from './security_cases_kibana_sub_features';
import { securitySubFeaturesMap } from './security_kibana_sub_features';
+import { assistantSubFeaturesMap } from './security_assistant_kibana_sub_features';
+import {
+ getAssistantAppFeaturesConfig,
+ getAssistantBaseKibanaFeature,
+ getAssistantBaseKibanaSubFeatureIds,
+} from './security_assistant_kibana_features';
export class AppFeatures {
private securityFeatureConfigMerger: AppFeaturesConfigMerger;
+ private assistantFeatureConfigMerger: AppFeaturesConfigMerger;
private casesFeatureConfigMerger: AppFeaturesConfigMerger;
private appFeatures?: Set;
private featuresSetup?: FeaturesPluginSetup;
@@ -38,6 +45,10 @@ export class AppFeatures {
securitySubFeaturesMap
);
this.casesFeatureConfigMerger = new AppFeaturesConfigMerger(this.logger, casesSubFeaturesMap);
+ this.assistantFeatureConfigMerger = new AppFeaturesConfigMerger(
+ this.logger,
+ assistantSubFeaturesMap
+ );
}
public init(featuresSetup: FeaturesPluginSetup) {
@@ -98,6 +109,23 @@ export class AppFeatures {
this.logger.info(JSON.stringify(completeCasesAppFeatureConfig));
this.featuresSetup.registerKibanaFeature(completeCasesAppFeatureConfig);
+
+ // register security assistant Kibana features
+ const securityAssistantBaseKibanaFeature = getAssistantBaseKibanaFeature();
+ const securityAssistantBaseKibanaSubFeatureIds = getAssistantBaseKibanaSubFeatureIds();
+ const enabledAssistantAppFeaturesConfigs = this.getEnabledAppFeaturesConfigs(
+ getAssistantAppFeaturesConfig()
+ );
+ const completeAssistantAppFeatureConfig =
+ this.assistantFeatureConfigMerger.mergeAppFeatureConfigs(
+ securityAssistantBaseKibanaFeature,
+ securityAssistantBaseKibanaSubFeatureIds,
+ enabledAssistantAppFeaturesConfigs
+ );
+
+ this.logger.info(JSON.stringify(completeAssistantAppFeatureConfig));
+
+ this.featuresSetup.registerKibanaFeature(completeAssistantAppFeatureConfig);
}
private getEnabledAppFeaturesConfigs(
diff --git a/x-pack/plugins/security_solution/server/lib/app_features/security_assistant_kibana_features.ts b/x-pack/plugins/security_solution/server/lib/app_features/security_assistant_kibana_features.ts
new file mode 100644
index 0000000000000..1927591da202f
--- /dev/null
+++ b/x-pack/plugins/security_solution/server/lib/app_features/security_assistant_kibana_features.ts
@@ -0,0 +1,74 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { i18n } from '@kbn/i18n';
+
+import { DEFAULT_APP_CATEGORIES } from '@kbn/core/server';
+import type { AppFeaturesAssistantConfig, BaseKibanaFeatureConfig } from './types';
+import { APP_ID, ASSISTANT_FEATURE_ID } from '../../../common/constants';
+import { AppFeatureAssistantKey } from '../../../common/types/app_features';
+import type { AssistantSubFeatureId } from './security_assistant_kibana_sub_features';
+
+export const getAssistantBaseKibanaFeature = (): BaseKibanaFeatureConfig => ({
+ id: ASSISTANT_FEATURE_ID,
+ name: i18n.translate(
+ 'xpack.securitySolution.featureRegistry.linkSecuritySolutionAssistantTitle',
+ {
+ defaultMessage: 'Elastic AI Assistant',
+ }
+ ),
+ order: 1100,
+ category: DEFAULT_APP_CATEGORIES.security,
+ app: [ASSISTANT_FEATURE_ID, 'kibana'],
+ catalogue: [APP_ID],
+ minimumLicense: 'enterprise',
+ privileges: {
+ all: {
+ api: [],
+ app: [ASSISTANT_FEATURE_ID, 'kibana'],
+ catalogue: [APP_ID],
+ savedObject: {
+ all: [],
+ read: [],
+ },
+ ui: [],
+ },
+ read: {
+ // No read-only mode currently supported
+ disabled: true,
+ savedObject: {
+ all: [],
+ read: [],
+ },
+ ui: [],
+ },
+ },
+});
+
+export const getAssistantBaseKibanaSubFeatureIds = (): AssistantSubFeatureId[] => [
+ // This is a sample sub-feature that can be used for future implementations
+ // AssistantSubFeatureId.createConversation,
+];
+
+/**
+ * Maps the AppFeatures keys to Kibana privileges that will be merged
+ * into the base privileges config for the Security app.
+ *
+ * Privileges can be added in different ways:
+ * - `privileges`: the privileges that will be added directly into the main Security Assistant feature.
+ * - `subFeatureIds`: the ids of the sub-features that will be added into the Assistant subFeatures entry.
+ * - `subFeaturesPrivileges`: the privileges that will be added into the existing Assistant subFeature with the privilege `id` specified.
+ */
+export const getAssistantAppFeaturesConfig = (): AppFeaturesAssistantConfig => ({
+ [AppFeatureAssistantKey.assistant]: {
+ privileges: {
+ all: {
+ ui: ['ai-assistant'],
+ },
+ },
+ },
+});
diff --git a/x-pack/plugins/security_solution/server/lib/app_features/security_assistant_kibana_sub_features.ts b/x-pack/plugins/security_solution/server/lib/app_features/security_assistant_kibana_sub_features.ts
new file mode 100644
index 0000000000000..bc495e8c24d60
--- /dev/null
+++ b/x-pack/plugins/security_solution/server/lib/app_features/security_assistant_kibana_sub_features.ts
@@ -0,0 +1,59 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { i18n } from '@kbn/i18n';
+import type { SubFeatureConfig } from '@kbn/features-plugin/common';
+
+// This is a sample sub-feature that can be used for future implementations
+// @ts-expect-error unused variable
+const createConversationSubFeature: SubFeatureConfig = {
+ name: i18n.translate(
+ 'xpack.securitySolution.featureRegistry.assistant.createConversationSubFeatureName',
+ {
+ defaultMessage: 'Create Conversations',
+ }
+ ),
+ description: i18n.translate(
+ 'xpack.securitySolution.featureRegistry.subFeatures.assistant.description',
+ { defaultMessage: 'Create custom conversations.' }
+ ),
+ privilegeGroups: [
+ {
+ groupType: 'independent',
+ privileges: [
+ {
+ api: [],
+ id: 'create_conversation',
+ name: i18n.translate(
+ 'xpack.securitySolution.featureRegistry.assistant.createConversationSubFeatureDetails',
+ {
+ defaultMessage: 'Create conversations',
+ }
+ ),
+ includeIn: 'all',
+ savedObject: {
+ all: [],
+ read: [],
+ },
+ ui: ['createConversation'],
+ },
+ ],
+ },
+ ],
+};
+
+export enum AssistantSubFeatureId {
+ createConversation = 'createConversationSubFeature',
+}
+
+// Defines all the ordered Security Assistant subFeatures available
+export const assistantSubFeaturesMap = Object.freeze(
+ new Map([
+ // This is a sample sub-feature that can be used for future implementations
+ // [AssistantSubFeatureId.createConversation, createConversationSubFeature],
+ ])
+);
diff --git a/x-pack/plugins/security_solution/server/lib/app_features/types.ts b/x-pack/plugins/security_solution/server/lib/app_features/types.ts
index 67480b33a2089..e6a4fd8db0304 100644
--- a/x-pack/plugins/security_solution/server/lib/app_features/types.ts
+++ b/x-pack/plugins/security_solution/server/lib/app_features/types.ts
@@ -7,7 +7,11 @@
import type { KibanaFeatureConfig, SubFeaturePrivilegeConfig } from '@kbn/features-plugin/common';
import type { AppFeatureKey } from '../../../common';
-import type { AppFeatureSecurityKey, AppFeatureCasesKey } from '../../../common/types/app_features';
+import type {
+ AppFeatureSecurityKey,
+ AppFeatureCasesKey,
+ AppFeatureAssistantKey,
+} from '../../../common/types/app_features';
import type { RecursivePartial } from '../../../common/utility_types';
export type BaseKibanaFeatureConfig = Omit;
@@ -29,3 +33,7 @@ export type AppFeaturesCasesConfig = Record<
AppFeatureCasesKey,
AppFeatureKibanaConfig
>;
+export type AppFeaturesAssistantConfig = Record<
+ AppFeatureAssistantKey,
+ AppFeatureKibanaConfig
+>;
diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/detections_admin/detections_role.json b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/detections_admin/detections_role.json
index c1a62bf7ca31f..133083cec2601 100644
--- a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/detections_admin/detections_role.json
+++ b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/detections_admin/detections_role.json
@@ -32,6 +32,7 @@
"feature": {
"ml": ["all"],
"siem": ["all", "read_alerts", "crud_alerts"],
+ "securitySolutionAssistant": ["all"],
"securitySolutionCases": ["all"],
"actions": ["read"],
"builtInAlerts": ["all"],
diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/hunter/detections_role.json b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/hunter/detections_role.json
index 42ef9ba1122c7..23a1256dac4aa 100644
--- a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/hunter/detections_role.json
+++ b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/hunter/detections_role.json
@@ -34,6 +34,7 @@
"feature": {
"ml": ["read"],
"siem": ["all", "read_alerts", "crud_alerts"],
+ "securitySolutionAssistant": ["all"],
"securitySolutionCases": ["all"],
"actions": ["read"],
"builtInAlerts": ["all"]
diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/hunter_no_actions/detections_role.json b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/hunter_no_actions/detections_role.json
index e8000d6bb50e7..6b392c18f8caa 100644
--- a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/hunter_no_actions/detections_role.json
+++ b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/hunter_no_actions/detections_role.json
@@ -34,6 +34,7 @@
"feature": {
"ml": ["read"],
"siem": ["all", "read_alerts", "crud_alerts"],
+ "securitySolutionAssistant": ["all"],
"securitySolutionCases": ["all"],
"builtInAlerts": ["all"]
},
diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/platform_engineer/detections_role.json b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/platform_engineer/detections_role.json
index 88d863631a90b..17b6e45f8c72d 100644
--- a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/platform_engineer/detections_role.json
+++ b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/platform_engineer/detections_role.json
@@ -38,6 +38,7 @@
"feature": {
"ml": ["all"],
"siem": ["all", "read_alerts", "crud_alerts"],
+ "securitySolutionAssistant": ["all"],
"securitySolutionCases": ["all"],
"actions": ["all"],
"builtInAlerts": ["all"]
diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/reader/detections_role.json b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/reader/detections_role.json
index 95be607cf7181..137091bc7f795 100644
--- a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/reader/detections_role.json
+++ b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/reader/detections_role.json
@@ -27,6 +27,7 @@
"feature": {
"ml": ["read"],
"siem": ["read", "read_alerts"],
+ "securitySolutionAssistant": ["none"],
"securitySolutionCases": ["read"],
"actions": ["read"],
"builtInAlerts": ["read"]
diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/rule_author/detections_role.json b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/rule_author/detections_role.json
index ea1fb2bf1433f..dafe85548d4d0 100644
--- a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/rule_author/detections_role.json
+++ b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/rule_author/detections_role.json
@@ -37,6 +37,7 @@
"feature": {
"ml": ["read"],
"siem": ["all", "read_alerts", "crud_alerts"],
+ "securitySolutionAssistant": ["all"],
"securitySolutionCases": ["all"],
"actions": ["read"],
"builtInAlerts": ["all"]
diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/soc_manager/detections_role.json b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/soc_manager/detections_role.json
index 4ad6488d0b5ab..5e3aa868f6147 100644
--- a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/soc_manager/detections_role.json
+++ b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/soc_manager/detections_role.json
@@ -37,6 +37,7 @@
"feature": {
"ml": ["read"],
"siem": ["all", "read_alerts", "crud_alerts"],
+ "securitySolutionAssistant": ["all"],
"securitySolutionCases": ["all"],
"actions": ["all"],
"builtInAlerts": ["all"]
diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/t1_analyst/detections_role.json b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/t1_analyst/detections_role.json
index 2f555bebbff90..d670fd9555f59 100644
--- a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/t1_analyst/detections_role.json
+++ b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/t1_analyst/detections_role.json
@@ -26,6 +26,7 @@
"feature": {
"ml": ["read"],
"siem": ["read", "read_alerts"],
+ "securitySolutionAssistant": ["all"],
"securitySolutionCases": ["read"],
"actions": ["read"],
"builtInAlerts": ["read"]
diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/t2_analyst/detections_role.json b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/t2_analyst/detections_role.json
index f8216a613cb5a..4db91de93709a 100644
--- a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/t2_analyst/detections_role.json
+++ b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/roles_users/t2_analyst/detections_role.json
@@ -31,6 +31,7 @@
"feature": {
"ml": ["read"],
"siem": ["read", "read_alerts"],
+ "securitySolutionAssistant": ["all"],
"securitySolutionCases": ["read"],
"actions": ["read"],
"builtInAlerts": ["read"]
diff --git a/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts b/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts
index 82f180d4a541e..779f874b266da 100644
--- a/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts
+++ b/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts
@@ -17,6 +17,7 @@ export const PLI_APP_FEATURES: PliAppFeatures = {
essentials: [AppFeatureKey.endpointHostManagement, AppFeatureKey.endpointPolicyManagement],
complete: [
AppFeatureKey.advancedInsights,
+ AppFeatureKey.assistant,
AppFeatureKey.investigationGuide,
AppFeatureKey.threatIntelligence,
AppFeatureKey.casesConnectors,
diff --git a/x-pack/test/api_integration/apis/features/features/features.ts b/x-pack/test/api_integration/apis/features/features/features.ts
index fd91262d57a61..a80a39e4af5dc 100644
--- a/x-pack/test/api_integration/apis/features/features/features.ts
+++ b/x-pack/test/api_integration/apis/features/features/features.ts
@@ -125,6 +125,7 @@ export default function ({ getService }: FtrProviderContext) {
'uptime',
'siem',
'slo',
+ 'securitySolutionAssistant',
'securitySolutionCases',
'fleet',
'fleetv2',
diff --git a/x-pack/test/api_integration/apis/security/privileges.ts b/x-pack/test/api_integration/apis/security/privileges.ts
index ad9eb9b3bd6eb..d49df52bfcd1c 100644
--- a/x-pack/test/api_integration/apis/security/privileges.ts
+++ b/x-pack/test/api_integration/apis/security/privileges.ts
@@ -56,6 +56,7 @@ export default function ({ getService }: FtrProviderContext) {
'execute_operations_all',
],
uptime: ['all', 'read', 'minimal_all', 'minimal_read'],
+ securitySolutionAssistant: ['all', 'read', 'minimal_all', 'minimal_read'],
securitySolutionCases: ['all', 'read', 'minimal_all', 'minimal_read', 'cases_delete'],
infrastructure: ['all', 'read', 'minimal_all', 'minimal_read'],
logs: ['all', 'read', 'minimal_all', 'minimal_read'],
diff --git a/x-pack/test/api_integration/apis/security/privileges_basic.ts b/x-pack/test/api_integration/apis/security/privileges_basic.ts
index 680bd9fd13298..c6982b3c6d53e 100644
--- a/x-pack/test/api_integration/apis/security/privileges_basic.ts
+++ b/x-pack/test/api_integration/apis/security/privileges_basic.ts
@@ -42,6 +42,7 @@ export default function ({ getService }: FtrProviderContext) {
osquery: ['all', 'read', 'minimal_all', 'minimal_read'],
ml: ['all', 'read', 'minimal_all', 'minimal_read'],
siem: ['all', 'read', 'minimal_all', 'minimal_read'],
+ securitySolutionAssistant: ['all', 'read', 'minimal_all', 'minimal_read'],
securitySolutionCases: ['all', 'read', 'minimal_all', 'minimal_read'],
fleetv2: ['all', 'read', 'minimal_all', 'minimal_read'],
fleet: ['all', 'read', 'minimal_all', 'minimal_read'],
@@ -130,6 +131,7 @@ export default function ({ getService }: FtrProviderContext) {
'execute_operations_all',
],
uptime: ['all', 'read', 'minimal_all', 'minimal_read'],
+ securitySolutionAssistant: ['all', 'read', 'minimal_all', 'minimal_read'],
securitySolutionCases: ['all', 'read', 'minimal_all', 'minimal_read', 'cases_delete'],
infrastructure: ['all', 'read', 'minimal_all', 'minimal_read'],
logs: ['all', 'read', 'minimal_all', 'minimal_read'],
diff --git a/x-pack/test/ui_capabilities/security_and_spaces/tests/nav_links.ts b/x-pack/test/ui_capabilities/security_and_spaces/tests/nav_links.ts
index 6159b765f4a77..8a292d4d2dede 100644
--- a/x-pack/test/ui_capabilities/security_and_spaces/tests/nav_links.ts
+++ b/x-pack/test/ui_capabilities/security_and_spaces/tests/nav_links.ts
@@ -77,7 +77,8 @@ export default function navLinksTests({ getService }: FtrProviderContext) {
'enterpriseSearchVectorSearch',
'appSearch',
'workplaceSearch',
- 'guidedOnboardingFeature'
+ 'guidedOnboardingFeature',
+ 'securitySolutionAssistant'
)
);
break;
From fda22d0d972073e828dff4c325e344c639b18b76 Mon Sep 17 00:00:00 2001
From: Philippe Oberti
Date: Sat, 12 Aug 2023 00:35:32 +0200
Subject: [PATCH 36/46] [Security Solution] expandable flyout - inverse
Visualizations and Investigation order and expand Investigation by default
(#163684)
---
.../alert_details_right_panel_overview_tab.cy.ts | 9 ++++++---
.../flyout/right/components/investigation_section.tsx | 2 +-
.../public/flyout/right/tabs/overview_tab.tsx | 4 ++--
3 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts
index 977f865f4fd5b..ef8884f560dce 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts
@@ -147,7 +147,6 @@ describe('Alert details expandable flyout right panel overview tab', () => {
describe('investigation section', () => {
it('should display investigation section', () => {
toggleOverviewTabAboutSection();
- toggleOverviewTabInvestigationSection();
cy.log('header and content');
@@ -206,6 +205,7 @@ describe('Alert details expandable flyout right panel overview tab', () => {
describe('insights section', () => {
it('should display entities section', () => {
toggleOverviewTabAboutSection();
+ toggleOverviewTabInvestigationSection();
toggleOverviewTabInsightsSection();
cy.log('header and content');
@@ -224,9 +224,9 @@ describe('Alert details expandable flyout right panel overview tab', () => {
// cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_CONTENT).should('be.visible');
});
- // TODO: skipping this due to flakiness
- it.skip('should display threat intelligence section', () => {
+ it('should display threat intelligence section', () => {
toggleOverviewTabAboutSection();
+ toggleOverviewTabInvestigationSection();
toggleOverviewTabInsightsSection();
cy.log('header and content');
@@ -270,6 +270,7 @@ describe('Alert details expandable flyout right panel overview tab', () => {
createNewCaseFromExpandableFlyout();
toggleOverviewTabAboutSection();
+ toggleOverviewTabInvestigationSection();
toggleOverviewTabInsightsSection();
cy.log('header and content');
@@ -311,6 +312,7 @@ describe('Alert details expandable flyout right panel overview tab', () => {
// we need to generate enough data to have at least one field with prevalence
it.skip('should display prevalence section', () => {
toggleOverviewTabAboutSection();
+ toggleOverviewTabInvestigationSection();
toggleOverviewTabInsightsSection();
cy.log('header and content');
@@ -338,6 +340,7 @@ describe('Alert details expandable flyout right panel overview tab', () => {
describe('response section', () => {
it('should display empty message', () => {
toggleOverviewTabAboutSection();
+ toggleOverviewTabInvestigationSection();
toggleOverviewTabResponseSection();
cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_RESPONSE_SECTION_EMPTY_RESPONSE).should(
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/investigation_section.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/investigation_section.tsx
index 2c8de1e8aa71f..b0b021d1bd60c 100644
--- a/x-pack/plugins/security_solution/public/flyout/right/components/investigation_section.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/right/components/investigation_section.tsx
@@ -23,7 +23,7 @@ export interface DescriptionSectionProps {
/**
* Most top section of the overview tab. It contains the description, reason and mitre attack information (for a document of type alert).
*/
-export const InvestigationSection: VFC = ({ expanded = false }) => {
+export const InvestigationSection: VFC = ({ expanded = true }) => {
return (
{
<>
-
-
+
+
From d59d778555c30a1dfcfd4802949c9edde88e01eb Mon Sep 17 00:00:00 2001
From: Nick Clark
Date: Sat, 12 Aug 2023 09:13:32 +1000
Subject: [PATCH 37/46] Add timeWindow type changes to slo docs (#163367)
---
.../observability/dev_docs/composite_slo.md | 2 +-
x-pack/plugins/observability/dev_docs/slo.md | 26 +++++++++----------
2 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/x-pack/plugins/observability/dev_docs/composite_slo.md b/x-pack/plugins/observability/dev_docs/composite_slo.md
index f3018e33d46dd..4e34933c8560e 100644
--- a/x-pack/plugins/observability/dev_docs/composite_slo.md
+++ b/x-pack/plugins/observability/dev_docs/composite_slo.md
@@ -28,7 +28,7 @@ curl --request POST \
],
"timeWindow": {
"duration": "7d",
- "isRolling": true
+ "type": "rolling"
},
"budgetingMethod": "occurrences",
"objective": {
diff --git a/x-pack/plugins/observability/dev_docs/slo.md b/x-pack/plugins/observability/dev_docs/slo.md
index ab605e51ffd27..13e74fef228e8 100644
--- a/x-pack/plugins/observability/dev_docs/slo.md
+++ b/x-pack/plugins/observability/dev_docs/slo.md
@@ -23,9 +23,9 @@ The **custom Metric** SLI requires an index pattern, an optional filter query, a
We support **calendar aligned** and **rolling** time windows. Any duration greater than 1 day can be used: days, weeks, months, quarters, years.
-**Rolling time window:** Requires a duration, e.g. `1w` for one week, and `isRolling: true`. SLOs defined with such time window, will only considere the SLI data from the last duration period as a moving window.
+**Rolling time window:** Requires a duration, e.g. `1w` for one week, and `type: rolling`. SLOs defined with such time window, will only considere the SLI data from the last duration period as a moving window.
-**Calendar aligned time window:** Requires a duration, limited to `1M` for monthly or `1w` for weekly, and `isCalendar: true`.
+**Calendar aligned time window:** Requires a duration, limited to `1M` for monthly or `1w` for weekly, and `type: calendarAligned`.
### Budgeting method
@@ -46,8 +46,8 @@ If a **timeslices** budgeting method is used, we also need to define the **times
The default settings should be sufficient for most users, but if needed, the following properties can be overwritten:
-- **syncDelay**: The ingest delay in the source data
-- **frequency**: How often do we query the source data
+- **syncDelay**: The ingest delay in the source data, defaults to `1m`
+- **frequency**: How often do we query the source data, defaults to `1m`
## Example
@@ -77,7 +77,7 @@ curl --request POST \
},
"timeWindow": {
"duration": "30d",
- "isRolling": true
+ "type": "rolling"
},
"budgetingMethod": "occurrences",
"objective": {
@@ -112,7 +112,7 @@ curl --request POST \
},
"timeWindow": {
"duration": "1M",
- "isCalendar": true
+ "type": "calendarAligned"
},
"budgetingMethod": "occurrences",
"objective": {
@@ -146,8 +146,8 @@ curl --request POST \
}
},
"timeWindow": {
- "duration": "1w",
- "isRolling": true
+ "duration": "7d",
+ "type": "rolling"
},
"budgetingMethod": "timeslices",
"objective": {
@@ -187,7 +187,7 @@ curl --request POST \
},
"timeWindow": {
"duration": "7d",
- "isRolling": true
+ "type": "rolling"
},
"budgetingMethod": "occurrences",
"objective": {
@@ -223,7 +223,7 @@ curl --request POST \
},
"timeWindow": {
"duration": "7d",
- "isRolling": true
+ "type": "rolling"
},
"budgetingMethod": "timeslices",
"objective": {
@@ -261,7 +261,7 @@ curl --request POST \
},
"timeWindow": {
"duration": "1w",
- "isCalendar": true
+ "type": "calendarAligned"
},
"budgetingMethod": "timeslices",
"objective": {
@@ -300,7 +300,7 @@ curl --request POST \
},
"timeWindow": {
"duration": "7d",
- "isRolling": true
+ "type": "rolling"
},
"budgetingMethod": "occurrences",
"objective": {
@@ -355,7 +355,7 @@ curl --request POST \
},
"timeWindow": {
"duration": "7d",
- "isRolling": true
+ "type": "rolling"
},
"budgetingMethod": "occurrences",
"objective": {
From cafaa9295ec899eb240e5e9621154ab6c6aa4174 Mon Sep 17 00:00:00 2001
From: Matthew Kime
Date: Fri, 11 Aug 2023 20:56:46 -0500
Subject: [PATCH 38/46] [data views] swap_references api improvements (#163225)
## Summary
Some simple dev UX improvements to the swap_references data views api -
```
POST /api/data_views/swap_references/_preview
{
"fromId" : "abcd-efg",
"toId" : "xyz-123"
}
returns
{
result: [{ id: "123", type: "visualization" }],
}
```
```
POST /api/data_views/swap_references
{
"fromId" : "abcd-efg",
"toId" : "xyz-123",
"delete" : true // optional, removes data view which is no longer referenced
}
returns
{
result: [{ id: "123", type: "visualization" }],
deleteStatus: {
remainingRefs: 0,
deletePerformed: true
}
```
Additional params -
```
fromType: string - specify the saved object type. Default is `index-pattern` for data view
forId: string | string[] - limit the affected saved objects to one or more by id
forType: string - limit the affected saved objects by type
```
Improves upon https://github.com/elastic/kibana/pull/157665
Docs will be created in follow up PR
---
.../server/rest_api_routes/public/index.ts | 3 +-
.../rest_api_routes/public/swap_references.ts | 260 +++++++++---------
.../apis/data_views/swap_references/main.ts | 70 +++--
3 files changed, 181 insertions(+), 152 deletions(-)
diff --git a/src/plugins/data_views/server/rest_api_routes/public/index.ts b/src/plugins/data_views/server/rest_api_routes/public/index.ts
index f4f64841e1de9..ebd7a2a6febf0 100644
--- a/src/plugins/data_views/server/rest_api_routes/public/index.ts
+++ b/src/plugins/data_views/server/rest_api_routes/public/index.ts
@@ -46,7 +46,8 @@ const routes = [
updateRoutes.registerUpdateDataViewRoute,
updateRoutes.registerUpdateDataViewRouteLegacy,
...Object.values(scriptedRoutes),
- swapReferencesRoute,
+ swapReferencesRoute({ previewRoute: false }),
+ swapReferencesRoute({ previewRoute: true }),
];
export { routes };
diff --git a/src/plugins/data_views/server/rest_api_routes/public/swap_references.ts b/src/plugins/data_views/server/rest_api_routes/public/swap_references.ts
index e8296394857d8..abeb5a5e4cb4e 100644
--- a/src/plugins/data_views/server/rest_api_routes/public/swap_references.ts
+++ b/src/plugins/data_views/server/rest_api_routes/public/swap_references.ts
@@ -27,8 +27,10 @@ interface GetDataViewArgs {
interface SwapRefResponse {
result: Array<{ id: string; type: string }>;
- preview: boolean;
- deleteSuccess?: boolean;
+ deleteStatus?: {
+ remainingRefs: number;
+ deletePerformed: boolean;
+ };
}
export const swapReference = async ({
@@ -43,135 +45,147 @@ export const swapReference = async ({
const idSchema = schema.string();
-export const swapReferencesRoute = (
- router: IRouter,
- getStartServices: StartServicesAccessor<
- DataViewsServerPluginStartDependencies,
- DataViewsServerPluginStart
- >,
- usageCollection?: UsageCounter
-) => {
- router.versioned.post({ path: DATA_VIEW_SWAP_REFERENCES_PATH, access: 'public' }).addVersion(
- {
- version: INITIAL_REST_VERSION,
- validate: {
- request: {
- body: schema.object({
- from_id: idSchema,
- from_type: schema.maybe(schema.string()),
- to_id: idSchema,
- for_id: schema.maybe(schema.oneOf([idSchema, schema.arrayOf(idSchema)])),
- for_type: schema.maybe(schema.string()),
- preview: schema.maybe(schema.boolean()),
- delete: schema.maybe(schema.boolean()),
- }),
- },
- response: {
- 200: {
+export const swapReferencesRoute =
+ ({ previewRoute }: { previewRoute: boolean }) =>
+ (
+ router: IRouter,
+ getStartServices: StartServicesAccessor<
+ DataViewsServerPluginStartDependencies,
+ DataViewsServerPluginStart
+ >,
+ usageCollection?: UsageCounter
+ ) => {
+ const path = previewRoute
+ ? `${DATA_VIEW_SWAP_REFERENCES_PATH}/_preview`
+ : DATA_VIEW_SWAP_REFERENCES_PATH;
+ router.versioned.post({ path, access: 'public' }).addVersion(
+ {
+ version: INITIAL_REST_VERSION,
+ validate: {
+ request: {
body: schema.object({
- result: schema.arrayOf(schema.object({ id: idSchema, type: schema.string() })),
- preview: schema.boolean(),
- deleteSuccess: schema.maybe(schema.boolean()),
+ fromId: idSchema,
+ fromType: schema.maybe(schema.string()),
+ toId: idSchema,
+ forId: schema.maybe(schema.oneOf([idSchema, schema.arrayOf(idSchema)])),
+ forType: schema.maybe(schema.string()),
+ delete: schema.maybe(schema.boolean()),
}),
},
+ response: {
+ 200: {
+ body: schema.object({
+ result: schema.arrayOf(schema.object({ id: idSchema, type: schema.string() })),
+ deleteStatus: schema.maybe(
+ schema.object({
+ remainingRefs: schema.number(),
+ deletePerformed: schema.boolean(),
+ })
+ ),
+ }),
+ },
+ },
},
},
- },
- router.handleLegacyErrors(
- handleErrors(async (ctx, req, res) => {
- const savedObjectsClient = (await ctx.core).savedObjects.client;
- const [core] = await getStartServices();
- const types = core.savedObjects.getTypeRegistry().getAllTypes();
- const type = req.body.from_type || DATA_VIEW_SAVED_OBJECT_TYPE;
- const preview = req.body.preview !== undefined ? req.body.preview : true;
- const searchId =
- !Array.isArray(req.body.for_id) && req.body.for_id !== undefined
- ? [req.body.for_id]
- : req.body.for_id;
-
- usageCollection?.incrementCounter({ counterName: 'swap_references' });
-
- // verify 'to' object actually exists
- try {
- await savedObjectsClient.get(type, req.body.to_id);
- } catch (e) {
- throw new Error(`Could not find object with type ${type} and id ${req.body.to_id}`);
- }
-
- // assemble search params
- const findParams: SavedObjectsFindOptions = {
- type: types.map((t) => t.name),
- hasReference: { type, id: req.body.from_id },
- };
-
- if (req.body.for_type) {
- findParams.type = [req.body.for_type];
- }
-
- const { saved_objects: savedObjects } = await savedObjectsClient.find(findParams);
-
- const filteredSavedObjects = searchId
- ? savedObjects.filter((so) => searchId?.includes(so.id))
- : savedObjects;
-
- // create summary of affected objects
- const resultSummary = filteredSavedObjects.map((savedObject) => ({
- id: savedObject.id,
- type: savedObject.type,
- }));
-
- const body: SwapRefResponse = {
- result: resultSummary,
- preview,
- };
-
- // bail if preview
- if (preview) {
+ router.handleLegacyErrors(
+ handleErrors(async (ctx, req, res) => {
+ const savedObjectsClient = (await ctx.core).savedObjects.client;
+ const [core] = await getStartServices();
+ const types = core.savedObjects.getTypeRegistry().getAllTypes();
+ const type = req.body.fromType || DATA_VIEW_SAVED_OBJECT_TYPE;
+ const searchId =
+ !Array.isArray(req.body.forId) && req.body.forId !== undefined
+ ? [req.body.forId]
+ : req.body.forId;
+
+ usageCollection?.incrementCounter({ counterName: 'swap_references' });
+
+ // verify 'to' object actually exists
+ try {
+ await savedObjectsClient.get(type, req.body.toId);
+ } catch (e) {
+ throw new Error(`Could not find object with type ${type} and id ${req.body.toId}`);
+ }
+
+ // assemble search params
+ const findParams: SavedObjectsFindOptions = {
+ type: types.map((t) => t.name),
+ hasReference: { type, id: req.body.fromId },
+ };
+
+ if (req.body.forType) {
+ findParams.type = [req.body.forType];
+ }
+
+ const { saved_objects: savedObjects } = await savedObjectsClient.find(findParams);
+
+ const filteredSavedObjects = searchId
+ ? savedObjects.filter((so) => searchId?.includes(so.id))
+ : savedObjects;
+
+ // create summary of affected objects
+ const resultSummary = filteredSavedObjects.map((savedObject) => ({
+ id: savedObject.id,
+ type: savedObject.type,
+ }));
+
+ const body: SwapRefResponse = {
+ result: resultSummary,
+ };
+
+ // bail if preview
+ if (previewRoute) {
+ return res.ok({
+ headers: {
+ 'content-type': 'application/json',
+ },
+ body,
+ });
+ }
+
+ // iterate over list and update references
+ for (const savedObject of filteredSavedObjects) {
+ const updatedRefs = savedObject.references.map((ref) => {
+ if (ref.type === type && ref.id === req.body.fromId) {
+ return { ...ref, id: req.body.toId };
+ } else {
+ return ref;
+ }
+ });
+
+ await savedObjectsClient.update(
+ savedObject.type,
+ savedObject.id,
+ {},
+ {
+ references: updatedRefs,
+ }
+ );
+ }
+
+ if (req.body.delete) {
+ const verifyNoMoreRefs = await savedObjectsClient.find(findParams);
+ if (verifyNoMoreRefs.total > 0) {
+ body.deleteStatus = {
+ remainingRefs: verifyNoMoreRefs.total,
+ deletePerformed: false,
+ };
+ } else {
+ await savedObjectsClient.delete(type, req.body.fromId, { refresh: 'wait_for' });
+ body.deleteStatus = {
+ remainingRefs: verifyNoMoreRefs.total,
+ deletePerformed: true,
+ };
+ }
+ }
+
return res.ok({
headers: {
'content-type': 'application/json',
},
body,
});
- }
-
- // iterate over list and update references
- for (const savedObject of filteredSavedObjects) {
- const updatedRefs = savedObject.references.map((ref) => {
- if (ref.type === type && ref.id === req.body.from_id) {
- return { ...ref, id: req.body.to_id };
- } else {
- return ref;
- }
- });
-
- await savedObjectsClient.update(
- savedObject.type,
- savedObject.id,
- {},
- {
- references: updatedRefs,
- }
- );
- }
-
- if (req.body.delete) {
- const verifyNoMoreRefs = await savedObjectsClient.find(findParams);
- if (verifyNoMoreRefs.total > 0) {
- body.deleteSuccess = false;
- } else {
- await savedObjectsClient.delete(type, req.body.from_id);
- body.deleteSuccess = true;
- }
- }
-
- return res.ok({
- headers: {
- 'content-type': 'application/json',
- },
- body,
- });
- })
- )
- );
-};
+ })
+ )
+ );
+ };
diff --git a/test/api_integration/apis/data_views/swap_references/main.ts b/test/api_integration/apis/data_views/swap_references/main.ts
index 93247f090a9da..404d9e58ab477 100644
--- a/test/api_integration/apis/data_views/swap_references/main.ts
+++ b/test/api_integration/apis/data_views/swap_references/main.ts
@@ -20,6 +20,7 @@ export default function ({ getService }: FtrProviderContext) {
const supertest = getService('supertest');
const title = 'logs-*';
const prevDataViewId = '91200a00-9efd-11e7-acb3-3dab96693fab';
+ const PREVIEW_PATH = `${DATA_VIEW_SWAP_REFERENCES_PATH}/_preview`;
let dataViewId = '';
describe('main', () => {
@@ -49,23 +50,23 @@ export default function ({ getService }: FtrProviderContext) {
it('can preview', async () => {
const res = await supertest
- .post(DATA_VIEW_SWAP_REFERENCES_PATH)
+ .post(PREVIEW_PATH)
.set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION)
.send({
- from_id: prevDataViewId,
- to_id: dataViewId,
+ fromId: prevDataViewId,
+ toId: dataViewId,
});
expect(res).to.have.property('status', 200);
});
it('can preview specifying type', async () => {
const res = await supertest
- .post(DATA_VIEW_SWAP_REFERENCES_PATH)
+ .post(PREVIEW_PATH)
.set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION)
.send({
- from_id: prevDataViewId,
- from_type: 'index-pattern',
- to_id: dataViewId,
+ fromId: prevDataViewId,
+ fromType: 'index-pattern',
+ toId: dataViewId,
});
expect(res).to.have.property('status', 200);
});
@@ -75,13 +76,11 @@ export default function ({ getService }: FtrProviderContext) {
.post(DATA_VIEW_SWAP_REFERENCES_PATH)
.set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION)
.send({
- from_id: prevDataViewId,
- to_id: dataViewId,
- preview: false,
+ fromId: prevDataViewId,
+ toId: dataViewId,
});
expect(res).to.have.property('status', 200);
expect(res.body.result.length).to.equal(1);
- expect(res.body.preview).to.equal(false);
expect(res.body.result[0].id).to.equal('dd7caf20-9efd-11e7-acb3-3dab96693fab');
expect(res.body.result[0].type).to.equal('visualization');
});
@@ -91,13 +90,14 @@ export default function ({ getService }: FtrProviderContext) {
.post(DATA_VIEW_SWAP_REFERENCES_PATH)
.set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION)
.send({
- from_id: prevDataViewId,
- to_id: dataViewId,
- preview: false,
+ fromId: prevDataViewId,
+ toId: dataViewId,
delete: true,
});
expect(res).to.have.property('status', 200);
expect(res.body.result.length).to.equal(1);
+ expect(res.body.deleteStatus.remainingRefs).to.equal(0);
+ expect(res.body.deleteStatus.deletePerformed).to.equal(true);
const res2 = await supertest
.get(SPECIFIC_DATA_VIEW_PATH.replace('{id}', prevDataViewId))
@@ -118,13 +118,29 @@ export default function ({ getService }: FtrProviderContext) {
);
});
+ it("won't delete if reference remains", async () => {
+ const res = await supertest
+ .post(DATA_VIEW_SWAP_REFERENCES_PATH)
+ .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION)
+ .send({
+ fromId: '8963ca30-3224-11e8-a572-ffca06da1357',
+ toId: '91200a00-9efd-11e7-acb3-3dab96693fab',
+ forId: ['960372e0-3224-11e8-a572-ffca06da1357'],
+ delete: true,
+ });
+ expect(res).to.have.property('status', 200);
+ expect(res.body.result.length).to.equal(1);
+ expect(res.body.deleteStatus.remainingRefs).to.equal(1);
+ expect(res.body.deleteStatus.deletePerformed).to.equal(false);
+ });
+
it('can limit by id', async () => {
// confirm this will find two items
const res = await supertest
- .post(DATA_VIEW_SWAP_REFERENCES_PATH)
+ .post(PREVIEW_PATH)
.send({
- from_id: '8963ca30-3224-11e8-a572-ffca06da1357',
- to_id: '91200a00-9efd-11e7-acb3-3dab96693fab',
+ fromId: '8963ca30-3224-11e8-a572-ffca06da1357',
+ toId: '91200a00-9efd-11e7-acb3-3dab96693fab',
})
.set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION);
expect(res).to.have.property('status', 200);
@@ -134,10 +150,9 @@ export default function ({ getService }: FtrProviderContext) {
const res2 = await supertest
.post(DATA_VIEW_SWAP_REFERENCES_PATH)
.send({
- from_id: '8963ca30-3224-11e8-a572-ffca06da1357',
- to_id: '91200a00-9efd-11e7-acb3-3dab96693fab',
- for_id: ['960372e0-3224-11e8-a572-ffca06da1357'],
- preview: false,
+ fromId: '8963ca30-3224-11e8-a572-ffca06da1357',
+ toId: '91200a00-9efd-11e7-acb3-3dab96693fab',
+ forId: ['960372e0-3224-11e8-a572-ffca06da1357'],
})
.set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION);
expect(res2).to.have.property('status', 200);
@@ -147,10 +162,10 @@ export default function ({ getService }: FtrProviderContext) {
it('can limit by type', async () => {
// confirm this will find two items
const res = await supertest
- .post(DATA_VIEW_SWAP_REFERENCES_PATH)
+ .post(PREVIEW_PATH)
.send({
- from_id: '8963ca30-3224-11e8-a572-ffca06da1357',
- to_id: '91200a00-9efd-11e7-acb3-3dab96693fab',
+ fromId: '8963ca30-3224-11e8-a572-ffca06da1357',
+ toId: '91200a00-9efd-11e7-acb3-3dab96693fab',
})
.set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION);
expect(res).to.have.property('status', 200);
@@ -160,10 +175,9 @@ export default function ({ getService }: FtrProviderContext) {
const res2 = await supertest
.post(DATA_VIEW_SWAP_REFERENCES_PATH)
.send({
- from_id: '8963ca30-3224-11e8-a572-ffca06da1357',
- to_id: '91200a00-9efd-11e7-acb3-3dab96693fab',
- for_type: 'search',
- preview: false,
+ fromId: '8963ca30-3224-11e8-a572-ffca06da1357',
+ toId: '91200a00-9efd-11e7-acb3-3dab96693fab',
+ forType: 'search',
})
.set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION);
expect(res2).to.have.property('status', 200);
From 7b3cc8f5735306d13113b0f75499f386fc0aec48 Mon Sep 17 00:00:00 2001
From: "Devin W. Hurley"
Date: Fri, 11 Aug 2023 23:35:20 -0400
Subject: [PATCH 39/46] [Security Solution] [Detections] Fixes flakey
exceptions read-only viewer cypress test (#162839)
## Summary
Ref: https://github.com/elastic/kibana/issues/162569
The test was trying to load the exceptions tab before the rule details
page loaded. Now we wait for the rule tab to load before continuing.
Something I was unaware of was that `cy.url()` will [automatically
retry](https://docs.cypress.io/api/commands/url#Assertions) until all
chained assertions have passed, which I think can be an easy way to fix
future flake issues where cypress tries to click on an element before
the new page loads.
---
.../e2e/exceptions/rule_details_flow/read_only_view.cy.ts | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/x-pack/plugins/security_solution/cypress/e2e/exceptions/rule_details_flow/read_only_view.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/exceptions/rule_details_flow/read_only_view.cy.ts
index 5cbb1da916440..6464b782ae675 100644
--- a/x-pack/plugins/security_solution/cypress/e2e/exceptions/rule_details_flow/read_only_view.cy.ts
+++ b/x-pack/plugins/security_solution/cypress/e2e/exceptions/rule_details_flow/read_only_view.cy.ts
@@ -13,7 +13,7 @@ import { login, visitWithoutDateRange } from '../../../tasks/login';
import { goToExceptionsTab, goToAlertsTab } from '../../../tasks/rule_details';
import { goToRuleDetails } from '../../../tasks/alerts_detection_rules';
import { DETECTIONS_RULE_MANAGEMENT_URL } from '../../../urls/navigation';
-import { deleteAlertsAndRules } from '../../../tasks/common';
+import { cleanKibana, deleteAlertsAndRules } from '../../../tasks/common';
import {
NO_EXCEPTIONS_EXIST_PROMPT,
EXCEPTION_ITEM_VIEWER_CONTAINER,
@@ -31,7 +31,7 @@ describe('Exceptions viewer read only', () => {
const exceptionList = getExceptionList();
before(() => {
- cy.task('esArchiverResetKibana');
+ cleanKibana();
// create rule with exceptions
createExceptionList(exceptionList, exceptionList.list_id).then((response) => {
createRule(
@@ -56,6 +56,7 @@ describe('Exceptions viewer read only', () => {
login(ROLES.reader);
visitWithoutDateRange(DETECTIONS_RULE_MANAGEMENT_URL, ROLES.reader);
goToRuleDetails();
+ cy.url().should('contain', 'app/security/rules/id');
goToExceptionsTab();
});
From b336a195e03578129d034dc8daaa793639494c38 Mon Sep 17 00:00:00 2001
From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Date: Sat, 12 Aug 2023 00:50:44 -0400
Subject: [PATCH 40/46] [api-docs] 2023-08-12 Daily api_docs build (#163762)
Generated by
https://buildkite.com/elastic/kibana-api-docs-daily/builds/427
---
api_docs/actions.mdx | 2 +-
api_docs/advanced_settings.mdx | 2 +-
api_docs/aiops.mdx | 2 +-
api_docs/alerting.mdx | 2 +-
api_docs/apm.mdx | 2 +-
api_docs/asset_manager.mdx | 2 +-
api_docs/banners.mdx | 2 +-
api_docs/bfetch.mdx | 2 +-
api_docs/canvas.mdx | 2 +-
api_docs/cases.mdx | 2 +-
api_docs/charts.mdx | 2 +-
api_docs/cloud.mdx | 2 +-
api_docs/cloud_chat.mdx | 2 +-
api_docs/cloud_chat_provider.mdx | 2 +-
api_docs/cloud_data_migration.mdx | 2 +-
api_docs/cloud_defend.mdx | 2 +-
api_docs/cloud_experiments.mdx | 2 +-
api_docs/cloud_security_posture.mdx | 2 +-
api_docs/console.mdx | 2 +-
api_docs/content_management.mdx | 2 +-
api_docs/controls.mdx | 2 +-
api_docs/custom_integrations.mdx | 2 +-
api_docs/dashboard.mdx | 2 +-
api_docs/dashboard_enhanced.mdx | 2 +-
api_docs/data.mdx | 2 +-
api_docs/data_query.mdx | 2 +-
api_docs/data_search.mdx | 2 +-
api_docs/data_view_editor.mdx | 2 +-
api_docs/data_view_field_editor.mdx | 2 +-
api_docs/data_view_management.mdx | 2 +-
api_docs/data_views.mdx | 2 +-
api_docs/data_visualizer.mdx | 2 +-
api_docs/deprecations_by_api.mdx | 6 +-
api_docs/deprecations_by_plugin.mdx | 12 +-
api_docs/deprecations_by_team.mdx | 2 +-
api_docs/dev_tools.mdx | 2 +-
api_docs/discover.mdx | 2 +-
api_docs/discover_enhanced.mdx | 2 +-
api_docs/ecs_data_quality_dashboard.mdx | 2 +-
api_docs/embeddable.mdx | 2 +-
api_docs/embeddable_enhanced.mdx | 2 +-
api_docs/encrypted_saved_objects.mdx | 2 +-
api_docs/enterprise_search.mdx | 2 +-
api_docs/es_ui_shared.mdx | 2 +-
api_docs/event_annotation.mdx | 2 +-
api_docs/event_log.mdx | 2 +-
api_docs/exploratory_view.devdocs.json | 20 +
api_docs/exploratory_view.mdx | 4 +-
api_docs/expression_error.mdx | 2 +-
api_docs/expression_gauge.mdx | 2 +-
api_docs/expression_heatmap.mdx | 2 +-
api_docs/expression_image.mdx | 2 +-
api_docs/expression_legacy_metric_vis.mdx | 2 +-
api_docs/expression_metric.mdx | 2 +-
api_docs/expression_metric_vis.mdx | 2 +-
api_docs/expression_partition_vis.mdx | 2 +-
api_docs/expression_repeat_image.mdx | 2 +-
api_docs/expression_reveal_image.mdx | 2 +-
api_docs/expression_shape.mdx | 2 +-
api_docs/expression_tagcloud.mdx | 2 +-
api_docs/expression_x_y.mdx | 2 +-
api_docs/expressions.mdx | 2 +-
api_docs/features.mdx | 2 +-
api_docs/field_formats.mdx | 2 +-
api_docs/file_upload.mdx | 2 +-
api_docs/files.mdx | 2 +-
api_docs/files_management.mdx | 2 +-
api_docs/fleet.mdx | 2 +-
api_docs/global_search.mdx | 2 +-
api_docs/guided_onboarding.mdx | 2 +-
api_docs/home.mdx | 2 +-
api_docs/image_embeddable.mdx | 2 +-
api_docs/index_lifecycle_management.mdx | 2 +-
api_docs/index_management.mdx | 2 +-
api_docs/infra.mdx | 2 +-
api_docs/inspector.mdx | 2 +-
api_docs/interactive_setup.mdx | 2 +-
api_docs/kbn_ace.mdx | 2 +-
api_docs/kbn_aiops_components.mdx | 2 +-
api_docs/kbn_aiops_utils.mdx | 2 +-
api_docs/kbn_alerting_state_types.mdx | 2 +-
api_docs/kbn_alerts_as_data_utils.mdx | 2 +-
api_docs/kbn_alerts_ui_shared.mdx | 2 +-
api_docs/kbn_analytics.mdx | 2 +-
api_docs/kbn_analytics_client.mdx | 2 +-
..._analytics_shippers_elastic_v3_browser.mdx | 2 +-
...n_analytics_shippers_elastic_v3_common.mdx | 2 +-
...n_analytics_shippers_elastic_v3_server.mdx | 2 +-
api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +-
api_docs/kbn_analytics_shippers_gainsight.mdx | 2 +-
api_docs/kbn_apm_config_loader.mdx | 2 +-
api_docs/kbn_apm_synthtrace.mdx | 2 +-
api_docs/kbn_apm_synthtrace_client.mdx | 2 +-
api_docs/kbn_apm_utils.mdx | 2 +-
api_docs/kbn_axe_config.mdx | 2 +-
api_docs/kbn_cases_components.mdx | 2 +-
api_docs/kbn_cell_actions.mdx | 2 +-
api_docs/kbn_chart_expressions_common.mdx | 2 +-
api_docs/kbn_chart_icons.mdx | 2 +-
api_docs/kbn_ci_stats_core.mdx | 2 +-
api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +-
api_docs/kbn_ci_stats_reporter.mdx | 2 +-
api_docs/kbn_cli_dev_mode.mdx | 2 +-
api_docs/kbn_code_editor.mdx | 2 +-
api_docs/kbn_code_editor_mocks.mdx | 2 +-
api_docs/kbn_coloring.mdx | 2 +-
api_docs/kbn_config.mdx | 2 +-
api_docs/kbn_config_mocks.mdx | 2 +-
api_docs/kbn_config_schema.mdx | 2 +-
.../kbn_content_management_content_editor.mdx | 2 +-
...tent_management_tabbed_table_list_view.mdx | 2 +-
...kbn_content_management_table_list_view.mdx | 2 +-
...ntent_management_table_list_view_table.mdx | 2 +-
api_docs/kbn_content_management_utils.mdx | 2 +-
api_docs/kbn_core_analytics_browser.mdx | 2 +-
.../kbn_core_analytics_browser_internal.mdx | 2 +-
api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +-
api_docs/kbn_core_analytics_server.mdx | 2 +-
.../kbn_core_analytics_server_internal.mdx | 2 +-
api_docs/kbn_core_analytics_server_mocks.mdx | 2 +-
api_docs/kbn_core_application_browser.mdx | 2 +-
.../kbn_core_application_browser_internal.mdx | 2 +-
.../kbn_core_application_browser_mocks.mdx | 2 +-
api_docs/kbn_core_application_common.mdx | 2 +-
api_docs/kbn_core_apps_browser_internal.mdx | 2 +-
api_docs/kbn_core_apps_browser_mocks.mdx | 2 +-
api_docs/kbn_core_apps_server_internal.mdx | 2 +-
api_docs/kbn_core_base_browser_mocks.mdx | 2 +-
api_docs/kbn_core_base_common.mdx | 2 +-
api_docs/kbn_core_base_server_internal.mdx | 2 +-
api_docs/kbn_core_base_server_mocks.mdx | 2 +-
.../kbn_core_capabilities_browser_mocks.mdx | 2 +-
api_docs/kbn_core_capabilities_common.mdx | 2 +-
api_docs/kbn_core_capabilities_server.mdx | 2 +-
.../kbn_core_capabilities_server_mocks.mdx | 2 +-
api_docs/kbn_core_chrome_browser.mdx | 2 +-
api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +-
api_docs/kbn_core_config_server_internal.mdx | 2 +-
api_docs/kbn_core_custom_branding_browser.mdx | 2 +-
..._core_custom_branding_browser_internal.mdx | 2 +-
...kbn_core_custom_branding_browser_mocks.mdx | 2 +-
api_docs/kbn_core_custom_branding_common.mdx | 2 +-
api_docs/kbn_core_custom_branding_server.mdx | 2 +-
...n_core_custom_branding_server_internal.mdx | 2 +-
.../kbn_core_custom_branding_server_mocks.mdx | 2 +-
api_docs/kbn_core_deprecations_browser.mdx | 2 +-
...kbn_core_deprecations_browser_internal.mdx | 2 +-
.../kbn_core_deprecations_browser_mocks.mdx | 2 +-
api_docs/kbn_core_deprecations_common.mdx | 2 +-
api_docs/kbn_core_deprecations_server.mdx | 2 +-
.../kbn_core_deprecations_server_internal.mdx | 2 +-
.../kbn_core_deprecations_server_mocks.mdx | 2 +-
api_docs/kbn_core_doc_links_browser.mdx | 2 +-
api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +-
api_docs/kbn_core_doc_links_server.mdx | 2 +-
api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +-
...e_elasticsearch_client_server_internal.mdx | 2 +-
...core_elasticsearch_client_server_mocks.mdx | 2 +-
api_docs/kbn_core_elasticsearch_server.mdx | 2 +-
...kbn_core_elasticsearch_server_internal.mdx | 2 +-
.../kbn_core_elasticsearch_server_mocks.mdx | 2 +-
.../kbn_core_environment_server_internal.mdx | 2 +-
.../kbn_core_environment_server_mocks.mdx | 2 +-
.../kbn_core_execution_context_browser.mdx | 2 +-
...ore_execution_context_browser_internal.mdx | 2 +-
...n_core_execution_context_browser_mocks.mdx | 2 +-
.../kbn_core_execution_context_common.mdx | 2 +-
.../kbn_core_execution_context_server.mdx | 2 +-
...core_execution_context_server_internal.mdx | 2 +-
...bn_core_execution_context_server_mocks.mdx | 2 +-
api_docs/kbn_core_fatal_errors_browser.mdx | 2 +-
.../kbn_core_fatal_errors_browser_mocks.mdx | 2 +-
api_docs/kbn_core_http_browser.mdx | 2 +-
api_docs/kbn_core_http_browser_internal.mdx | 2 +-
api_docs/kbn_core_http_browser_mocks.mdx | 2 +-
api_docs/kbn_core_http_common.mdx | 2 +-
.../kbn_core_http_context_server_mocks.mdx | 2 +-
...re_http_request_handler_context_server.mdx | 2 +-
api_docs/kbn_core_http_resources_server.mdx | 2 +-
...bn_core_http_resources_server_internal.mdx | 2 +-
.../kbn_core_http_resources_server_mocks.mdx | 2 +-
.../kbn_core_http_router_server_internal.mdx | 2 +-
.../kbn_core_http_router_server_mocks.mdx | 2 +-
api_docs/kbn_core_http_server.devdocs.json | 64 +-
api_docs/kbn_core_http_server.mdx | 2 +-
api_docs/kbn_core_http_server_internal.mdx | 2 +-
api_docs/kbn_core_http_server_mocks.mdx | 2 +-
api_docs/kbn_core_i18n_browser.mdx | 2 +-
api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +-
api_docs/kbn_core_i18n_server.mdx | 2 +-
api_docs/kbn_core_i18n_server_internal.mdx | 2 +-
api_docs/kbn_core_i18n_server_mocks.mdx | 2 +-
...n_core_injected_metadata_browser_mocks.mdx | 2 +-
...kbn_core_integrations_browser_internal.mdx | 2 +-
.../kbn_core_integrations_browser_mocks.mdx | 2 +-
api_docs/kbn_core_lifecycle_browser.mdx | 2 +-
api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +-
api_docs/kbn_core_lifecycle_server.mdx | 2 +-
api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +-
api_docs/kbn_core_logging_browser_mocks.mdx | 2 +-
api_docs/kbn_core_logging_common_internal.mdx | 2 +-
api_docs/kbn_core_logging_server.mdx | 2 +-
api_docs/kbn_core_logging_server_internal.mdx | 2 +-
api_docs/kbn_core_logging_server_mocks.mdx | 2 +-
...ore_metrics_collectors_server_internal.mdx | 2 +-
...n_core_metrics_collectors_server_mocks.mdx | 2 +-
api_docs/kbn_core_metrics_server.mdx | 2 +-
api_docs/kbn_core_metrics_server_internal.mdx | 2 +-
api_docs/kbn_core_metrics_server_mocks.mdx | 2 +-
api_docs/kbn_core_mount_utils_browser.mdx | 2 +-
api_docs/kbn_core_node_server.mdx | 2 +-
api_docs/kbn_core_node_server_internal.mdx | 2 +-
api_docs/kbn_core_node_server_mocks.mdx | 2 +-
api_docs/kbn_core_notifications_browser.mdx | 2 +-
...bn_core_notifications_browser_internal.mdx | 2 +-
.../kbn_core_notifications_browser_mocks.mdx | 2 +-
api_docs/kbn_core_overlays_browser.mdx | 2 +-
.../kbn_core_overlays_browser_internal.mdx | 2 +-
api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +-
api_docs/kbn_core_plugins_browser.mdx | 2 +-
api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +-
api_docs/kbn_core_plugins_server.mdx | 2 +-
api_docs/kbn_core_plugins_server_mocks.mdx | 2 +-
api_docs/kbn_core_preboot_server.mdx | 2 +-
api_docs/kbn_core_preboot_server_mocks.mdx | 2 +-
api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +-
.../kbn_core_rendering_server_internal.mdx | 2 +-
api_docs/kbn_core_rendering_server_mocks.mdx | 2 +-
api_docs/kbn_core_root_server_internal.mdx | 2 +-
.../kbn_core_saved_objects_api_browser.mdx | 2 +-
.../kbn_core_saved_objects_api_server.mdx | 2 +-
...bn_core_saved_objects_api_server_mocks.mdx | 2 +-
...ore_saved_objects_base_server_internal.mdx | 2 +-
...n_core_saved_objects_base_server_mocks.mdx | 2 +-
api_docs/kbn_core_saved_objects_browser.mdx | 2 +-
...bn_core_saved_objects_browser_internal.mdx | 2 +-
.../kbn_core_saved_objects_browser_mocks.mdx | 2 +-
api_docs/kbn_core_saved_objects_common.mdx | 2 +-
..._objects_import_export_server_internal.mdx | 2 +-
...ved_objects_import_export_server_mocks.mdx | 2 +-
...aved_objects_migration_server_internal.mdx | 2 +-
...e_saved_objects_migration_server_mocks.mdx | 2 +-
api_docs/kbn_core_saved_objects_server.mdx | 2 +-
...kbn_core_saved_objects_server_internal.mdx | 2 +-
.../kbn_core_saved_objects_server_mocks.mdx | 2 +-
.../kbn_core_saved_objects_utils_server.mdx | 2 +-
api_docs/kbn_core_status_common.mdx | 2 +-
api_docs/kbn_core_status_common_internal.mdx | 2 +-
api_docs/kbn_core_status_server.mdx | 2 +-
api_docs/kbn_core_status_server_internal.mdx | 2 +-
api_docs/kbn_core_status_server_mocks.mdx | 2 +-
...core_test_helpers_deprecations_getters.mdx | 2 +-
...n_core_test_helpers_http_setup_browser.mdx | 2 +-
api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +-
...n_core_test_helpers_so_type_serializer.mdx | 2 +-
api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +-
api_docs/kbn_core_theme_browser.mdx | 2 +-
api_docs/kbn_core_theme_browser_mocks.mdx | 2 +-
api_docs/kbn_core_ui_settings_browser.mdx | 2 +-
.../kbn_core_ui_settings_browser_internal.mdx | 2 +-
.../kbn_core_ui_settings_browser_mocks.mdx | 2 +-
api_docs/kbn_core_ui_settings_common.mdx | 2 +-
api_docs/kbn_core_ui_settings_server.mdx | 2 +-
.../kbn_core_ui_settings_server_internal.mdx | 2 +-
.../kbn_core_ui_settings_server_mocks.mdx | 2 +-
api_docs/kbn_core_usage_data_server.mdx | 2 +-
.../kbn_core_usage_data_server_internal.mdx | 2 +-
api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +-
api_docs/kbn_core_user_settings_server.mdx | 2 +-
...kbn_core_user_settings_server_internal.mdx | 2 +-
.../kbn_core_user_settings_server_mocks.mdx | 2 +-
api_docs/kbn_crypto.mdx | 2 +-
api_docs/kbn_crypto_browser.mdx | 2 +-
api_docs/kbn_cypress_config.mdx | 2 +-
api_docs/kbn_data_service.mdx | 2 +-
api_docs/kbn_datemath.mdx | 2 +-
api_docs/kbn_deeplinks_analytics.mdx | 2 +-
api_docs/kbn_deeplinks_devtools.mdx | 2 +-
api_docs/kbn_deeplinks_management.mdx | 2 +-
api_docs/kbn_deeplinks_ml.mdx | 2 +-
api_docs/kbn_deeplinks_observability.mdx | 2 +-
api_docs/kbn_deeplinks_search.mdx | 2 +-
api_docs/kbn_default_nav_analytics.mdx | 2 +-
api_docs/kbn_default_nav_devtools.mdx | 2 +-
api_docs/kbn_default_nav_management.mdx | 2 +-
api_docs/kbn_default_nav_ml.mdx | 2 +-
api_docs/kbn_dev_cli_errors.mdx | 2 +-
api_docs/kbn_dev_cli_runner.mdx | 2 +-
api_docs/kbn_dev_proc_runner.mdx | 2 +-
api_docs/kbn_dev_utils.mdx | 2 +-
api_docs/kbn_discover_utils.mdx | 2 +-
api_docs/kbn_doc_links.mdx | 2 +-
api_docs/kbn_docs_utils.mdx | 2 +-
api_docs/kbn_dom_drag_drop.mdx | 2 +-
api_docs/kbn_ebt_tools.mdx | 2 +-
api_docs/kbn_ecs.mdx | 2 +-
api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +-
api_docs/kbn_elastic_assistant.mdx | 2 +-
api_docs/kbn_es.mdx | 2 +-
api_docs/kbn_es_archiver.mdx | 2 +-
api_docs/kbn_es_errors.mdx | 2 +-
api_docs/kbn_es_query.mdx | 2 +-
api_docs/kbn_es_types.mdx | 2 +-
api_docs/kbn_eslint_plugin_imports.mdx | 2 +-
api_docs/kbn_event_annotation_common.mdx | 2 +-
api_docs/kbn_event_annotation_components.mdx | 2 +-
api_docs/kbn_expandable_flyout.mdx | 2 +-
api_docs/kbn_field_types.mdx | 2 +-
api_docs/kbn_find_used_node_modules.mdx | 2 +-
.../kbn_ftr_common_functional_services.mdx | 2 +-
api_docs/kbn_generate.mdx | 2 +-
api_docs/kbn_generate_console_definitions.mdx | 2 +-
api_docs/kbn_generate_csv.mdx | 2 +-
api_docs/kbn_generate_csv_types.mdx | 2 +-
api_docs/kbn_guided_onboarding.mdx | 2 +-
api_docs/kbn_handlebars.mdx | 2 +-
api_docs/kbn_hapi_mocks.mdx | 2 +-
api_docs/kbn_health_gateway_server.mdx | 2 +-
api_docs/kbn_home_sample_data_card.mdx | 2 +-
api_docs/kbn_home_sample_data_tab.mdx | 2 +-
api_docs/kbn_i18n.mdx | 2 +-
api_docs/kbn_i18n_react.mdx | 2 +-
api_docs/kbn_import_resolver.mdx | 2 +-
api_docs/kbn_infra_forge.mdx | 2 +-
api_docs/kbn_interpreter.mdx | 2 +-
api_docs/kbn_io_ts_utils.mdx | 2 +-
api_docs/kbn_jest_serializers.mdx | 2 +-
api_docs/kbn_journeys.mdx | 2 +-
api_docs/kbn_json_ast.mdx | 2 +-
api_docs/kbn_kibana_manifest_schema.mdx | 2 +-
.../kbn_language_documentation_popover.mdx | 2 +-
api_docs/kbn_logging.mdx | 2 +-
api_docs/kbn_logging_mocks.mdx | 2 +-
api_docs/kbn_managed_vscode_config.mdx | 2 +-
api_docs/kbn_management_cards_navigation.mdx | 2 +-
api_docs/kbn_management_storybook_config.mdx | 2 +-
api_docs/kbn_mapbox_gl.mdx | 2 +-
api_docs/kbn_maps_vector_tile_utils.mdx | 2 +-
api_docs/kbn_ml_agg_utils.mdx | 2 +-
api_docs/kbn_ml_anomaly_utils.mdx | 2 +-
api_docs/kbn_ml_category_validator.mdx | 2 +-
.../kbn_ml_data_frame_analytics_utils.mdx | 2 +-
api_docs/kbn_ml_data_grid.mdx | 2 +-
api_docs/kbn_ml_date_picker.mdx | 2 +-
api_docs/kbn_ml_date_utils.mdx | 2 +-
api_docs/kbn_ml_error_utils.mdx | 2 +-
api_docs/kbn_ml_in_memory_table.mdx | 2 +-
api_docs/kbn_ml_is_defined.mdx | 2 +-
api_docs/kbn_ml_is_populated_object.mdx | 2 +-
api_docs/kbn_ml_kibana_theme.mdx | 2 +-
api_docs/kbn_ml_local_storage.mdx | 2 +-
api_docs/kbn_ml_nested_property.mdx | 2 +-
api_docs/kbn_ml_number_utils.mdx | 2 +-
api_docs/kbn_ml_query_utils.mdx | 2 +-
api_docs/kbn_ml_random_sampler_utils.mdx | 2 +-
api_docs/kbn_ml_route_utils.mdx | 2 +-
api_docs/kbn_ml_runtime_field_utils.mdx | 2 +-
api_docs/kbn_ml_string_hash.mdx | 2 +-
api_docs/kbn_ml_trained_models_utils.mdx | 2 +-
api_docs/kbn_ml_url_state.mdx | 2 +-
api_docs/kbn_monaco.mdx | 2 +-
api_docs/kbn_object_versioning.mdx | 2 +-
api_docs/kbn_observability_alert_details.mdx | 2 +-
api_docs/kbn_optimizer.mdx | 2 +-
api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +-
api_docs/kbn_osquery_io_ts_types.mdx | 2 +-
..._performance_testing_dataset_extractor.mdx | 2 +-
api_docs/kbn_plugin_generator.mdx | 2 +-
api_docs/kbn_plugin_helpers.mdx | 2 +-
api_docs/kbn_random_sampling.mdx | 2 +-
api_docs/kbn_react_field.mdx | 2 +-
api_docs/kbn_react_kibana_context_common.mdx | 2 +-
api_docs/kbn_react_kibana_context_render.mdx | 2 +-
api_docs/kbn_react_kibana_context_root.mdx | 2 +-
api_docs/kbn_react_kibana_context_styled.mdx | 2 +-
api_docs/kbn_react_kibana_context_theme.mdx | 2 +-
api_docs/kbn_react_kibana_mount.mdx | 2 +-
api_docs/kbn_repo_file_maps.mdx | 2 +-
api_docs/kbn_repo_linter.mdx | 2 +-
api_docs/kbn_repo_path.mdx | 2 +-
api_docs/kbn_repo_source_classifier.mdx | 2 +-
api_docs/kbn_reporting_common.mdx | 2 +-
api_docs/kbn_rison.mdx | 2 +-
api_docs/kbn_rrule.mdx | 2 +-
api_docs/kbn_rule_data_utils.mdx | 2 +-
api_docs/kbn_saved_objects_settings.mdx | 2 +-
api_docs/kbn_search_api_panels.devdocs.json | 1051 +++++++++++++++++
api_docs/kbn_search_api_panels.mdx | 36 +
api_docs/kbn_search_response_warnings.mdx | 2 +-
api_docs/kbn_security_solution_navigation.mdx | 2 +-
api_docs/kbn_security_solution_side_nav.mdx | 2 +-
...kbn_security_solution_storybook_config.mdx | 2 +-
.../kbn_securitysolution_autocomplete.mdx | 2 +-
api_docs/kbn_securitysolution_data_table.mdx | 2 +-
api_docs/kbn_securitysolution_ecs.mdx | 2 +-
api_docs/kbn_securitysolution_es_utils.mdx | 2 +-
...ritysolution_exception_list_components.mdx | 2 +-
api_docs/kbn_securitysolution_grouping.mdx | 2 +-
api_docs/kbn_securitysolution_hook_utils.mdx | 2 +-
..._securitysolution_io_ts_alerting_types.mdx | 2 +-
.../kbn_securitysolution_io_ts_list_types.mdx | 2 +-
api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +-
api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +-
api_docs/kbn_securitysolution_list_api.mdx | 2 +-
...curitysolution_list_constants.devdocs.json | 28 +-
.../kbn_securitysolution_list_constants.mdx | 2 +-
api_docs/kbn_securitysolution_list_hooks.mdx | 2 +-
api_docs/kbn_securitysolution_list_utils.mdx | 2 +-
api_docs/kbn_securitysolution_rules.mdx | 2 +-
api_docs/kbn_securitysolution_t_grid.mdx | 2 +-
api_docs/kbn_securitysolution_utils.mdx | 2 +-
api_docs/kbn_server_http_tools.mdx | 2 +-
api_docs/kbn_server_route_repository.mdx | 2 +-
api_docs/kbn_serverless_project_switcher.mdx | 2 +-
api_docs/kbn_serverless_storybook_config.mdx | 2 +-
api_docs/kbn_shared_svg.mdx | 2 +-
api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +-
...ared_ux_avatar_user_profile_components.mdx | 2 +-
.../kbn_shared_ux_button_exit_full_screen.mdx | 2 +-
...hared_ux_button_exit_full_screen_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +-
api_docs/kbn_shared_ux_card_no_data.mdx | 2 +-
api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +-
api_docs/kbn_shared_ux_file_context.mdx | 2 +-
api_docs/kbn_shared_ux_file_image.mdx | 2 +-
api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_file_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_file_picker.mdx | 2 +-
api_docs/kbn_shared_ux_file_types.mdx | 2 +-
api_docs/kbn_shared_ux_file_upload.mdx | 2 +-
api_docs/kbn_shared_ux_file_util.mdx | 2 +-
api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +-
.../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_markdown.mdx | 2 +-
api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +-
.../kbn_shared_ux_page_analytics_no_data.mdx | 2 +-
...shared_ux_page_analytics_no_data_mocks.mdx | 2 +-
.../kbn_shared_ux_page_kibana_no_data.mdx | 2 +-
...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +-
.../kbn_shared_ux_page_kibana_template.mdx | 2 +-
...n_shared_ux_page_kibana_template_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_page_no_data.mdx | 2 +-
.../kbn_shared_ux_page_no_data_config.mdx | 2 +-
...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +-
.../kbn_shared_ux_prompt_no_data_views.mdx | 2 +-
...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +-
api_docs/kbn_shared_ux_router.mdx | 2 +-
api_docs/kbn_shared_ux_router_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_storybook_config.mdx | 2 +-
api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +-
api_docs/kbn_shared_ux_utility.mdx | 2 +-
api_docs/kbn_slo_schema.mdx | 2 +-
api_docs/kbn_some_dev_log.mdx | 2 +-
api_docs/kbn_std.mdx | 2 +-
api_docs/kbn_stdio_dev_helpers.mdx | 2 +-
api_docs/kbn_storybook.mdx | 2 +-
api_docs/kbn_telemetry_tools.mdx | 2 +-
api_docs/kbn_test.mdx | 2 +-
api_docs/kbn_test_jest_helpers.mdx | 2 +-
api_docs/kbn_test_subj_selector.mdx | 2 +-
api_docs/kbn_text_based_editor.mdx | 2 +-
api_docs/kbn_tooling_log.mdx | 2 +-
api_docs/kbn_ts_projects.mdx | 2 +-
api_docs/kbn_typed_react_router_config.mdx | 2 +-
api_docs/kbn_ui_actions_browser.mdx | 2 +-
api_docs/kbn_ui_shared_deps_src.mdx | 2 +-
api_docs/kbn_ui_theme.mdx | 2 +-
api_docs/kbn_unified_field_list.mdx | 2 +-
api_docs/kbn_url_state.mdx | 2 +-
api_docs/kbn_use_tracked_promise.devdocs.json | 80 ++
api_docs/kbn_use_tracked_promise.mdx | 30 +
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_yarn_lock_validator.mdx | 2 +-
api_docs/kibana_overview.mdx | 2 +-
api_docs/kibana_react.devdocs.json | 176 +--
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/lists.mdx | 2 +-
api_docs/logs_shared.mdx | 2 +-
api_docs/management.mdx | 2 +-
api_docs/maps.mdx | 2 +-
api_docs/maps_ems.mdx | 2 +-
api_docs/ml.mdx | 2 +-
api_docs/monitoring.mdx | 2 +-
api_docs/monitoring_collection.mdx | 2 +-
api_docs/navigation.mdx | 2 +-
api_docs/newsfeed.mdx | 2 +-
api_docs/notifications.mdx | 2 +-
api_docs/observability.devdocs.json | 58 +-
api_docs/observability.mdx | 7 +-
.../observability_a_i_assistant.devdocs.json | 51 +
api_docs/observability_a_i_assistant.mdx | 4 +-
api_docs/observability_onboarding.mdx | 2 +-
api_docs/observability_shared.mdx | 2 +-
api_docs/osquery.mdx | 2 +-
api_docs/plugin_directory.mdx | 16 +-
api_docs/presentation_util.mdx | 2 +-
api_docs/profiling.mdx | 2 +-
api_docs/remote_clusters.mdx | 2 +-
api_docs/reporting.mdx | 2 +-
api_docs/rollup.mdx | 2 +-
api_docs/rule_registry.mdx | 2 +-
api_docs/runtime_fields.mdx | 2 +-
api_docs/saved_objects.mdx | 2 +-
api_docs/saved_objects_finder.mdx | 2 +-
api_docs/saved_objects_management.mdx | 2 +-
api_docs/saved_objects_tagging.mdx | 2 +-
api_docs/saved_objects_tagging_oss.mdx | 2 +-
api_docs/saved_search.mdx | 2 +-
api_docs/screenshot_mode.mdx | 2 +-
api_docs/screenshotting.mdx | 2 +-
api_docs/security.mdx | 2 +-
api_docs/security_solution.devdocs.json | 32 +-
api_docs/security_solution.mdx | 4 +-
api_docs/security_solution_ess.mdx | 2 +-
api_docs/security_solution_serverless.mdx | 2 +-
api_docs/serverless.mdx | 2 +-
api_docs/serverless_observability.mdx | 2 +-
api_docs/serverless_search.mdx | 2 +-
api_docs/session_view.mdx | 2 +-
api_docs/share.mdx | 2 +-
api_docs/snapshot_restore.mdx | 2 +-
api_docs/spaces.mdx | 2 +-
api_docs/stack_alerts.mdx | 2 +-
api_docs/stack_connectors.mdx | 2 +-
api_docs/task_manager.mdx | 2 +-
api_docs/telemetry.mdx | 2 +-
api_docs/telemetry_collection_manager.mdx | 2 +-
api_docs/telemetry_collection_xpack.mdx | 2 +-
api_docs/telemetry_management_section.mdx | 2 +-
api_docs/text_based_languages.mdx | 2 +-
api_docs/threat_intelligence.mdx | 2 +-
api_docs/timelines.mdx | 2 +-
api_docs/transform.mdx | 2 +-
api_docs/triggers_actions_ui.mdx | 2 +-
api_docs/ui_actions.mdx | 2 +-
api_docs/ui_actions_enhanced.mdx | 2 +-
api_docs/unified_histogram.mdx | 2 +-
api_docs/unified_search.mdx | 2 +-
api_docs/unified_search_autocomplete.mdx | 2 +-
api_docs/uptime.mdx | 2 +-
api_docs/url_forwarding.mdx | 2 +-
api_docs/usage_collection.mdx | 2 +-
api_docs/ux.mdx | 2 +-
api_docs/vis_default_editor.mdx | 2 +-
api_docs/vis_type_gauge.mdx | 2 +-
api_docs/vis_type_heatmap.mdx | 2 +-
api_docs/vis_type_pie.mdx | 2 +-
api_docs/vis_type_table.mdx | 2 +-
api_docs/vis_type_timelion.mdx | 2 +-
api_docs/vis_type_timeseries.mdx | 2 +-
api_docs/vis_type_vega.mdx | 2 +-
api_docs/vis_type_vislib.mdx | 2 +-
api_docs/vis_type_xy.mdx | 2 +-
api_docs/visualizations.mdx | 2 +-
568 files changed, 1999 insertions(+), 780 deletions(-)
create mode 100644 api_docs/kbn_search_api_panels.devdocs.json
create mode 100644 api_docs/kbn_search_api_panels.mdx
create mode 100644 api_docs/kbn_use_tracked_promise.devdocs.json
create mode 100644 api_docs/kbn_use_tracked_promise.mdx
diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx
index 174637a15a63f..17856ebe921cd 100644
--- a/api_docs/actions.mdx
+++ b/api_docs/actions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions
title: "actions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the actions plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions']
---
import actionsObj from './actions.devdocs.json';
diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx
index efad0ca51a157..5032582caca6a 100644
--- a/api_docs/advanced_settings.mdx
+++ b/api_docs/advanced_settings.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings
title: "advancedSettings"
image: https://source.unsplash.com/400x175/?github
description: API docs for the advancedSettings plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings']
---
import advancedSettingsObj from './advanced_settings.devdocs.json';
diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx
index e5cbe0c4e9ba9..3e307a5c7a1f4 100644
--- a/api_docs/aiops.mdx
+++ b/api_docs/aiops.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops
title: "aiops"
image: https://source.unsplash.com/400x175/?github
description: API docs for the aiops plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops']
---
import aiopsObj from './aiops.devdocs.json';
diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx
index a85af92331ff3..7b44781015b39 100644
--- a/api_docs/alerting.mdx
+++ b/api_docs/alerting.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting
title: "alerting"
image: https://source.unsplash.com/400x175/?github
description: API docs for the alerting plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting']
---
import alertingObj from './alerting.devdocs.json';
diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx
index 09fa69675cc98..32fe8b4984f10 100644
--- a/api_docs/apm.mdx
+++ b/api_docs/apm.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm
title: "apm"
image: https://source.unsplash.com/400x175/?github
description: API docs for the apm plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm']
---
import apmObj from './apm.devdocs.json';
diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx
index c689fcf41d291..ca4cc2845e637 100644
--- a/api_docs/asset_manager.mdx
+++ b/api_docs/asset_manager.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager
title: "assetManager"
image: https://source.unsplash.com/400x175/?github
description: API docs for the assetManager plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager']
---
import assetManagerObj from './asset_manager.devdocs.json';
diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx
index a2ea6a1b04cb3..42e988d4de670 100644
--- a/api_docs/banners.mdx
+++ b/api_docs/banners.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners
title: "banners"
image: https://source.unsplash.com/400x175/?github
description: API docs for the banners plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners']
---
import bannersObj from './banners.devdocs.json';
diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx
index 595e8ee3b09f5..aece377112e84 100644
--- a/api_docs/bfetch.mdx
+++ b/api_docs/bfetch.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch
title: "bfetch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the bfetch plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch']
---
import bfetchObj from './bfetch.devdocs.json';
diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx
index 537c941b0fd1c..12ae58eb4b12d 100644
--- a/api_docs/canvas.mdx
+++ b/api_docs/canvas.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas
title: "canvas"
image: https://source.unsplash.com/400x175/?github
description: API docs for the canvas plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas']
---
import canvasObj from './canvas.devdocs.json';
diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx
index b5766ae183e28..061d05962563c 100644
--- a/api_docs/cases.mdx
+++ b/api_docs/cases.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases
title: "cases"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cases plugin
-date: 2023-08-11
+date: 2023-08-12
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 d73c7ddb36147..dd16903b77d6a 100644
--- a/api_docs/charts.mdx
+++ b/api_docs/charts.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts
title: "charts"
image: https://source.unsplash.com/400x175/?github
description: API docs for the charts plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts']
---
import chartsObj from './charts.devdocs.json';
diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx
index ab0811e78f98d..935235458477f 100644
--- a/api_docs/cloud.mdx
+++ b/api_docs/cloud.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud
title: "cloud"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloud plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud']
---
import cloudObj from './cloud.devdocs.json';
diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx
index 8c036104f049c..27bf2097ee433 100644
--- a/api_docs/cloud_chat.mdx
+++ b/api_docs/cloud_chat.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat
title: "cloudChat"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudChat plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat']
---
import cloudChatObj from './cloud_chat.devdocs.json';
diff --git a/api_docs/cloud_chat_provider.mdx b/api_docs/cloud_chat_provider.mdx
index 602867e70c6f0..e943a5f2d411d 100644
--- a/api_docs/cloud_chat_provider.mdx
+++ b/api_docs/cloud_chat_provider.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChatProvider
title: "cloudChatProvider"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudChatProvider plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChatProvider']
---
import cloudChatProviderObj from './cloud_chat_provider.devdocs.json';
diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx
index 55b3eaed4cbdb..a095b936a9bde 100644
--- a/api_docs/cloud_data_migration.mdx
+++ b/api_docs/cloud_data_migration.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration
title: "cloudDataMigration"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudDataMigration plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration']
---
import cloudDataMigrationObj from './cloud_data_migration.devdocs.json';
diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx
index 512acba29356d..e353fcd50d85f 100644
--- a/api_docs/cloud_defend.mdx
+++ b/api_docs/cloud_defend.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend
title: "cloudDefend"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudDefend plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend']
---
import cloudDefendObj from './cloud_defend.devdocs.json';
diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx
index 01cb7954ec407..d18922ba004e3 100644
--- a/api_docs/cloud_experiments.mdx
+++ b/api_docs/cloud_experiments.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments
title: "cloudExperiments"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudExperiments plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments']
---
import cloudExperimentsObj from './cloud_experiments.devdocs.json';
diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx
index 6c1216fdfa640..73ea5b27db599 100644
--- a/api_docs/cloud_security_posture.mdx
+++ b/api_docs/cloud_security_posture.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture
title: "cloudSecurityPosture"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudSecurityPosture plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture']
---
import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json';
diff --git a/api_docs/console.mdx b/api_docs/console.mdx
index ac2194327cc0e..35c499f410b9e 100644
--- a/api_docs/console.mdx
+++ b/api_docs/console.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console
title: "console"
image: https://source.unsplash.com/400x175/?github
description: API docs for the console plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console']
---
import consoleObj from './console.devdocs.json';
diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx
index 24b6f5b9d11ec..618ea86e4010e 100644
--- a/api_docs/content_management.mdx
+++ b/api_docs/content_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement
title: "contentManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the contentManagement plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement']
---
import contentManagementObj from './content_management.devdocs.json';
diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx
index 9d227c1b74d7d..66f9a10769162 100644
--- a/api_docs/controls.mdx
+++ b/api_docs/controls.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls
title: "controls"
image: https://source.unsplash.com/400x175/?github
description: API docs for the controls plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls']
---
import controlsObj from './controls.devdocs.json';
diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx
index 7ff323025db85..de4999c537f01 100644
--- a/api_docs/custom_integrations.mdx
+++ b/api_docs/custom_integrations.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations
title: "customIntegrations"
image: https://source.unsplash.com/400x175/?github
description: API docs for the customIntegrations plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations']
---
import customIntegrationsObj from './custom_integrations.devdocs.json';
diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx
index 7d198687d3c1d..7d102ce93fa9e 100644
--- a/api_docs/dashboard.mdx
+++ b/api_docs/dashboard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard
title: "dashboard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dashboard plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard']
---
import dashboardObj from './dashboard.devdocs.json';
diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx
index eccc4eb77cda9..8b7859d74fbf8 100644
--- a/api_docs/dashboard_enhanced.mdx
+++ b/api_docs/dashboard_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced
title: "dashboardEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dashboardEnhanced plugin
-date: 2023-08-11
+date: 2023-08-12
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 167764358fe78..bfb4e9a5a1875 100644
--- a/api_docs/data.mdx
+++ b/api_docs/data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data
title: "data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the data plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data']
---
import dataObj from './data.devdocs.json';
diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx
index 4d813a7c64e46..671324656d6fc 100644
--- a/api_docs/data_query.mdx
+++ b/api_docs/data_query.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query
title: "data.query"
image: https://source.unsplash.com/400x175/?github
description: API docs for the data.query plugin
-date: 2023-08-11
+date: 2023-08-12
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 13f8b1421e57d..654fefabaf5bb 100644
--- a/api_docs/data_search.mdx
+++ b/api_docs/data_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search
title: "data.search"
image: https://source.unsplash.com/400x175/?github
description: API docs for the data.search plugin
-date: 2023-08-11
+date: 2023-08-12
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 36947c0613476..beb040322cfd0 100644
--- a/api_docs/data_view_editor.mdx
+++ b/api_docs/data_view_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor
title: "dataViewEditor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViewEditor plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor']
---
import dataViewEditorObj from './data_view_editor.devdocs.json';
diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx
index 23b344e0db157..6088fe37aed0e 100644
--- a/api_docs/data_view_field_editor.mdx
+++ b/api_docs/data_view_field_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor
title: "dataViewFieldEditor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViewFieldEditor plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor']
---
import dataViewFieldEditorObj from './data_view_field_editor.devdocs.json';
diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx
index 71fff17678fac..ab5d1a743ff5b 100644
--- a/api_docs/data_view_management.mdx
+++ b/api_docs/data_view_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement
title: "dataViewManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViewManagement plugin
-date: 2023-08-11
+date: 2023-08-12
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 08ff8f217cd2c..1474c557835f3 100644
--- a/api_docs/data_views.mdx
+++ b/api_docs/data_views.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews
title: "dataViews"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViews plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews']
---
import dataViewsObj from './data_views.devdocs.json';
diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx
index efcfa6e156e80..6aa4b630799e1 100644
--- a/api_docs/data_visualizer.mdx
+++ b/api_docs/data_visualizer.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer
title: "dataVisualizer"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataVisualizer plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer']
---
import dataVisualizerObj from './data_visualizer.devdocs.json';
diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx
index 2ac6dd1ac9336..45c7bd7ea5fde 100644
--- a/api_docs/deprecations_by_api.mdx
+++ b/api_docs/deprecations_by_api.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi
slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api
title: Deprecated API usage by API
description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by.
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
@@ -21,9 +21,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | @kbn/es-query, @kbn/visualization-ui-components, observability, securitySolution, timelines, lists, threatIntelligence, savedSearch, dataViews, savedObjectsManagement, unifiedSearch, controls, @kbn/unified-field-list, @kbn/event-annotation-components, lens, triggersActionsUi, ml, logsShared, visTypeTimeseries, apm, exploratoryView, fleet, dataVisualizer, stackAlerts, infra, canvas, enterpriseSearch, graph, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, data | - |
| | @kbn/es-query, @kbn/visualization-ui-components, observability, securitySolution, timelines, lists, threatIntelligence, savedSearch, dataViews, savedObjectsManagement, unifiedSearch, controls, @kbn/unified-field-list, @kbn/event-annotation-components, lens, triggersActionsUi, ml, logsShared, visTypeTimeseries, apm, exploratoryView, fleet, dataVisualizer, stackAlerts, infra, canvas, enterpriseSearch, graph, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, data | - |
| | @kbn/es-query, @kbn/visualization-ui-components, observability, securitySolution, timelines, lists, threatIntelligence, savedSearch, data, savedObjectsManagement, unifiedSearch, controls, @kbn/unified-field-list, @kbn/event-annotation-components, lens, triggersActionsUi, ml, logsShared, visTypeTimeseries, apm, exploratoryView, fleet, dataVisualizer, stackAlerts, infra, canvas, enterpriseSearch, graph, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega | - |
-| | inspector, data, advancedSettings, savedObjects, embeddable, dataViewEditor, unifiedSearch, visualizations, controls, dashboard, licensing, savedObjectsTagging, eventAnnotation, dataViewFieldEditor, lens, security, triggersActionsUi, cases, @kbn/ml-date-picker, aiops, observabilityShared, discover, exploratoryView, fleet, maps, telemetry, dataVisualizer, ml, observability, banners, reporting, timelines, cloudSecurityPosture, runtimeFields, indexManagement, dashboardEnhanced, imageEmbeddable, graph, monitoring, securitySolution, synthetics, transform, uptime, cloudLinks, console, dataViewManagement, filesManagement, uiActions, visTypeVislib | - |
+| | inspector, data, advancedSettings, savedObjects, embeddable, dataViewEditor, unifiedSearch, visualizations, controls, dashboard, licensing, savedObjectsTagging, eventAnnotation, dataViewFieldEditor, lens, security, triggersActionsUi, cases, @kbn/ml-date-picker, aiops, observabilityShared, exploratoryView, fleet, maps, telemetry, dataVisualizer, ml, observability, banners, reporting, timelines, cloudSecurityPosture, runtimeFields, indexManagement, dashboardEnhanced, imageEmbeddable, graph, monitoring, securitySolution, synthetics, transform, uptime, cloudLinks, console, dataViewManagement, filesManagement, uiActions, visTypeVislib | - |
| | home, data, esUiShared, savedObjectsManagement, exploratoryView, fleet, ml, observability, apm, indexLifecycleManagement, observabilityOnboarding, synthetics, upgradeAssistant, uptime, ux, kibanaOverview | - |
-| | share, uiActions, guidedOnboarding, home, management, data, advancedSettings, spaces, savedObjects, visualizations, serverless, controls, dashboard, savedObjectsTagging, expressionXY, lens, expressionMetricVis, expressionGauge, security, alerting, triggersActionsUi, cases, aiops, discover, exploratoryView, observabilityAIAssistant, fleet, maps, licenseManagement, dataVisualizer, ml, observability, infra, profiling, apm, expressionImage, expressionMetric, expressionError, expressionRevealImage, expressionRepeatImage, expressionShape, indexManagement, crossClusterReplication, enterpriseSearch, globalSearchBar, graph, grokdebugger, indexLifecycleManagement, ingestPipelines, logstash, monitoring, observabilityOnboarding, osquery, devTools, painlessLab, remoteClusters, rollup, searchprofiler, newsfeed, securitySolution, serverlessSearch, snapshotRestore, synthetics, transform, upgradeAssistant, uptime, ux, watcher, cloudDataMigration, console, dataViewManagement, filesManagement, kibanaOverview, visDefaultEditor, expressionHeatmap, expressionLegacyMetricVis, expressionPartitionVis, expressionTagcloud, visTypeTable, visTypeTimelion, visTypeTimeseries, visTypeVega, visTypeVislib | - |
+| | share, uiActions, guidedOnboarding, home, management, advancedSettings, spaces, savedObjects, serverless, visualizations, controls, dashboard, savedObjectsTagging, expressionXY, lens, expressionMetricVis, expressionGauge, security, alerting, triggersActionsUi, cases, aiops, observabilityAIAssistant, exploratoryView, fleet, maps, licenseManagement, dataVisualizer, ml, observability, infra, profiling, apm, expressionImage, expressionMetric, expressionError, expressionRevealImage, expressionRepeatImage, expressionShape, indexManagement, crossClusterReplication, enterpriseSearch, globalSearchBar, graph, grokdebugger, indexLifecycleManagement, ingestPipelines, logstash, monitoring, observabilityOnboarding, osquery, devTools, painlessLab, remoteClusters, rollup, searchprofiler, newsfeed, securitySolution, serverlessSearch, snapshotRestore, synthetics, transform, upgradeAssistant, uptime, ux, watcher, cloudDataMigration, console, filesManagement, kibanaOverview, visDefaultEditor, expressionHeatmap, expressionLegacyMetricVis, expressionPartitionVis, expressionTagcloud, visTypeTable, visTypeTimelion, visTypeTimeseries, visTypeVega, visTypeVislib | - |
| | encryptedSavedObjects, actions, data, ml, logstash, securitySolution, cloudChat | - |
| | actions, ml, savedObjectsTagging, enterpriseSearch | - |
| | @kbn/core-saved-objects-browser-internal, @kbn/core, savedObjects, presentationUtil, visualizations, aiops, ml, dataVisualizer, dashboardEnhanced, graph, lens, securitySolution, eventAnnotation, @kbn/core-saved-objects-browser-mocks | - |
diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx
index 821e19dfb5a77..812278521f302 100644
--- a/api_docs/deprecations_by_plugin.mdx
+++ b/api_docs/deprecations_by_plugin.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin
slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin
title: Deprecated API usage by plugin
description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by.
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
@@ -592,7 +592,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [inspector_stats.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/search_source/inspect/inspector_stats.ts#:~:text=title), [response_writer.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/tabify/response_writer.ts#:~:text=title), [field.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/param_types/field.ts#:~:text=title), [get_display_value.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/query/filter_manager/lib/get_display_value.ts#:~:text=title), [painless_error.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/errors/painless_error.tsx#:~:text=title), [agg_config.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_config.test.ts#:~:text=title), [_terms_other_bucket_helper.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/_terms_other_bucket_helper.test.ts#:~:text=title), [multi_terms.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/multi_terms.test.ts#:~:text=title), [multi_terms.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/multi_terms.test.ts#:~:text=title), [rare_terms.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/rare_terms.test.ts#:~:text=title)+ 3 more | - |
| | [search_interceptor.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/search_interceptor/search_interceptor.ts#:~:text=toMountPoint), [search_interceptor.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/search_interceptor/search_interceptor.ts#:~:text=toMountPoint), [search_interceptor.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/search_interceptor/search_interceptor.ts#:~:text=toMountPoint), [search_interceptor.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/search_interceptor/search_interceptor.ts#:~:text=toMountPoint), [shard_failure_open_modal_button.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/shard_failure_modal/shard_failure_open_modal_button.tsx#:~:text=toMountPoint), [shard_failure_open_modal_button.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/shard_failure_modal/shard_failure_open_modal_button.tsx#:~:text=toMountPoint), [handle_warnings.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/fetch/handle_warnings.tsx#:~:text=toMountPoint), [handle_warnings.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/fetch/handle_warnings.tsx#:~:text=toMountPoint), [delete_button.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/sessions_mgmt/components/actions/delete_button.tsx#:~:text=toMountPoint), [delete_button.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/sessions_mgmt/components/actions/delete_button.tsx#:~:text=toMountPoint)+ 8 more | - |
| | [get_columns.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/sessions_mgmt/lib/get_columns.tsx#:~:text=RedirectAppLinks), [get_columns.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/sessions_mgmt/lib/get_columns.tsx#:~:text=RedirectAppLinks), [get_columns.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/sessions_mgmt/lib/get_columns.tsx#:~:text=RedirectAppLinks), [connected_search_session_indicator.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/session_indicator/connected_search_session_indicator/connected_search_session_indicator.tsx#:~:text=RedirectAppLinks), [connected_search_session_indicator.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/session_indicator/connected_search_session_indicator/connected_search_session_indicator.tsx#:~:text=RedirectAppLinks), [connected_search_session_indicator.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/session_indicator/connected_search_session_indicator/connected_search_session_indicator.tsx#:~:text=RedirectAppLinks) | - |
-| | [main.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/sessions_mgmt/components/main.tsx#:~:text=KibanaThemeProvider), [main.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/sessions_mgmt/components/main.tsx#:~:text=KibanaThemeProvider), [main.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/sessions_mgmt/components/main.tsx#:~:text=KibanaThemeProvider) | - |
| | [session_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/search/session/session_service.ts#:~:text=authc) | - |
| | [data_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/utils/table_inspector_view/components/data_table.tsx#:~:text=executeTriggerActions), [data_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/utils/table_inspector_view/components/data_table.tsx#:~:text=executeTriggerActions) | - |
| | [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/persistable_state.ts#:~:text=SavedObjectReference) | - |
@@ -604,7 +603,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| Deprecated API | Reference location(s) | Remove By |
| ---------------|-----------|-----------|
-| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_editor/public/shared_imports.ts#:~:text=toMountPoint), [open_editor.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_editor/public/open_editor.tsx#:~:text=toMountPoint), [open_editor.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_editor/public/open_editor.tsx#:~:text=toMountPoint) | - |
+| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_editor/public/shared_imports.ts#:~:text=toMountPoint) | - |
@@ -612,7 +611,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| Deprecated API | Reference location(s) | Remove By |
| ---------------|-----------|-----------|
-| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_field_editor/public/shared_imports.ts#:~:text=toMountPoint), [open_delete_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_field_editor/public/open_delete_modal.tsx#:~:text=toMountPoint), [open_delete_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_field_editor/public/open_delete_modal.tsx#:~:text=toMountPoint), [open_editor.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_field_editor/public/open_editor.tsx#:~:text=toMountPoint), [open_editor.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_field_editor/public/open_editor.tsx#:~:text=toMountPoint) | - |
+| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_field_editor/public/shared_imports.ts#:~:text=toMountPoint), [open_delete_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_field_editor/public/open_delete_modal.tsx#:~:text=toMountPoint), [open_delete_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_field_editor/public/open_delete_modal.tsx#:~:text=toMountPoint) | - |
@@ -633,7 +632,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/source_filters_table/components/table/table.tsx#:~:text=getNonScriptedFields), [edit_index_pattern.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern.tsx#:~:text=getNonScriptedFields), [edit_index_pattern.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern.tsx#:~:text=getNonScriptedFields), [edit_index_pattern.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern.tsx#:~:text=getNonScriptedFields), [edit_index_pattern.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern.tsx#:~:text=getNonScriptedFields) | - |
| | [scripted_fields_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx#:~:text=getScriptedFields) | - |
| | [table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/indexed_fields_table/components/table/table.tsx#:~:text=toMountPoint), [table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/indexed_fields_table/components/table/table.tsx#:~:text=toMountPoint), [remove_data_view.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/remove_data_view.tsx#:~:text=toMountPoint), [remove_data_view.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/remove_data_view.tsx#:~:text=toMountPoint) | - |
-| | [mount_management_section.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/mount_management_section.tsx#:~:text=KibanaThemeProvider), [mount_management_section.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/mount_management_section.tsx#:~:text=KibanaThemeProvider), [mount_management_section.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/mount_management_section.tsx#:~:text=KibanaThemeProvider) | - |
@@ -686,8 +684,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [saved_search_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx#:~:text=create), [saved_search_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx#:~:text=create) | - |
| | [saved_search_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx#:~:text=create), [saved_search_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx#:~:text=create) | - |
| | [fetch_hits_in_interval.ts](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/context/utils/fetch_hits_in_interval.ts#:~:text=EsQuerySearchAfter), [fetch_hits_in_interval.ts](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/context/utils/fetch_hits_in_interval.ts#:~:text=EsQuerySearchAfter), [get_es_query_search_after.ts](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/context/utils/get_es_query_search_after.ts#:~:text=EsQuerySearchAfter), [get_es_query_search_after.ts](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/context/utils/get_es_query_search_after.ts#:~:text=EsQuerySearchAfter), [get_es_query_search_after.ts](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/context/utils/get_es_query_search_after.ts#:~:text=EsQuerySearchAfter) | - |
-| | [use_alert_results_toast.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/main/hooks/use_alert_results_toast.tsx#:~:text=toMountPoint), [use_alert_results_toast.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/main/hooks/use_alert_results_toast.tsx#:~:text=toMountPoint), [use_context_app_fetch.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx#:~:text=toMountPoint), [use_context_app_fetch.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx#:~:text=toMountPoint), [use_context_app_fetch.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx#:~:text=toMountPoint), [use_context_app_fetch.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx#:~:text=toMountPoint), [not_found_route.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/not_found/not_found_route.tsx#:~:text=toMountPoint), [not_found_route.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/not_found/not_found_route.tsx#:~:text=toMountPoint), [view_alert_utils.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/view_alert/view_alert_utils.tsx#:~:text=toMountPoint), [view_alert_utils.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/view_alert/view_alert_utils.tsx#:~:text=toMountPoint)+ 4 more | - |
-| | [saved_search_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx#:~:text=KibanaThemeProvider), [saved_search_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx#:~:text=KibanaThemeProvider), [saved_search_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx#:~:text=KibanaThemeProvider), [saved_search_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx#:~:text=KibanaThemeProvider), [saved_search_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx#:~:text=KibanaThemeProvider), [show_open_search_panel.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/main/components/top_nav/show_open_search_panel.tsx#:~:text=KibanaThemeProvider), [show_open_search_panel.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/main/components/top_nav/show_open_search_panel.tsx#:~:text=KibanaThemeProvider), [show_open_search_panel.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/main/components/top_nav/show_open_search_panel.tsx#:~:text=KibanaThemeProvider), [open_alerts_popover.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx#:~:text=KibanaThemeProvider), [open_alerts_popover.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx#:~:text=KibanaThemeProvider)+ 1 more | - |
| | [on_save_search.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx#:~:text=SavedObjectSaveModal), [on_save_search.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 |
| | [saved_search_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx#:~:text=executeTriggerActions), [saved_search_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx#:~:text=executeTriggerActions), [search_embeddable_factory.ts](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/embeddable/search_embeddable_factory.ts#:~:text=executeTriggerActions), [plugin.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/plugin.tsx#:~:text=executeTriggerActions) | - |
| | [discover_state.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/main/services/discover_state.test.ts#:~:text=savedObjects) | - |
@@ -1525,7 +1521,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/
| | [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes), [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes) | - |
| | [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=SavedObject), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=SavedObject), [user_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/user_risk_score_dashboards.ts#:~:text=SavedObject), [user_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/user_risk_score_dashboards.ts#:~:text=SavedObject) | - |
| | [timelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/timelines.ts#:~:text=convertToMultiNamespaceTypeVersion), [notes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/notes.ts#:~:text=convertToMultiNamespaceTypeVersion), [pinned_events.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/pinned_events.ts#:~:text=convertToMultiNamespaceTypeVersion), [legacy_saved_object_mappings.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_saved_object_mappings.ts#:~:text=convertToMultiNamespaceTypeVersion) | - |
-| | [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [receiver.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [receiver.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID)+ 32 more | - |
+| | [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [manifest_manager.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [manifest_manager.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID)+ 32 more | - |
| | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME) | - |
| | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION) | - |
| | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/view/components/form.tsx#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/view/components/form.tsx#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/view/utils.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/view/utils.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [service_actions.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/service/service_actions.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [service_actions.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/service/service_actions.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [service_actions.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/service/service_actions.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID)+ 30 more | - |
diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx
index baf4c031c779a..a00e1bf100fc5 100644
--- a/api_docs/deprecations_by_team.mdx
+++ b/api_docs/deprecations_by_team.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam
slug: /kibana-dev-docs/api-meta/deprecations-due-by-team
title: Deprecated APIs due to be removed, by team
description: Lists the teams that are referencing deprecated APIs with a remove by date.
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx
index 8768fdc466d4f..fc4d9d160dbd5 100644
--- a/api_docs/dev_tools.mdx
+++ b/api_docs/dev_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools
title: "devTools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the devTools plugin
-date: 2023-08-11
+date: 2023-08-12
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 e11eee9229f3a..473a880b71dd4 100644
--- a/api_docs/discover.mdx
+++ b/api_docs/discover.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover
title: "discover"
image: https://source.unsplash.com/400x175/?github
description: API docs for the discover plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover']
---
import discoverObj from './discover.devdocs.json';
diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx
index 41d22a88e2b75..4298c41aec262 100644
--- a/api_docs/discover_enhanced.mdx
+++ b/api_docs/discover_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced
title: "discoverEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the discoverEnhanced plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced']
---
import discoverEnhancedObj from './discover_enhanced.devdocs.json';
diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx
index 3707e235a22a5..cd861c9a8984f 100644
--- a/api_docs/ecs_data_quality_dashboard.mdx
+++ b/api_docs/ecs_data_quality_dashboard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard
title: "ecsDataQualityDashboard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ecsDataQualityDashboard plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard']
---
import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json';
diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx
index a0cc256050116..2a5d801de5008 100644
--- a/api_docs/embeddable.mdx
+++ b/api_docs/embeddable.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable
title: "embeddable"
image: https://source.unsplash.com/400x175/?github
description: API docs for the embeddable plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable']
---
import embeddableObj from './embeddable.devdocs.json';
diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx
index dc872247c08b3..3f2308e1b1bc8 100644
--- a/api_docs/embeddable_enhanced.mdx
+++ b/api_docs/embeddable_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced
title: "embeddableEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the embeddableEnhanced plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced']
---
import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json';
diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx
index b8ae3f70429f6..2c66688d2fc10 100644
--- a/api_docs/encrypted_saved_objects.mdx
+++ b/api_docs/encrypted_saved_objects.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects
title: "encryptedSavedObjects"
image: https://source.unsplash.com/400x175/?github
description: API docs for the encryptedSavedObjects plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects']
---
import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json';
diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx
index 4d918c25e3199..7169f1079bb62 100644
--- a/api_docs/enterprise_search.mdx
+++ b/api_docs/enterprise_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch
title: "enterpriseSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the enterpriseSearch plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch']
---
import enterpriseSearchObj from './enterprise_search.devdocs.json';
diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx
index ae1fde9c546da..87a4a39be1212 100644
--- a/api_docs/es_ui_shared.mdx
+++ b/api_docs/es_ui_shared.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared
title: "esUiShared"
image: https://source.unsplash.com/400x175/?github
description: API docs for the esUiShared plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared']
---
import esUiSharedObj from './es_ui_shared.devdocs.json';
diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx
index 9f8dc9f5b9b91..584412f527478 100644
--- a/api_docs/event_annotation.mdx
+++ b/api_docs/event_annotation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation
title: "eventAnnotation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the eventAnnotation plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation']
---
import eventAnnotationObj from './event_annotation.devdocs.json';
diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx
index 00143bfced399..3170f7afd3a52 100644
--- a/api_docs/event_log.mdx
+++ b/api_docs/event_log.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog
title: "eventLog"
image: https://source.unsplash.com/400x175/?github
description: API docs for the eventLog plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog']
---
import eventLogObj from './event_log.devdocs.json';
diff --git a/api_docs/exploratory_view.devdocs.json b/api_docs/exploratory_view.devdocs.json
index 7a3538c920f49..c1a1a39096b3e 100644
--- a/api_docs/exploratory_view.devdocs.json
+++ b/api_docs/exploratory_view.devdocs.json
@@ -1432,6 +1432,26 @@
"path": "x-pack/plugins/exploratory_view/public/plugin.ts",
"deprecated": false,
"trackAdoption": false
+ },
+ {
+ "parentPluginId": "exploratoryView",
+ "id": "def-public.ExploratoryViewPublicPluginsStart.observabilityAIAssistant",
+ "type": "Object",
+ "tags": [],
+ "label": "observabilityAIAssistant",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ObservabilityAIAssistantPluginStart",
+ "text": "ObservabilityAIAssistantPluginStart"
+ }
+ ],
+ "path": "x-pack/plugins/exploratory_view/public/plugin.ts",
+ "deprecated": false,
+ "trackAdoption": false
}
],
"initialIsOpen": false
diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx
index 57f0777fa174d..65be11f65e8e8 100644
--- a/api_docs/exploratory_view.mdx
+++ b/api_docs/exploratory_view.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView
title: "exploratoryView"
image: https://source.unsplash.com/400x175/?github
description: API docs for the exploratoryView plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'exploratoryView']
---
import exploratoryViewObj from './exploratory_view.devdocs.json';
@@ -21,7 +21,7 @@ Contact [@elastic/uptime](https://github.com/orgs/elastic/teams/uptime) for ques
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 131 | 1 | 131 | 14 |
+| 132 | 1 | 132 | 14 |
## Client
diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx
index 2fb84dc9ccdd8..24f86c685e8e7 100644
--- a/api_docs/expression_error.mdx
+++ b/api_docs/expression_error.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError
title: "expressionError"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionError plugin
-date: 2023-08-11
+date: 2023-08-12
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 f8ef4062ffbc4..c5584c6f6ace0 100644
--- a/api_docs/expression_gauge.mdx
+++ b/api_docs/expression_gauge.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge
title: "expressionGauge"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionGauge plugin
-date: 2023-08-11
+date: 2023-08-12
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 ce5126b93e90f..b60d9e3816a47 100644
--- a/api_docs/expression_heatmap.mdx
+++ b/api_docs/expression_heatmap.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap
title: "expressionHeatmap"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionHeatmap plugin
-date: 2023-08-11
+date: 2023-08-12
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 a020a2e66e00a..a4819616163a0 100644
--- a/api_docs/expression_image.mdx
+++ b/api_docs/expression_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage
title: "expressionImage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionImage plugin
-date: 2023-08-11
+date: 2023-08-12
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 ef48277ab9cd4..ffe788d1ca262 100644
--- a/api_docs/expression_legacy_metric_vis.mdx
+++ b/api_docs/expression_legacy_metric_vis.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis
title: "expressionLegacyMetricVis"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionLegacyMetricVis plugin
-date: 2023-08-11
+date: 2023-08-12
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 1b977292523ad..93339efe91e9f 100644
--- a/api_docs/expression_metric.mdx
+++ b/api_docs/expression_metric.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric
title: "expressionMetric"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionMetric plugin
-date: 2023-08-11
+date: 2023-08-12
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 642b74242adc9..296e9d62d25a5 100644
--- a/api_docs/expression_metric_vis.mdx
+++ b/api_docs/expression_metric_vis.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis
title: "expressionMetricVis"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionMetricVis plugin
-date: 2023-08-11
+date: 2023-08-12
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 c638effc16094..dba1204f94bf0 100644
--- a/api_docs/expression_partition_vis.mdx
+++ b/api_docs/expression_partition_vis.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis
title: "expressionPartitionVis"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionPartitionVis plugin
-date: 2023-08-11
+date: 2023-08-12
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 137582ef439e9..7359fe28cc5b3 100644
--- a/api_docs/expression_repeat_image.mdx
+++ b/api_docs/expression_repeat_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage
title: "expressionRepeatImage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionRepeatImage plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage']
---
import expressionRepeatImageObj from './expression_repeat_image.devdocs.json';
diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx
index 09c931b8925de..9bfaa0ac3ed65 100644
--- a/api_docs/expression_reveal_image.mdx
+++ b/api_docs/expression_reveal_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage
title: "expressionRevealImage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionRevealImage plugin
-date: 2023-08-11
+date: 2023-08-12
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 f8e2d01bb322b..ff3c56c425a87 100644
--- a/api_docs/expression_shape.mdx
+++ b/api_docs/expression_shape.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape
title: "expressionShape"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionShape plugin
-date: 2023-08-11
+date: 2023-08-12
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 41489f6ac5068..4c75c02c5e341 100644
--- a/api_docs/expression_tagcloud.mdx
+++ b/api_docs/expression_tagcloud.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud
title: "expressionTagcloud"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionTagcloud plugin
-date: 2023-08-11
+date: 2023-08-12
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 1bd60e3e92a56..df06601e9f362 100644
--- a/api_docs/expression_x_y.mdx
+++ b/api_docs/expression_x_y.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY
title: "expressionXY"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionXY plugin
-date: 2023-08-11
+date: 2023-08-12
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 759c21715f053..3410183feb536 100644
--- a/api_docs/expressions.mdx
+++ b/api_docs/expressions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions
title: "expressions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressions plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions']
---
import expressionsObj from './expressions.devdocs.json';
diff --git a/api_docs/features.mdx b/api_docs/features.mdx
index 593b4dddf7d5f..758f4c495f268 100644
--- a/api_docs/features.mdx
+++ b/api_docs/features.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features
title: "features"
image: https://source.unsplash.com/400x175/?github
description: API docs for the features plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features']
---
import featuresObj from './features.devdocs.json';
diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx
index 9c3b51afd75eb..88695b71852a4 100644
--- a/api_docs/field_formats.mdx
+++ b/api_docs/field_formats.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats
title: "fieldFormats"
image: https://source.unsplash.com/400x175/?github
description: API docs for the fieldFormats plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats']
---
import fieldFormatsObj from './field_formats.devdocs.json';
diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx
index cc71ba9086d31..7fc380dd74812 100644
--- a/api_docs/file_upload.mdx
+++ b/api_docs/file_upload.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload
title: "fileUpload"
image: https://source.unsplash.com/400x175/?github
description: API docs for the fileUpload plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload']
---
import fileUploadObj from './file_upload.devdocs.json';
diff --git a/api_docs/files.mdx b/api_docs/files.mdx
index 5ad3f34a0734b..b0084dcecd3f6 100644
--- a/api_docs/files.mdx
+++ b/api_docs/files.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files
title: "files"
image: https://source.unsplash.com/400x175/?github
description: API docs for the files plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files']
---
import filesObj from './files.devdocs.json';
diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx
index a059a665e7452..577b94c7a8bb2 100644
--- a/api_docs/files_management.mdx
+++ b/api_docs/files_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement
title: "filesManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the filesManagement plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement']
---
import filesManagementObj from './files_management.devdocs.json';
diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx
index dbbb11c5a8b8b..16807b96e5927 100644
--- a/api_docs/fleet.mdx
+++ b/api_docs/fleet.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet
title: "fleet"
image: https://source.unsplash.com/400x175/?github
description: API docs for the fleet plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet']
---
import fleetObj from './fleet.devdocs.json';
diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx
index 7af13b9297f0c..569b9a96e275a 100644
--- a/api_docs/global_search.mdx
+++ b/api_docs/global_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch
title: "globalSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the globalSearch plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch']
---
import globalSearchObj from './global_search.devdocs.json';
diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx
index ae8f7589e3594..e4138cb9e1b7a 100644
--- a/api_docs/guided_onboarding.mdx
+++ b/api_docs/guided_onboarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding
title: "guidedOnboarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the guidedOnboarding plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding']
---
import guidedOnboardingObj from './guided_onboarding.devdocs.json';
diff --git a/api_docs/home.mdx b/api_docs/home.mdx
index 1e62c19553684..c1bbf9e757f55 100644
--- a/api_docs/home.mdx
+++ b/api_docs/home.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home
title: "home"
image: https://source.unsplash.com/400x175/?github
description: API docs for the home plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home']
---
import homeObj from './home.devdocs.json';
diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx
index c2bb2169499d5..f247c8b693566 100644
--- a/api_docs/image_embeddable.mdx
+++ b/api_docs/image_embeddable.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable
title: "imageEmbeddable"
image: https://source.unsplash.com/400x175/?github
description: API docs for the imageEmbeddable plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable']
---
import imageEmbeddableObj from './image_embeddable.devdocs.json';
diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx
index 2a66e673fbbae..93d3969ada2db 100644
--- a/api_docs/index_lifecycle_management.mdx
+++ b/api_docs/index_lifecycle_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement
title: "indexLifecycleManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the indexLifecycleManagement plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement']
---
import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json';
diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx
index 2ee61cb7882ba..0b018ec027eb5 100644
--- a/api_docs/index_management.mdx
+++ b/api_docs/index_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement
title: "indexManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the indexManagement plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement']
---
import indexManagementObj from './index_management.devdocs.json';
diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx
index b09189552053e..c8f983c27b11f 100644
--- a/api_docs/infra.mdx
+++ b/api_docs/infra.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra
title: "infra"
image: https://source.unsplash.com/400x175/?github
description: API docs for the infra plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra']
---
import infraObj from './infra.devdocs.json';
diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx
index d2abcf38dba77..b9a1b2ee2047e 100644
--- a/api_docs/inspector.mdx
+++ b/api_docs/inspector.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector
title: "inspector"
image: https://source.unsplash.com/400x175/?github
description: API docs for the inspector plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector']
---
import inspectorObj from './inspector.devdocs.json';
diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx
index 4d349dce5e07b..e529820ae43fd 100644
--- a/api_docs/interactive_setup.mdx
+++ b/api_docs/interactive_setup.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup
title: "interactiveSetup"
image: https://source.unsplash.com/400x175/?github
description: API docs for the interactiveSetup plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup']
---
import interactiveSetupObj from './interactive_setup.devdocs.json';
diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx
index cb29923a9f011..09279e9dbb2c6 100644
--- a/api_docs/kbn_ace.mdx
+++ b/api_docs/kbn_ace.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace
title: "@kbn/ace"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ace plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace']
---
import kbnAceObj from './kbn_ace.devdocs.json';
diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx
index 39b40403ead73..0109005a05701 100644
--- a/api_docs/kbn_aiops_components.mdx
+++ b/api_docs/kbn_aiops_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components
title: "@kbn/aiops-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/aiops-components plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components']
---
import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json';
diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx
index c688a3102492d..03a193e12b874 100644
--- a/api_docs/kbn_aiops_utils.mdx
+++ b/api_docs/kbn_aiops_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils
title: "@kbn/aiops-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/aiops-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils']
---
import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json';
diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx
index 019e2d221f462..cc967cc6c4580 100644
--- a/api_docs/kbn_alerting_state_types.mdx
+++ b/api_docs/kbn_alerting_state_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types
title: "@kbn/alerting-state-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/alerting-state-types plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types']
---
import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json';
diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx
index 24a3b6a8fe2bf..8b3ee6f788cff 100644
--- a/api_docs/kbn_alerts_as_data_utils.mdx
+++ b/api_docs/kbn_alerts_as_data_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils
title: "@kbn/alerts-as-data-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/alerts-as-data-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils']
---
import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json';
diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx
index 602f8fff06f4c..101293525411c 100644
--- a/api_docs/kbn_alerts_ui_shared.mdx
+++ b/api_docs/kbn_alerts_ui_shared.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared
title: "@kbn/alerts-ui-shared"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/alerts-ui-shared plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared']
---
import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json';
diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx
index 3799e21c31770..47eb73ce0c742 100644
--- a/api_docs/kbn_analytics.mdx
+++ b/api_docs/kbn_analytics.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics
title: "@kbn/analytics"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics']
---
import kbnAnalyticsObj from './kbn_analytics.devdocs.json';
diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx
index 08b78279c6021..061fd0e470d1e 100644
--- a/api_docs/kbn_analytics_client.mdx
+++ b/api_docs/kbn_analytics_client.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client
title: "@kbn/analytics-client"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-client plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client']
---
import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
index 8d2a0dc59c7a0..742909bdbaba9 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser
title: "@kbn/analytics-shippers-elastic-v3-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser']
---
import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
index 4fa7b3a9b54a3..af1dd325f1e6e 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common
title: "@kbn/analytics-shippers-elastic-v3-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common']
---
import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
index acea057c01244..1656a9ca990d7 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server
title: "@kbn/analytics-shippers-elastic-v3-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server']
---
import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx
index a1aadb4678092..7b206203c0c01 100644
--- a/api_docs/kbn_analytics_shippers_fullstory.mdx
+++ b/api_docs/kbn_analytics_shippers_fullstory.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory
title: "@kbn/analytics-shippers-fullstory"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-fullstory plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory']
---
import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx
index da337f1c10801..82e0823d1b34d 100644
--- a/api_docs/kbn_analytics_shippers_gainsight.mdx
+++ b/api_docs/kbn_analytics_shippers_gainsight.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight
title: "@kbn/analytics-shippers-gainsight"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-gainsight plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight']
---
import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json';
diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx
index ebfcb57436aec..05cb3b66b3b5a 100644
--- a/api_docs/kbn_apm_config_loader.mdx
+++ b/api_docs/kbn_apm_config_loader.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader
title: "@kbn/apm-config-loader"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-config-loader plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader']
---
import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json';
diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx
index 54080540eb5d8..46ed2af46f34c 100644
--- a/api_docs/kbn_apm_synthtrace.mdx
+++ b/api_docs/kbn_apm_synthtrace.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace
title: "@kbn/apm-synthtrace"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-synthtrace plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace']
---
import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json';
diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx
index f835e70d8c3da..dcc3e638349d3 100644
--- a/api_docs/kbn_apm_synthtrace_client.mdx
+++ b/api_docs/kbn_apm_synthtrace_client.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client
title: "@kbn/apm-synthtrace-client"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-synthtrace-client plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client']
---
import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json';
diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx
index 6aa982892d28e..436b728930bc2 100644
--- a/api_docs/kbn_apm_utils.mdx
+++ b/api_docs/kbn_apm_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils
title: "@kbn/apm-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils']
---
import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json';
diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx
index fc2b56b426528..d58522991879d 100644
--- a/api_docs/kbn_axe_config.mdx
+++ b/api_docs/kbn_axe_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config
title: "@kbn/axe-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/axe-config plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config']
---
import kbnAxeConfigObj from './kbn_axe_config.devdocs.json';
diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx
index ae5a205148b3f..1bbc3245c9720 100644
--- a/api_docs/kbn_cases_components.mdx
+++ b/api_docs/kbn_cases_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components
title: "@kbn/cases-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cases-components plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components']
---
import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json';
diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx
index 23a2263cb230b..18a49a033b6b2 100644
--- a/api_docs/kbn_cell_actions.mdx
+++ b/api_docs/kbn_cell_actions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions
title: "@kbn/cell-actions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cell-actions plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions']
---
import kbnCellActionsObj from './kbn_cell_actions.devdocs.json';
diff --git a/api_docs/kbn_chart_expressions_common.mdx b/api_docs/kbn_chart_expressions_common.mdx
index a9fe4235fbc5d..db2894512432a 100644
--- a/api_docs/kbn_chart_expressions_common.mdx
+++ b/api_docs/kbn_chart_expressions_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common
title: "@kbn/chart-expressions-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/chart-expressions-common plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common']
---
import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json';
diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx
index 482c0a10c6bf0..08c61ce384b46 100644
--- a/api_docs/kbn_chart_icons.mdx
+++ b/api_docs/kbn_chart_icons.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons
title: "@kbn/chart-icons"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/chart-icons plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons']
---
import kbnChartIconsObj from './kbn_chart_icons.devdocs.json';
diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx
index bf5b599ddd7d1..17f54a02072b7 100644
--- a/api_docs/kbn_ci_stats_core.mdx
+++ b/api_docs/kbn_ci_stats_core.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core
title: "@kbn/ci-stats-core"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ci-stats-core plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core']
---
import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json';
diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx
index 471b752fa6180..cf31ce6cb57df 100644
--- a/api_docs/kbn_ci_stats_performance_metrics.mdx
+++ b/api_docs/kbn_ci_stats_performance_metrics.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics
title: "@kbn/ci-stats-performance-metrics"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ci-stats-performance-metrics plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics']
---
import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json';
diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx
index 82544bf688cb3..55b3ec9d6a996 100644
--- a/api_docs/kbn_ci_stats_reporter.mdx
+++ b/api_docs/kbn_ci_stats_reporter.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter
title: "@kbn/ci-stats-reporter"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ci-stats-reporter plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter']
---
import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json';
diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx
index 52fb86f92aef6..564faae4630e3 100644
--- a/api_docs/kbn_cli_dev_mode.mdx
+++ b/api_docs/kbn_cli_dev_mode.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode
title: "@kbn/cli-dev-mode"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cli-dev-mode plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode']
---
import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json';
diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx
index 26c692e06089b..44e7e9fa7f58e 100644
--- a/api_docs/kbn_code_editor.mdx
+++ b/api_docs/kbn_code_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor
title: "@kbn/code-editor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/code-editor plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor']
---
import kbnCodeEditorObj from './kbn_code_editor.devdocs.json';
diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx
index 655b137b4bdbc..1c10d3c95e297 100644
--- a/api_docs/kbn_code_editor_mocks.mdx
+++ b/api_docs/kbn_code_editor_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks
title: "@kbn/code-editor-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/code-editor-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks']
---
import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json';
diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx
index 5803262a815e3..95b6d37c09b9c 100644
--- a/api_docs/kbn_coloring.mdx
+++ b/api_docs/kbn_coloring.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring
title: "@kbn/coloring"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/coloring plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring']
---
import kbnColoringObj from './kbn_coloring.devdocs.json';
diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx
index 2c0120f3425b3..9da19b8e5dd95 100644
--- a/api_docs/kbn_config.mdx
+++ b/api_docs/kbn_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config
title: "@kbn/config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/config plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config']
---
import kbnConfigObj from './kbn_config.devdocs.json';
diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx
index 8e6ea0f096568..0dfdf39a1f34d 100644
--- a/api_docs/kbn_config_mocks.mdx
+++ b/api_docs/kbn_config_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks
title: "@kbn/config-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/config-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks']
---
import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json';
diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx
index c87360e2a14a1..02f6a8cc5f143 100644
--- a/api_docs/kbn_config_schema.mdx
+++ b/api_docs/kbn_config_schema.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema
title: "@kbn/config-schema"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/config-schema plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema']
---
import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json';
diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx
index b056fe5b8ccc1..d4f9d7b609c05 100644
--- a/api_docs/kbn_content_management_content_editor.mdx
+++ b/api_docs/kbn_content_management_content_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor
title: "@kbn/content-management-content-editor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-content-editor plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor']
---
import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json';
diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx
index 90d6d47e440ba..17465bdcdda04 100644
--- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx
+++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view
title: "@kbn/content-management-tabbed-table-list-view"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-tabbed-table-list-view plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-tabbed-table-list-view']
---
import kbnContentManagementTabbedTableListViewObj from './kbn_content_management_tabbed_table_list_view.devdocs.json';
diff --git a/api_docs/kbn_content_management_table_list_view.mdx b/api_docs/kbn_content_management_table_list_view.mdx
index 16692165c6f42..8dff7ba986683 100644
--- a/api_docs/kbn_content_management_table_list_view.mdx
+++ b/api_docs/kbn_content_management_table_list_view.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view
title: "@kbn/content-management-table-list-view"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-table-list-view plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view']
---
import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json';
diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx
index 66f20c8d9cf45..f514163d33a77 100644
--- a/api_docs/kbn_content_management_table_list_view_table.mdx
+++ b/api_docs/kbn_content_management_table_list_view_table.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table
title: "@kbn/content-management-table-list-view-table"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-table-list-view-table plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table']
---
import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json';
diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx
index 52c847e782b0c..f44fb2d78044e 100644
--- a/api_docs/kbn_content_management_utils.mdx
+++ b/api_docs/kbn_content_management_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils
title: "@kbn/content-management-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils']
---
import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx
index d87f1f6d360f4..35f72b85b52d9 100644
--- a/api_docs/kbn_core_analytics_browser.mdx
+++ b/api_docs/kbn_core_analytics_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser
title: "@kbn/core-analytics-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser']
---
import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx
index a6a7db7de10a1..d8be2e24e3b2f 100644
--- a/api_docs/kbn_core_analytics_browser_internal.mdx
+++ b/api_docs/kbn_core_analytics_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal
title: "@kbn/core-analytics-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-browser-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal']
---
import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx
index 729086a0a52fe..9f66638e8cf89 100644
--- a/api_docs/kbn_core_analytics_browser_mocks.mdx
+++ b/api_docs/kbn_core_analytics_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks
title: "@kbn/core-analytics-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks']
---
import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx
index cdb500e4e7ecb..9007afcfd6164 100644
--- a/api_docs/kbn_core_analytics_server.mdx
+++ b/api_docs/kbn_core_analytics_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server
title: "@kbn/core-analytics-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server']
---
import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx
index f46ec5700900d..a432abf0b12cc 100644
--- a/api_docs/kbn_core_analytics_server_internal.mdx
+++ b/api_docs/kbn_core_analytics_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal
title: "@kbn/core-analytics-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal']
---
import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx
index ecfc2d0a72e86..9de7d4298ce70 100644
--- a/api_docs/kbn_core_analytics_server_mocks.mdx
+++ b/api_docs/kbn_core_analytics_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks
title: "@kbn/core-analytics-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks']
---
import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx
index b98dfdef613c6..3fe748f825157 100644
--- a/api_docs/kbn_core_application_browser.mdx
+++ b/api_docs/kbn_core_application_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser
title: "@kbn/core-application-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser']
---
import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json';
diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx
index ac2e6b6237eaa..ade92a2a7a80a 100644
--- a/api_docs/kbn_core_application_browser_internal.mdx
+++ b/api_docs/kbn_core_application_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal
title: "@kbn/core-application-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-browser-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal']
---
import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx
index d0ab22bd7f1fb..4ce0c7e905d47 100644
--- a/api_docs/kbn_core_application_browser_mocks.mdx
+++ b/api_docs/kbn_core_application_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks
title: "@kbn/core-application-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks']
---
import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx
index 8082aea52c0ac..6a35c9d7e4731 100644
--- a/api_docs/kbn_core_application_common.mdx
+++ b/api_docs/kbn_core_application_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common
title: "@kbn/core-application-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-common plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common']
---
import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json';
diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx
index dab44f8f155ef..4440f018cddb3 100644
--- a/api_docs/kbn_core_apps_browser_internal.mdx
+++ b/api_docs/kbn_core_apps_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal
title: "@kbn/core-apps-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-apps-browser-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal']
---
import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx
index 322ac37d23d20..c3d15a491b4e6 100644
--- a/api_docs/kbn_core_apps_browser_mocks.mdx
+++ b/api_docs/kbn_core_apps_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks
title: "@kbn/core-apps-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-apps-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks']
---
import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx
index 5f3c3a7e576e3..7fce8a0088de8 100644
--- a/api_docs/kbn_core_apps_server_internal.mdx
+++ b/api_docs/kbn_core_apps_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal
title: "@kbn/core-apps-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-apps-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal']
---
import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx
index c55082f7f8f6d..71f8a0e491ec4 100644
--- a/api_docs/kbn_core_base_browser_mocks.mdx
+++ b/api_docs/kbn_core_base_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks
title: "@kbn/core-base-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks']
---
import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx
index cd3c27e807218..337f3633b248d 100644
--- a/api_docs/kbn_core_base_common.mdx
+++ b/api_docs/kbn_core_base_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common
title: "@kbn/core-base-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-common plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common']
---
import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json';
diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx
index 473e7c24a74ed..90ef23a0d6d4b 100644
--- a/api_docs/kbn_core_base_server_internal.mdx
+++ b/api_docs/kbn_core_base_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal
title: "@kbn/core-base-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal']
---
import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx
index 0afddf48eb2a5..55ee6a5c63205 100644
--- a/api_docs/kbn_core_base_server_mocks.mdx
+++ b/api_docs/kbn_core_base_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks
title: "@kbn/core-base-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks']
---
import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx
index 0e366837d272d..b07533dea93fb 100644
--- a/api_docs/kbn_core_capabilities_browser_mocks.mdx
+++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks
title: "@kbn/core-capabilities-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks']
---
import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx
index 464ac26c55c68..f50fd488b4356 100644
--- a/api_docs/kbn_core_capabilities_common.mdx
+++ b/api_docs/kbn_core_capabilities_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common
title: "@kbn/core-capabilities-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-common plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common']
---
import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json';
diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx
index db400b1c4c963..9e4f9cf1810bc 100644
--- a/api_docs/kbn_core_capabilities_server.mdx
+++ b/api_docs/kbn_core_capabilities_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server
title: "@kbn/core-capabilities-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server']
---
import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json';
diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx
index 8e8335eff297c..d95d3cccff421 100644
--- a/api_docs/kbn_core_capabilities_server_mocks.mdx
+++ b/api_docs/kbn_core_capabilities_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks
title: "@kbn/core-capabilities-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks']
---
import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx
index 7b284b301a1ba..65707ca9a4216 100644
--- a/api_docs/kbn_core_chrome_browser.mdx
+++ b/api_docs/kbn_core_chrome_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser
title: "@kbn/core-chrome-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-chrome-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser']
---
import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json';
diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx
index 92725e4fe49dc..ee15a772068b3 100644
--- a/api_docs/kbn_core_chrome_browser_mocks.mdx
+++ b/api_docs/kbn_core_chrome_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks
title: "@kbn/core-chrome-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-chrome-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks']
---
import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx
index 4d1939243cda7..3762f3791d208 100644
--- a/api_docs/kbn_core_config_server_internal.mdx
+++ b/api_docs/kbn_core_config_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal
title: "@kbn/core-config-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-config-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal']
---
import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx
index e261d217df6d9..9d70ee20782bb 100644
--- a/api_docs/kbn_core_custom_branding_browser.mdx
+++ b/api_docs/kbn_core_custom_branding_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser
title: "@kbn/core-custom-branding-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser']
---
import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx
index f2559ba6ff5f5..75b732176c0cb 100644
--- a/api_docs/kbn_core_custom_branding_browser_internal.mdx
+++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal
title: "@kbn/core-custom-branding-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-browser-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal']
---
import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx
index ed0ff4ca4177f..e59331ceb4713 100644
--- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx
+++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks
title: "@kbn/core-custom-branding-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks']
---
import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx
index 89f296b65cd90..7690811c85c6b 100644
--- a/api_docs/kbn_core_custom_branding_common.mdx
+++ b/api_docs/kbn_core_custom_branding_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common
title: "@kbn/core-custom-branding-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-common plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common']
---
import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx
index 5ad25223390e2..461546b2ca3be 100644
--- a/api_docs/kbn_core_custom_branding_server.mdx
+++ b/api_docs/kbn_core_custom_branding_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server
title: "@kbn/core-custom-branding-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server']
---
import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx
index c7d85f74c0c70..1c6d3cbebee40 100644
--- a/api_docs/kbn_core_custom_branding_server_internal.mdx
+++ b/api_docs/kbn_core_custom_branding_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal
title: "@kbn/core-custom-branding-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal']
---
import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx
index 62243ce4fd2f7..0594f01762b5a 100644
--- a/api_docs/kbn_core_custom_branding_server_mocks.mdx
+++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks
title: "@kbn/core-custom-branding-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks']
---
import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx
index 9c91240f4bda2..a382a7cc3ae9a 100644
--- a/api_docs/kbn_core_deprecations_browser.mdx
+++ b/api_docs/kbn_core_deprecations_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser
title: "@kbn/core-deprecations-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser']
---
import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx
index 0dc30a8e55891..2d2db2f9b459b 100644
--- a/api_docs/kbn_core_deprecations_browser_internal.mdx
+++ b/api_docs/kbn_core_deprecations_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal
title: "@kbn/core-deprecations-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-browser-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal']
---
import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx
index 4893876c4b5ae..d0a193f216b14 100644
--- a/api_docs/kbn_core_deprecations_browser_mocks.mdx
+++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks
title: "@kbn/core-deprecations-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks']
---
import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx
index df31882bf401e..0b54edd1a49dc 100644
--- a/api_docs/kbn_core_deprecations_common.mdx
+++ b/api_docs/kbn_core_deprecations_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common
title: "@kbn/core-deprecations-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-common plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common']
---
import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx
index 788f8dc9471f0..5672cd92879b3 100644
--- a/api_docs/kbn_core_deprecations_server.mdx
+++ b/api_docs/kbn_core_deprecations_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server
title: "@kbn/core-deprecations-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server']
---
import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx
index b2f1647986eec..92c0e600f936c 100644
--- a/api_docs/kbn_core_deprecations_server_internal.mdx
+++ b/api_docs/kbn_core_deprecations_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal
title: "@kbn/core-deprecations-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal']
---
import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx
index f310dec522108..8d3d56fab2b02 100644
--- a/api_docs/kbn_core_deprecations_server_mocks.mdx
+++ b/api_docs/kbn_core_deprecations_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks
title: "@kbn/core-deprecations-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks']
---
import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx
index d862cab3c2244..26b43dbceff04 100644
--- a/api_docs/kbn_core_doc_links_browser.mdx
+++ b/api_docs/kbn_core_doc_links_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser
title: "@kbn/core-doc-links-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser']
---
import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json';
diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx
index e0ded39d87f16..4461e02dc104e 100644
--- a/api_docs/kbn_core_doc_links_browser_mocks.mdx
+++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks
title: "@kbn/core-doc-links-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks']
---
import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx
index dc09fd934b69f..f9c907ec9d0fd 100644
--- a/api_docs/kbn_core_doc_links_server.mdx
+++ b/api_docs/kbn_core_doc_links_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server
title: "@kbn/core-doc-links-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server']
---
import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json';
diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx
index 77b3caae05207..558dd40e2190a 100644
--- a/api_docs/kbn_core_doc_links_server_mocks.mdx
+++ b/api_docs/kbn_core_doc_links_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks
title: "@kbn/core-doc-links-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks']
---
import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx
index c9998c0b9c100..e2b67d77dd8ac 100644
--- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx
+++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal
title: "@kbn/core-elasticsearch-client-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal']
---
import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx
index 14d3b05eaeac3..10bb88f9a5ebe 100644
--- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx
+++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks
title: "@kbn/core-elasticsearch-client-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks']
---
import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx
index 1bb966bac6c58..8b63e2614e331 100644
--- a/api_docs/kbn_core_elasticsearch_server.mdx
+++ b/api_docs/kbn_core_elasticsearch_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server
title: "@kbn/core-elasticsearch-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server']
---
import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx
index 7523a9aa74b21..422e2888a9d37 100644
--- a/api_docs/kbn_core_elasticsearch_server_internal.mdx
+++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal
title: "@kbn/core-elasticsearch-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal']
---
import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx
index 965c1a0d82f28..0b0c79eb573dd 100644
--- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx
+++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks
title: "@kbn/core-elasticsearch-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks']
---
import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx
index 20342df034995..edfc68367229c 100644
--- a/api_docs/kbn_core_environment_server_internal.mdx
+++ b/api_docs/kbn_core_environment_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal
title: "@kbn/core-environment-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-environment-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal']
---
import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx
index b06cb5388daa2..326a0da6d8b74 100644
--- a/api_docs/kbn_core_environment_server_mocks.mdx
+++ b/api_docs/kbn_core_environment_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks
title: "@kbn/core-environment-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-environment-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks']
---
import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx
index eb0b650760f09..19f07676c1949 100644
--- a/api_docs/kbn_core_execution_context_browser.mdx
+++ b/api_docs/kbn_core_execution_context_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser
title: "@kbn/core-execution-context-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser']
---
import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx
index 5dae3a60683d0..f917ad8fbaf75 100644
--- a/api_docs/kbn_core_execution_context_browser_internal.mdx
+++ b/api_docs/kbn_core_execution_context_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal
title: "@kbn/core-execution-context-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-browser-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal']
---
import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx
index dc01dcfd287c6..60218900fe4a5 100644
--- a/api_docs/kbn_core_execution_context_browser_mocks.mdx
+++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks
title: "@kbn/core-execution-context-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks']
---
import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx
index d2eb7d91215b6..15f9bd51dc2e3 100644
--- a/api_docs/kbn_core_execution_context_common.mdx
+++ b/api_docs/kbn_core_execution_context_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common
title: "@kbn/core-execution-context-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-common plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common']
---
import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx
index 847d306e4ecc6..015ebf9a85509 100644
--- a/api_docs/kbn_core_execution_context_server.mdx
+++ b/api_docs/kbn_core_execution_context_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server
title: "@kbn/core-execution-context-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server']
---
import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx
index accbbcc822f39..963173fc60d22 100644
--- a/api_docs/kbn_core_execution_context_server_internal.mdx
+++ b/api_docs/kbn_core_execution_context_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal
title: "@kbn/core-execution-context-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal']
---
import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx
index a9cfa4a985391..92b9ebcd28a79 100644
--- a/api_docs/kbn_core_execution_context_server_mocks.mdx
+++ b/api_docs/kbn_core_execution_context_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks
title: "@kbn/core-execution-context-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks']
---
import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx
index 53654397c6b73..4ec65ac9f9780 100644
--- a/api_docs/kbn_core_fatal_errors_browser.mdx
+++ b/api_docs/kbn_core_fatal_errors_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser
title: "@kbn/core-fatal-errors-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-fatal-errors-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser']
---
import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json';
diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx
index cddeb36053c03..53fc97ed66580 100644
--- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx
+++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks
title: "@kbn/core-fatal-errors-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks']
---
import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx
index fb2f343bd34b0..114bada5218d9 100644
--- a/api_docs/kbn_core_http_browser.mdx
+++ b/api_docs/kbn_core_http_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser
title: "@kbn/core-http-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser']
---
import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json';
diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx
index 38c9c4b1666c5..2adad87f6a9d6 100644
--- a/api_docs/kbn_core_http_browser_internal.mdx
+++ b/api_docs/kbn_core_http_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal
title: "@kbn/core-http-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-browser-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal']
---
import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx
index 5d04b54503535..b523ffe93c76c 100644
--- a/api_docs/kbn_core_http_browser_mocks.mdx
+++ b/api_docs/kbn_core_http_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks
title: "@kbn/core-http-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks']
---
import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx
index 90471ebf30566..2f753ab5e71a8 100644
--- a/api_docs/kbn_core_http_common.mdx
+++ b/api_docs/kbn_core_http_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common
title: "@kbn/core-http-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-common plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common']
---
import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json';
diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx
index 20df2146cc275..6fed32e553fd1 100644
--- a/api_docs/kbn_core_http_context_server_mocks.mdx
+++ b/api_docs/kbn_core_http_context_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks
title: "@kbn/core-http-context-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-context-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks']
---
import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx
index d14acba094450..39af492f82274 100644
--- a/api_docs/kbn_core_http_request_handler_context_server.mdx
+++ b/api_docs/kbn_core_http_request_handler_context_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server
title: "@kbn/core-http-request-handler-context-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-request-handler-context-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server']
---
import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json';
diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx
index 703ccfd34498b..a7af16e34ef14 100644
--- a/api_docs/kbn_core_http_resources_server.mdx
+++ b/api_docs/kbn_core_http_resources_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server
title: "@kbn/core-http-resources-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-resources-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server']
---
import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json';
diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx
index 17d61c7be3fe7..e8283cac35e85 100644
--- a/api_docs/kbn_core_http_resources_server_internal.mdx
+++ b/api_docs/kbn_core_http_resources_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal
title: "@kbn/core-http-resources-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-resources-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal']
---
import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx
index 6302b14522ad3..75e017c0dfd30 100644
--- a/api_docs/kbn_core_http_resources_server_mocks.mdx
+++ b/api_docs/kbn_core_http_resources_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks
title: "@kbn/core-http-resources-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-resources-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks']
---
import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx
index 9b9a489fda638..18b430d6c8883 100644
--- a/api_docs/kbn_core_http_router_server_internal.mdx
+++ b/api_docs/kbn_core_http_router_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal
title: "@kbn/core-http-router-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-router-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal']
---
import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx
index 2c49cb76a8551..58d9bc7cb4ba9 100644
--- a/api_docs/kbn_core_http_router_server_mocks.mdx
+++ b/api_docs/kbn_core_http_router_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks
title: "@kbn/core-http-router-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-router-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks']
---
import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_server.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json
index 82728a75430e6..3c12a07c75c0d 100644
--- a/api_docs/kbn_core_http_server.devdocs.json
+++ b/api_docs/kbn_core_http_server.devdocs.json
@@ -3327,6 +3327,10 @@
"plugin": "taskManager",
"path": "x-pack/plugins/task_manager/server/routes/background_task_utilization.ts"
},
+ {
+ "plugin": "taskManager",
+ "path": "x-pack/plugins/task_manager/server/routes/metrics.ts"
+ },
{
"plugin": "licensing",
"path": "x-pack/plugins/licensing/server/routes/info.ts"
@@ -4385,27 +4389,27 @@
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/find_rules/route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/get_prebuilt_rules_and_timelines_status/get_prebuilt_rules_and_timelines_status_route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/filters/route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/get_prebuilt_rules_status/get_prebuilt_rules_status_route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/read_rule/route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/find_rules/route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/tags/read_tags/route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/filters/route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/get_prebuilt_rules_and_timelines_status/get_prebuilt_rules_and_timelines_status_route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/read_rule/route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/get_prebuilt_rules_status/get_prebuilt_rules_status_route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/tags/read_tags/route.ts"
},
{
"plugin": "securitySolution",
@@ -5139,6 +5143,18 @@
"plugin": "taskManager",
"path": "x-pack/plugins/task_manager/server/routes/health.test.ts"
},
+ {
+ "plugin": "taskManager",
+ "path": "x-pack/plugins/task_manager/server/routes/metrics.test.ts"
+ },
+ {
+ "plugin": "taskManager",
+ "path": "x-pack/plugins/task_manager/server/routes/metrics.test.ts"
+ },
+ {
+ "plugin": "taskManager",
+ "path": "x-pack/plugins/task_manager/server/routes/metrics.test.ts"
+ },
{
"plugin": "triggersActionsUi",
"path": "x-pack/plugins/triggers_actions_ui/server/routes/config.test.ts"
@@ -7119,63 +7135,63 @@
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/create_index_route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_create_rules/route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/create_timelines/index.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/index.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/create_rule/route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/prepackaged_timelines/install_prepackaged_timelines/index.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/export_rules/route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/review_rule_installation/review_rule_installation_route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/import_rules/route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/review_rule_upgrade/review_rule_upgrade_route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/coverage_overview/route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/perform_rule_installation/perform_rule_installation_route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/create_timelines/index.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/perform_rule_upgrade/perform_rule_upgrade_route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/index.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/prepackaged_timelines/install_prepackaged_timelines/index.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_create_rules/route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/review_rule_installation/review_rule_installation_route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/review_rule_upgrade/review_rule_upgrade_route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/create_rule/route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/perform_rule_installation/perform_rule_installation_route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/export_rules/route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/perform_rule_upgrade/perform_rule_upgrade_route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/import_rules/route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/create_index_route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/coverage_overview/route.ts"
},
{
"plugin": "securitySolution",
@@ -8877,15 +8893,15 @@
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/install_prebuilt_rules_and_timelines/install_prebuilt_rules_and_timelines_route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/install_prebuilt_rules_and_timelines/install_prebuilt_rules_and_timelines_route.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.ts"
},
{
"plugin": "securitySolution",
diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx
index 82667ac4ef3c7..87ddf7b9f05ea 100644
--- a/api_docs/kbn_core_http_server.mdx
+++ b/api_docs/kbn_core_http_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server
title: "@kbn/core-http-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server']
---
import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json';
diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx
index ac140d73e2b38..3269fff6c4883 100644
--- a/api_docs/kbn_core_http_server_internal.mdx
+++ b/api_docs/kbn_core_http_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal
title: "@kbn/core-http-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal']
---
import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx
index a48c4e42074b7..927c49eeb7e94 100644
--- a/api_docs/kbn_core_http_server_mocks.mdx
+++ b/api_docs/kbn_core_http_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks
title: "@kbn/core-http-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks']
---
import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx
index 41ec6e7832ade..684becef8f19a 100644
--- a/api_docs/kbn_core_i18n_browser.mdx
+++ b/api_docs/kbn_core_i18n_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser
title: "@kbn/core-i18n-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser']
---
import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx
index 1e5ae6297f990..d962298a132c6 100644
--- a/api_docs/kbn_core_i18n_browser_mocks.mdx
+++ b/api_docs/kbn_core_i18n_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks
title: "@kbn/core-i18n-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks']
---
import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx
index 21f486618582a..3d6865c233b79 100644
--- a/api_docs/kbn_core_i18n_server.mdx
+++ b/api_docs/kbn_core_i18n_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server
title: "@kbn/core-i18n-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server']
---
import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx
index 3ab45c144385e..3a91deab4f03d 100644
--- a/api_docs/kbn_core_i18n_server_internal.mdx
+++ b/api_docs/kbn_core_i18n_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal
title: "@kbn/core-i18n-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal']
---
import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx
index a235f73337acf..c51008c35b7bb 100644
--- a/api_docs/kbn_core_i18n_server_mocks.mdx
+++ b/api_docs/kbn_core_i18n_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks
title: "@kbn/core-i18n-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks']
---
import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx
index fbf3e937342a9..0697de58f3995 100644
--- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx
+++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks
title: "@kbn/core-injected-metadata-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks']
---
import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx
index 2acbf405a3767..1bd0ed1ae92e0 100644
--- a/api_docs/kbn_core_integrations_browser_internal.mdx
+++ b/api_docs/kbn_core_integrations_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal
title: "@kbn/core-integrations-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-integrations-browser-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal']
---
import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx
index 271158872085c..c06f074909745 100644
--- a/api_docs/kbn_core_integrations_browser_mocks.mdx
+++ b/api_docs/kbn_core_integrations_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks
title: "@kbn/core-integrations-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-integrations-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks']
---
import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx
index f181b8adde3e1..5c2e0fa9427a1 100644
--- a/api_docs/kbn_core_lifecycle_browser.mdx
+++ b/api_docs/kbn_core_lifecycle_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser
title: "@kbn/core-lifecycle-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser']
---
import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json';
diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx
index e37b57748c89d..d62b998ea0d39 100644
--- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx
+++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks
title: "@kbn/core-lifecycle-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks']
---
import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx
index 618616c93b3bf..a40c53395f81f 100644
--- a/api_docs/kbn_core_lifecycle_server.mdx
+++ b/api_docs/kbn_core_lifecycle_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server
title: "@kbn/core-lifecycle-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server']
---
import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json';
diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx
index 3bdee1a4b465b..d47ad613f857e 100644
--- a/api_docs/kbn_core_lifecycle_server_mocks.mdx
+++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks
title: "@kbn/core-lifecycle-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks']
---
import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx
index 7529be3283e76..d45554d7ef99f 100644
--- a/api_docs/kbn_core_logging_browser_mocks.mdx
+++ b/api_docs/kbn_core_logging_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks
title: "@kbn/core-logging-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks']
---
import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx
index 73faa2a2c058c..ed7f98adfa822 100644
--- a/api_docs/kbn_core_logging_common_internal.mdx
+++ b/api_docs/kbn_core_logging_common_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal
title: "@kbn/core-logging-common-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-common-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal']
---
import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json';
diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx
index e62baf21a6a26..64dd3c47b1255 100644
--- a/api_docs/kbn_core_logging_server.mdx
+++ b/api_docs/kbn_core_logging_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server
title: "@kbn/core-logging-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server']
---
import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json';
diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx
index 2787674950f97..6d58641516e8e 100644
--- a/api_docs/kbn_core_logging_server_internal.mdx
+++ b/api_docs/kbn_core_logging_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal
title: "@kbn/core-logging-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal']
---
import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx
index 8d17c99d5aeff..bb01fd51300a6 100644
--- a/api_docs/kbn_core_logging_server_mocks.mdx
+++ b/api_docs/kbn_core_logging_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks
title: "@kbn/core-logging-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks']
---
import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx
index d01bf0eef4e0b..b2986a00bb3d1 100644
--- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx
+++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal
title: "@kbn/core-metrics-collectors-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-collectors-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal']
---
import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx
index db641c23b5c16..dab5267318029 100644
--- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx
+++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks
title: "@kbn/core-metrics-collectors-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks']
---
import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx
index 76ab578ca9ac5..0347cc4281da6 100644
--- a/api_docs/kbn_core_metrics_server.mdx
+++ b/api_docs/kbn_core_metrics_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server
title: "@kbn/core-metrics-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server']
---
import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx
index f4857e75484b8..6a6c105386cb7 100644
--- a/api_docs/kbn_core_metrics_server_internal.mdx
+++ b/api_docs/kbn_core_metrics_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal
title: "@kbn/core-metrics-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal']
---
import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx
index 48bd68f7423fd..11f47cc363247 100644
--- a/api_docs/kbn_core_metrics_server_mocks.mdx
+++ b/api_docs/kbn_core_metrics_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks
title: "@kbn/core-metrics-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks']
---
import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx
index 4d870950003b4..571797d837007 100644
--- a/api_docs/kbn_core_mount_utils_browser.mdx
+++ b/api_docs/kbn_core_mount_utils_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser
title: "@kbn/core-mount-utils-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-mount-utils-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser']
---
import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json';
diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx
index 130657c82057e..ca031ac1a8403 100644
--- a/api_docs/kbn_core_node_server.mdx
+++ b/api_docs/kbn_core_node_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server
title: "@kbn/core-node-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-node-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server']
---
import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json';
diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx
index b640733927526..f5199e55c13d2 100644
--- a/api_docs/kbn_core_node_server_internal.mdx
+++ b/api_docs/kbn_core_node_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal
title: "@kbn/core-node-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-node-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal']
---
import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx
index 6ab1207dba9d8..a92fa9f756627 100644
--- a/api_docs/kbn_core_node_server_mocks.mdx
+++ b/api_docs/kbn_core_node_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks
title: "@kbn/core-node-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-node-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks']
---
import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx
index b61883ef0faf3..1284db03b72a7 100644
--- a/api_docs/kbn_core_notifications_browser.mdx
+++ b/api_docs/kbn_core_notifications_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser
title: "@kbn/core-notifications-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-notifications-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser']
---
import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json';
diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx
index de5e9a65e03e1..1e403aeaa86f7 100644
--- a/api_docs/kbn_core_notifications_browser_internal.mdx
+++ b/api_docs/kbn_core_notifications_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal
title: "@kbn/core-notifications-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-notifications-browser-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal']
---
import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx
index 3674b168de8e5..acd30e7d99656 100644
--- a/api_docs/kbn_core_notifications_browser_mocks.mdx
+++ b/api_docs/kbn_core_notifications_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks
title: "@kbn/core-notifications-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-notifications-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks']
---
import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx
index 1167151882fc8..31b3118a07deb 100644
--- a/api_docs/kbn_core_overlays_browser.mdx
+++ b/api_docs/kbn_core_overlays_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser
title: "@kbn/core-overlays-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-overlays-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser']
---
import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json';
diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx
index 338dc9621271f..645206b829466 100644
--- a/api_docs/kbn_core_overlays_browser_internal.mdx
+++ b/api_docs/kbn_core_overlays_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal
title: "@kbn/core-overlays-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-overlays-browser-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal']
---
import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx
index 4953be8f184dd..aa6cca4a09149 100644
--- a/api_docs/kbn_core_overlays_browser_mocks.mdx
+++ b/api_docs/kbn_core_overlays_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks
title: "@kbn/core-overlays-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-overlays-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks']
---
import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx
index 5695cf5c0cbda..6d58a44d5ab99 100644
--- a/api_docs/kbn_core_plugins_browser.mdx
+++ b/api_docs/kbn_core_plugins_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser
title: "@kbn/core-plugins-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser']
---
import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx
index 9fd366713450b..8218223682bbc 100644
--- a/api_docs/kbn_core_plugins_browser_mocks.mdx
+++ b/api_docs/kbn_core_plugins_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks
title: "@kbn/core-plugins-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks']
---
import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx
index 98fc42f121edb..f579419a807c0 100644
--- a/api_docs/kbn_core_plugins_server.mdx
+++ b/api_docs/kbn_core_plugins_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server
title: "@kbn/core-plugins-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server']
---
import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx
index 1916d0fc6b419..a1080cd3601b6 100644
--- a/api_docs/kbn_core_plugins_server_mocks.mdx
+++ b/api_docs/kbn_core_plugins_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks
title: "@kbn/core-plugins-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks']
---
import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx
index d316fbfd4e506..e032dafbc2611 100644
--- a/api_docs/kbn_core_preboot_server.mdx
+++ b/api_docs/kbn_core_preboot_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server
title: "@kbn/core-preboot-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-preboot-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server']
---
import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json';
diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx
index a5b86aa2e0595..179ad46abb372 100644
--- a/api_docs/kbn_core_preboot_server_mocks.mdx
+++ b/api_docs/kbn_core_preboot_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks
title: "@kbn/core-preboot-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-preboot-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks']
---
import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx
index d89ba8654171a..5dc0eae9b16ef 100644
--- a/api_docs/kbn_core_rendering_browser_mocks.mdx
+++ b/api_docs/kbn_core_rendering_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks
title: "@kbn/core-rendering-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-rendering-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks']
---
import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx
index 1ea63418e6ef5..fb620194937c6 100644
--- a/api_docs/kbn_core_rendering_server_internal.mdx
+++ b/api_docs/kbn_core_rendering_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal
title: "@kbn/core-rendering-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-rendering-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal']
---
import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx
index f93fff0c1fcf8..27e640e900e3d 100644
--- a/api_docs/kbn_core_rendering_server_mocks.mdx
+++ b/api_docs/kbn_core_rendering_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks
title: "@kbn/core-rendering-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-rendering-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks']
---
import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx
index 3c98b8e7cd8c5..8c616cab4c1ba 100644
--- a/api_docs/kbn_core_root_server_internal.mdx
+++ b/api_docs/kbn_core_root_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal
title: "@kbn/core-root-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-root-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal']
---
import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx
index bce1c4dfbbe6a..d88478ea53f57 100644
--- a/api_docs/kbn_core_saved_objects_api_browser.mdx
+++ b/api_docs/kbn_core_saved_objects_api_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser
title: "@kbn/core-saved-objects-api-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser']
---
import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx
index 43a76d7b9cf36..afdd85346ea48 100644
--- a/api_docs/kbn_core_saved_objects_api_server.mdx
+++ b/api_docs/kbn_core_saved_objects_api_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server
title: "@kbn/core-saved-objects-api-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server']
---
import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx
index 6eb08f9729cd2..e5d2e147497a8 100644
--- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks
title: "@kbn/core-saved-objects-api-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks']
---
import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx
index 3e83a424f42e0..815b82a5f0767 100644
--- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal
title: "@kbn/core-saved-objects-base-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-base-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal']
---
import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx
index 146223dc48caa..288475eeb24f6 100644
--- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks
title: "@kbn/core-saved-objects-base-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks']
---
import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx
index 0a47fb79af85f..9b3f3180b96ce 100644
--- a/api_docs/kbn_core_saved_objects_browser.mdx
+++ b/api_docs/kbn_core_saved_objects_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser
title: "@kbn/core-saved-objects-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser']
---
import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx
index 92b4800d92922..2e45be7a67b65 100644
--- a/api_docs/kbn_core_saved_objects_browser_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal
title: "@kbn/core-saved-objects-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-browser-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal']
---
import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx
index bbb8a825d4d4f..84d11fc78393d 100644
--- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks
title: "@kbn/core-saved-objects-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks']
---
import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx
index ceefaf5cbeafb..cafac584953e8 100644
--- a/api_docs/kbn_core_saved_objects_common.mdx
+++ b/api_docs/kbn_core_saved_objects_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common
title: "@kbn/core-saved-objects-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-common plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common']
---
import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx
index 1faf6ebe0e53d..05497ac9cd7e1 100644
--- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal
title: "@kbn/core-saved-objects-import-export-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal']
---
import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx
index f6bed826ea1c3..509610b7162a8 100644
--- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks
title: "@kbn/core-saved-objects-import-export-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks']
---
import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx
index d0a3fa14c77cd..28f741bb006af 100644
--- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal
title: "@kbn/core-saved-objects-migration-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal']
---
import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx
index 25dad7079d510..8519d407edd23 100644
--- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks
title: "@kbn/core-saved-objects-migration-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks']
---
import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx
index 106a0457952e2..f3047469c9753 100644
--- a/api_docs/kbn_core_saved_objects_server.mdx
+++ b/api_docs/kbn_core_saved_objects_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server
title: "@kbn/core-saved-objects-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server']
---
import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx
index 7d0144334d52e..015346c712611 100644
--- a/api_docs/kbn_core_saved_objects_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal
title: "@kbn/core-saved-objects-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal']
---
import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx
index a399c0f132953..f27c93a407e1b 100644
--- a/api_docs/kbn_core_saved_objects_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks
title: "@kbn/core-saved-objects-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks']
---
import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx
index 29377aff2208d..ae0961994d120 100644
--- a/api_docs/kbn_core_saved_objects_utils_server.mdx
+++ b/api_docs/kbn_core_saved_objects_utils_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server
title: "@kbn/core-saved-objects-utils-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-utils-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server']
---
import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json';
diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx
index 1e4a2823e38b5..0e7ceecba6249 100644
--- a/api_docs/kbn_core_status_common.mdx
+++ b/api_docs/kbn_core_status_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common
title: "@kbn/core-status-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-common plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common']
---
import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json';
diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx
index 8e67896ef64c6..e17d5c7f20a21 100644
--- a/api_docs/kbn_core_status_common_internal.mdx
+++ b/api_docs/kbn_core_status_common_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal
title: "@kbn/core-status-common-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-common-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal']
---
import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json';
diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx
index 86ca8260635d6..b1942e1ed7da8 100644
--- a/api_docs/kbn_core_status_server.mdx
+++ b/api_docs/kbn_core_status_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server
title: "@kbn/core-status-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server']
---
import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json';
diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx
index bca4e58d6f283..31384e6b8e59b 100644
--- a/api_docs/kbn_core_status_server_internal.mdx
+++ b/api_docs/kbn_core_status_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal
title: "@kbn/core-status-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal']
---
import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx
index 775f6ed0325cc..05cb7a6e9fa32 100644
--- a/api_docs/kbn_core_status_server_mocks.mdx
+++ b/api_docs/kbn_core_status_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks
title: "@kbn/core-status-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks']
---
import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx
index 8600a414da1c7..631ce1325f85d 100644
--- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx
+++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters
title: "@kbn/core-test-helpers-deprecations-getters"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters']
---
import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx
index 9a63c6f8684a4..cf20d660fc15a 100644
--- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx
+++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser
title: "@kbn/core-test-helpers-http-setup-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser']
---
import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx
index 27d8c8c3615d9..066a6a15cc5c3 100644
--- a/api_docs/kbn_core_test_helpers_kbn_server.mdx
+++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server
title: "@kbn/core-test-helpers-kbn-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-kbn-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server']
---
import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx
index 03a818dbc9f8a..5f9c6af59b724 100644
--- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx
+++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer
title: "@kbn/core-test-helpers-so-type-serializer"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer']
---
import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx
index df096bb32afe7..531f38d8005bd 100644
--- a/api_docs/kbn_core_test_helpers_test_utils.mdx
+++ b/api_docs/kbn_core_test_helpers_test_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils
title: "@kbn/core-test-helpers-test-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-test-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils']
---
import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json';
diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx
index 1a690ce8ca317..8a37513657d85 100644
--- a/api_docs/kbn_core_theme_browser.mdx
+++ b/api_docs/kbn_core_theme_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser
title: "@kbn/core-theme-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-theme-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser']
---
import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json';
diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx
index 078b5b61c87af..9274dcda56a50 100644
--- a/api_docs/kbn_core_theme_browser_mocks.mdx
+++ b/api_docs/kbn_core_theme_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks
title: "@kbn/core-theme-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-theme-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks']
---
import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx
index de8f5e37a7117..3b469fa858df1 100644
--- a/api_docs/kbn_core_ui_settings_browser.mdx
+++ b/api_docs/kbn_core_ui_settings_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser
title: "@kbn/core-ui-settings-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser']
---
import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx
index 42888989c1d71..a9f4e4d035f2b 100644
--- a/api_docs/kbn_core_ui_settings_browser_internal.mdx
+++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal
title: "@kbn/core-ui-settings-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-browser-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal']
---
import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx
index dc0eacf181763..9882269c6b6df 100644
--- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx
+++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks
title: "@kbn/core-ui-settings-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-browser-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks']
---
import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx
index 72338cc121aff..b0756b11b3290 100644
--- a/api_docs/kbn_core_ui_settings_common.mdx
+++ b/api_docs/kbn_core_ui_settings_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common
title: "@kbn/core-ui-settings-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-common plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common']
---
import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx
index 6e403fc98be17..159836b769b4c 100644
--- a/api_docs/kbn_core_ui_settings_server.mdx
+++ b/api_docs/kbn_core_ui_settings_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server
title: "@kbn/core-ui-settings-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server']
---
import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx
index 37cd3bb5e6fc8..881ebb05e5ba4 100644
--- a/api_docs/kbn_core_ui_settings_server_internal.mdx
+++ b/api_docs/kbn_core_ui_settings_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal
title: "@kbn/core-ui-settings-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal']
---
import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx
index 9b2d559647af4..534f66c977788 100644
--- a/api_docs/kbn_core_ui_settings_server_mocks.mdx
+++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks
title: "@kbn/core-ui-settings-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks']
---
import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx
index 97c8a42e92e5f..28244a3bf2182 100644
--- a/api_docs/kbn_core_usage_data_server.mdx
+++ b/api_docs/kbn_core_usage_data_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server
title: "@kbn/core-usage-data-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-usage-data-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server']
---
import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json';
diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx
index b7ba1c6982cda..91dae21151a0d 100644
--- a/api_docs/kbn_core_usage_data_server_internal.mdx
+++ b/api_docs/kbn_core_usage_data_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal
title: "@kbn/core-usage-data-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-usage-data-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal']
---
import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx
index b44078da120ce..645569275c379 100644
--- a/api_docs/kbn_core_usage_data_server_mocks.mdx
+++ b/api_docs/kbn_core_usage_data_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks
title: "@kbn/core-usage-data-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-usage-data-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks']
---
import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx
index db3bd1c4a212f..19af638e8cc9d 100644
--- a/api_docs/kbn_core_user_settings_server.mdx
+++ b/api_docs/kbn_core_user_settings_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server
title: "@kbn/core-user-settings-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-user-settings-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server']
---
import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json';
diff --git a/api_docs/kbn_core_user_settings_server_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx
index 3c1fd63d98ffc..3b54628f64827 100644
--- a/api_docs/kbn_core_user_settings_server_internal.mdx
+++ b/api_docs/kbn_core_user_settings_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal
title: "@kbn/core-user-settings-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-user-settings-server-internal plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal']
---
import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx
index 581b2d19a67dc..fba2633efd04d 100644
--- a/api_docs/kbn_core_user_settings_server_mocks.mdx
+++ b/api_docs/kbn_core_user_settings_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks
title: "@kbn/core-user-settings-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-user-settings-server-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-mocks']
---
import kbnCoreUserSettingsServerMocksObj from './kbn_core_user_settings_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx
index 2bdd551a726e8..9439b762dc5e4 100644
--- a/api_docs/kbn_crypto.mdx
+++ b/api_docs/kbn_crypto.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto
title: "@kbn/crypto"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/crypto plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto']
---
import kbnCryptoObj from './kbn_crypto.devdocs.json';
diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx
index e3e5fc256186d..59cc9a43d5d05 100644
--- a/api_docs/kbn_crypto_browser.mdx
+++ b/api_docs/kbn_crypto_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser
title: "@kbn/crypto-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/crypto-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser']
---
import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json';
diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx
index 0e99bc11beab0..1462664911dfb 100644
--- a/api_docs/kbn_cypress_config.mdx
+++ b/api_docs/kbn_cypress_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config
title: "@kbn/cypress-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cypress-config plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config']
---
import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json';
diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx
index 50681528b9a02..57b41534f1660 100644
--- a/api_docs/kbn_data_service.mdx
+++ b/api_docs/kbn_data_service.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service
title: "@kbn/data-service"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/data-service plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service']
---
import kbnDataServiceObj from './kbn_data_service.devdocs.json';
diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx
index 14a40b92fc24f..96ce00d3d86c0 100644
--- a/api_docs/kbn_datemath.mdx
+++ b/api_docs/kbn_datemath.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath
title: "@kbn/datemath"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/datemath plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath']
---
import kbnDatemathObj from './kbn_datemath.devdocs.json';
diff --git a/api_docs/kbn_deeplinks_analytics.mdx b/api_docs/kbn_deeplinks_analytics.mdx
index 34a8335a386a9..0fa8500c1172b 100644
--- a/api_docs/kbn_deeplinks_analytics.mdx
+++ b/api_docs/kbn_deeplinks_analytics.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics
title: "@kbn/deeplinks-analytics"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-analytics plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-analytics']
---
import kbnDeeplinksAnalyticsObj from './kbn_deeplinks_analytics.devdocs.json';
diff --git a/api_docs/kbn_deeplinks_devtools.mdx b/api_docs/kbn_deeplinks_devtools.mdx
index 81a5082f51fa5..8abad4b25e23b 100644
--- a/api_docs/kbn_deeplinks_devtools.mdx
+++ b/api_docs/kbn_deeplinks_devtools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools
title: "@kbn/deeplinks-devtools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-devtools plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools']
---
import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json';
diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx
index 136927962625b..d26958aea28bb 100644
--- a/api_docs/kbn_deeplinks_management.mdx
+++ b/api_docs/kbn_deeplinks_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management
title: "@kbn/deeplinks-management"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-management plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-management']
---
import kbnDeeplinksManagementObj from './kbn_deeplinks_management.devdocs.json';
diff --git a/api_docs/kbn_deeplinks_ml.mdx b/api_docs/kbn_deeplinks_ml.mdx
index 3ff66d5b3b6e0..4355c4480baa8 100644
--- a/api_docs/kbn_deeplinks_ml.mdx
+++ b/api_docs/kbn_deeplinks_ml.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml
title: "@kbn/deeplinks-ml"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-ml plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-ml']
---
import kbnDeeplinksMlObj from './kbn_deeplinks_ml.devdocs.json';
diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx
index cea675bd91dd1..de2a21fed0eb4 100644
--- a/api_docs/kbn_deeplinks_observability.mdx
+++ b/api_docs/kbn_deeplinks_observability.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability
title: "@kbn/deeplinks-observability"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-observability plugin
-date: 2023-08-11
+date: 2023-08-12
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 1ef5a03b94b42..06b1cba156e8c 100644
--- a/api_docs/kbn_deeplinks_search.mdx
+++ b/api_docs/kbn_deeplinks_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search
title: "@kbn/deeplinks-search"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-search plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search']
---
import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json';
diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx
index 3c7a0628ae9b5..a6aab74fc0408 100644
--- a/api_docs/kbn_default_nav_analytics.mdx
+++ b/api_docs/kbn_default_nav_analytics.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics
title: "@kbn/default-nav-analytics"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/default-nav-analytics plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-analytics']
---
import kbnDefaultNavAnalyticsObj from './kbn_default_nav_analytics.devdocs.json';
diff --git a/api_docs/kbn_default_nav_devtools.mdx b/api_docs/kbn_default_nav_devtools.mdx
index a1d8f1ed2eced..b5fe3a5b18122 100644
--- a/api_docs/kbn_default_nav_devtools.mdx
+++ b/api_docs/kbn_default_nav_devtools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools
title: "@kbn/default-nav-devtools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/default-nav-devtools plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-devtools']
---
import kbnDefaultNavDevtoolsObj from './kbn_default_nav_devtools.devdocs.json';
diff --git a/api_docs/kbn_default_nav_management.mdx b/api_docs/kbn_default_nav_management.mdx
index dc8f97efe3d84..8c6c69243658e 100644
--- a/api_docs/kbn_default_nav_management.mdx
+++ b/api_docs/kbn_default_nav_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management
title: "@kbn/default-nav-management"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/default-nav-management plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-management']
---
import kbnDefaultNavManagementObj from './kbn_default_nav_management.devdocs.json';
diff --git a/api_docs/kbn_default_nav_ml.mdx b/api_docs/kbn_default_nav_ml.mdx
index 1ea4a59543aac..d1d86bbb00576 100644
--- a/api_docs/kbn_default_nav_ml.mdx
+++ b/api_docs/kbn_default_nav_ml.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml
title: "@kbn/default-nav-ml"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/default-nav-ml plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-ml']
---
import kbnDefaultNavMlObj from './kbn_default_nav_ml.devdocs.json';
diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx
index 1cf6474003e1f..cfa277d89b11d 100644
--- a/api_docs/kbn_dev_cli_errors.mdx
+++ b/api_docs/kbn_dev_cli_errors.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors
title: "@kbn/dev-cli-errors"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-cli-errors plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors']
---
import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json';
diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx
index fdb7f633debef..ce470a3ae3cc3 100644
--- a/api_docs/kbn_dev_cli_runner.mdx
+++ b/api_docs/kbn_dev_cli_runner.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner
title: "@kbn/dev-cli-runner"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-cli-runner plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner']
---
import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json';
diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx
index 0ff3c5adfe990..5f840361a6d80 100644
--- a/api_docs/kbn_dev_proc_runner.mdx
+++ b/api_docs/kbn_dev_proc_runner.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner
title: "@kbn/dev-proc-runner"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-proc-runner plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner']
---
import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json';
diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx
index 10a222b06b460..26ec9c629aadd 100644
--- a/api_docs/kbn_dev_utils.mdx
+++ b/api_docs/kbn_dev_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils
title: "@kbn/dev-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils']
---
import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json';
diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx
index 33e3c7a1c69ba..46441a6550dd4 100644
--- a/api_docs/kbn_discover_utils.mdx
+++ b/api_docs/kbn_discover_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils
title: "@kbn/discover-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/discover-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils']
---
import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json';
diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx
index 4f12dca89d97b..98a8fdc68794f 100644
--- a/api_docs/kbn_doc_links.mdx
+++ b/api_docs/kbn_doc_links.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links
title: "@kbn/doc-links"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/doc-links plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links']
---
import kbnDocLinksObj from './kbn_doc_links.devdocs.json';
diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx
index d26122b1bb5d9..4d59873f0c003 100644
--- a/api_docs/kbn_docs_utils.mdx
+++ b/api_docs/kbn_docs_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils
title: "@kbn/docs-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/docs-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils']
---
import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json';
diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx
index e669402a38621..34d4f2d69311d 100644
--- a/api_docs/kbn_dom_drag_drop.mdx
+++ b/api_docs/kbn_dom_drag_drop.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop
title: "@kbn/dom-drag-drop"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dom-drag-drop plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop']
---
import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json';
diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx
index e471065d680c3..bacce4e4aa899 100644
--- a/api_docs/kbn_ebt_tools.mdx
+++ b/api_docs/kbn_ebt_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools
title: "@kbn/ebt-tools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ebt-tools plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools']
---
import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json';
diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx
index 59b24bd57d648..aae4d6efe614b 100644
--- a/api_docs/kbn_ecs.mdx
+++ b/api_docs/kbn_ecs.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs
title: "@kbn/ecs"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ecs plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs']
---
import kbnEcsObj from './kbn_ecs.devdocs.json';
diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx
index 1118c9ab84511..11c538dc3ea42 100644
--- a/api_docs/kbn_ecs_data_quality_dashboard.mdx
+++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard
title: "@kbn/ecs-data-quality-dashboard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ecs-data-quality-dashboard plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard']
---
import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json';
diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx
index 9160fea2f0a29..6946b85c05e5e 100644
--- a/api_docs/kbn_elastic_assistant.mdx
+++ b/api_docs/kbn_elastic_assistant.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant
title: "@kbn/elastic-assistant"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/elastic-assistant plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant']
---
import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json';
diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx
index 8f88080d35e90..c93a428ec149a 100644
--- a/api_docs/kbn_es.mdx
+++ b/api_docs/kbn_es.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es
title: "@kbn/es"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es']
---
import kbnEsObj from './kbn_es.devdocs.json';
diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx
index 2ad08088203e4..90575e4dbee58 100644
--- a/api_docs/kbn_es_archiver.mdx
+++ b/api_docs/kbn_es_archiver.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver
title: "@kbn/es-archiver"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-archiver plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver']
---
import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json';
diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx
index 1387cc6ec52bc..a181bd456e8b2 100644
--- a/api_docs/kbn_es_errors.mdx
+++ b/api_docs/kbn_es_errors.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors
title: "@kbn/es-errors"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-errors plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors']
---
import kbnEsErrorsObj from './kbn_es_errors.devdocs.json';
diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx
index 3a7c2bcdd3685..359b0b37ecffc 100644
--- a/api_docs/kbn_es_query.mdx
+++ b/api_docs/kbn_es_query.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query
title: "@kbn/es-query"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-query plugin
-date: 2023-08-11
+date: 2023-08-12
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 464d5e31f05a7..80b21887194c6 100644
--- a/api_docs/kbn_es_types.mdx
+++ b/api_docs/kbn_es_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types
title: "@kbn/es-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-types plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types']
---
import kbnEsTypesObj from './kbn_es_types.devdocs.json';
diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx
index 90c2304279417..f679a0c9f8496 100644
--- a/api_docs/kbn_eslint_plugin_imports.mdx
+++ b/api_docs/kbn_eslint_plugin_imports.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports
title: "@kbn/eslint-plugin-imports"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/eslint-plugin-imports plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports']
---
import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json';
diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx
index 199fb1758b0a2..df9132da9fafb 100644
--- a/api_docs/kbn_event_annotation_common.mdx
+++ b/api_docs/kbn_event_annotation_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common
title: "@kbn/event-annotation-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/event-annotation-common plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common']
---
import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json';
diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx
index bc2407357d747..94406270c8d45 100644
--- a/api_docs/kbn_event_annotation_components.mdx
+++ b/api_docs/kbn_event_annotation_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components
title: "@kbn/event-annotation-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/event-annotation-components plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components']
---
import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json';
diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx
index 1d4f974c56b10..296ac98182940 100644
--- a/api_docs/kbn_expandable_flyout.mdx
+++ b/api_docs/kbn_expandable_flyout.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout
title: "@kbn/expandable-flyout"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/expandable-flyout plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout']
---
import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json';
diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx
index 1a8859de0092f..eb49eb03a70d0 100644
--- a/api_docs/kbn_field_types.mdx
+++ b/api_docs/kbn_field_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types
title: "@kbn/field-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/field-types plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types']
---
import kbnFieldTypesObj from './kbn_field_types.devdocs.json';
diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx
index c892feccae45c..15af292a890b8 100644
--- a/api_docs/kbn_find_used_node_modules.mdx
+++ b/api_docs/kbn_find_used_node_modules.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules
title: "@kbn/find-used-node-modules"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/find-used-node-modules plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules']
---
import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json';
diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx
index 829256156269f..928632cb878aa 100644
--- a/api_docs/kbn_ftr_common_functional_services.mdx
+++ b/api_docs/kbn_ftr_common_functional_services.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services
title: "@kbn/ftr-common-functional-services"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ftr-common-functional-services plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services']
---
import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json';
diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx
index ab0b3ba5adf5d..1f7eae35f21ef 100644
--- a/api_docs/kbn_generate.mdx
+++ b/api_docs/kbn_generate.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate
title: "@kbn/generate"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/generate plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate']
---
import kbnGenerateObj from './kbn_generate.devdocs.json';
diff --git a/api_docs/kbn_generate_console_definitions.mdx b/api_docs/kbn_generate_console_definitions.mdx
index 4c3415b941979..4a29f0109591c 100644
--- a/api_docs/kbn_generate_console_definitions.mdx
+++ b/api_docs/kbn_generate_console_definitions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions
title: "@kbn/generate-console-definitions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/generate-console-definitions plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-console-definitions']
---
import kbnGenerateConsoleDefinitionsObj from './kbn_generate_console_definitions.devdocs.json';
diff --git a/api_docs/kbn_generate_csv.mdx b/api_docs/kbn_generate_csv.mdx
index fb778684f8a18..0e5ccda75490e 100644
--- a/api_docs/kbn_generate_csv.mdx
+++ b/api_docs/kbn_generate_csv.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv
title: "@kbn/generate-csv"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/generate-csv plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv']
---
import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json';
diff --git a/api_docs/kbn_generate_csv_types.mdx b/api_docs/kbn_generate_csv_types.mdx
index 1c0ccec4b7b31..400bf04b0a3d7 100644
--- a/api_docs/kbn_generate_csv_types.mdx
+++ b/api_docs/kbn_generate_csv_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv-types
title: "@kbn/generate-csv-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/generate-csv-types plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv-types']
---
import kbnGenerateCsvTypesObj from './kbn_generate_csv_types.devdocs.json';
diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx
index 357c27fe461aa..e5aa18a17345a 100644
--- a/api_docs/kbn_guided_onboarding.mdx
+++ b/api_docs/kbn_guided_onboarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding
title: "@kbn/guided-onboarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/guided-onboarding plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding']
---
import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json';
diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx
index 8f3eda505dd31..d842abd281d51 100644
--- a/api_docs/kbn_handlebars.mdx
+++ b/api_docs/kbn_handlebars.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars
title: "@kbn/handlebars"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/handlebars plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars']
---
import kbnHandlebarsObj from './kbn_handlebars.devdocs.json';
diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx
index 39fe818ab9c67..d18832dd7332c 100644
--- a/api_docs/kbn_hapi_mocks.mdx
+++ b/api_docs/kbn_hapi_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks
title: "@kbn/hapi-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/hapi-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks']
---
import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json';
diff --git a/api_docs/kbn_health_gateway_server.mdx b/api_docs/kbn_health_gateway_server.mdx
index 3d27bbc363d87..93e0acbd58fd8 100644
--- a/api_docs/kbn_health_gateway_server.mdx
+++ b/api_docs/kbn_health_gateway_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server
title: "@kbn/health-gateway-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/health-gateway-server plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/health-gateway-server']
---
import kbnHealthGatewayServerObj from './kbn_health_gateway_server.devdocs.json';
diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx
index f716e67a77082..2c6cec399f31e 100644
--- a/api_docs/kbn_home_sample_data_card.mdx
+++ b/api_docs/kbn_home_sample_data_card.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card
title: "@kbn/home-sample-data-card"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/home-sample-data-card plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card']
---
import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json';
diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx
index d823dfaed566c..ac23f7f682057 100644
--- a/api_docs/kbn_home_sample_data_tab.mdx
+++ b/api_docs/kbn_home_sample_data_tab.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab
title: "@kbn/home-sample-data-tab"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/home-sample-data-tab plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab']
---
import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json';
diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx
index d4afb11fff5cc..b561a53e816bf 100644
--- a/api_docs/kbn_i18n.mdx
+++ b/api_docs/kbn_i18n.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n
title: "@kbn/i18n"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/i18n plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n']
---
import kbnI18nObj from './kbn_i18n.devdocs.json';
diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx
index d2e51134eece6..24499d3b368c3 100644
--- a/api_docs/kbn_i18n_react.mdx
+++ b/api_docs/kbn_i18n_react.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react
title: "@kbn/i18n-react"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/i18n-react plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react']
---
import kbnI18nReactObj from './kbn_i18n_react.devdocs.json';
diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx
index 8b1b64c786341..20004dab6cf5b 100644
--- a/api_docs/kbn_import_resolver.mdx
+++ b/api_docs/kbn_import_resolver.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver
title: "@kbn/import-resolver"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/import-resolver plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver']
---
import kbnImportResolverObj from './kbn_import_resolver.devdocs.json';
diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx
index 9f07802dc3140..9c58de040580a 100644
--- a/api_docs/kbn_infra_forge.mdx
+++ b/api_docs/kbn_infra_forge.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge
title: "@kbn/infra-forge"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/infra-forge plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/infra-forge']
---
import kbnInfraForgeObj from './kbn_infra_forge.devdocs.json';
diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx
index a68e7147bcf66..141a0d39c1a79 100644
--- a/api_docs/kbn_interpreter.mdx
+++ b/api_docs/kbn_interpreter.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter
title: "@kbn/interpreter"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/interpreter plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter']
---
import kbnInterpreterObj from './kbn_interpreter.devdocs.json';
diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx
index d8526125fde89..5bcfeefe95b22 100644
--- a/api_docs/kbn_io_ts_utils.mdx
+++ b/api_docs/kbn_io_ts_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils
title: "@kbn/io-ts-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/io-ts-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils']
---
import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json';
diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx
index 7558844d53dd3..008ce0d0cf1d8 100644
--- a/api_docs/kbn_jest_serializers.mdx
+++ b/api_docs/kbn_jest_serializers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers
title: "@kbn/jest-serializers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/jest-serializers plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers']
---
import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json';
diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx
index 2288a800a0341..f92472d9188a0 100644
--- a/api_docs/kbn_journeys.mdx
+++ b/api_docs/kbn_journeys.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys
title: "@kbn/journeys"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/journeys plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys']
---
import kbnJourneysObj from './kbn_journeys.devdocs.json';
diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx
index 2bfa83b074b93..ab412c1ac5bda 100644
--- a/api_docs/kbn_json_ast.mdx
+++ b/api_docs/kbn_json_ast.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast
title: "@kbn/json-ast"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/json-ast plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast']
---
import kbnJsonAstObj from './kbn_json_ast.devdocs.json';
diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx
index d9dae665142cd..da24f435a9fd0 100644
--- a/api_docs/kbn_kibana_manifest_schema.mdx
+++ b/api_docs/kbn_kibana_manifest_schema.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema
title: "@kbn/kibana-manifest-schema"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/kibana-manifest-schema plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema']
---
import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json';
diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx
index 5b18bd1a33bf0..ed2f9d7473f11 100644
--- a/api_docs/kbn_language_documentation_popover.mdx
+++ b/api_docs/kbn_language_documentation_popover.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover
title: "@kbn/language-documentation-popover"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/language-documentation-popover plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover']
---
import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json';
diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx
index 297bcc0e8b941..dca360967a970 100644
--- a/api_docs/kbn_logging.mdx
+++ b/api_docs/kbn_logging.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging
title: "@kbn/logging"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/logging plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging']
---
import kbnLoggingObj from './kbn_logging.devdocs.json';
diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx
index 2710699ca62eb..5fb0759520928 100644
--- a/api_docs/kbn_logging_mocks.mdx
+++ b/api_docs/kbn_logging_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks
title: "@kbn/logging-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/logging-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks']
---
import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json';
diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx
index 5c179cb68f54a..1d2587a2be6f2 100644
--- a/api_docs/kbn_managed_vscode_config.mdx
+++ b/api_docs/kbn_managed_vscode_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config
title: "@kbn/managed-vscode-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/managed-vscode-config plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config']
---
import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json';
diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx
index eda58daa0f4b7..831cfa33d9bcc 100644
--- a/api_docs/kbn_management_cards_navigation.mdx
+++ b/api_docs/kbn_management_cards_navigation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation
title: "@kbn/management-cards-navigation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/management-cards-navigation plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation']
---
import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json';
diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx
index 1f4627550c135..f25539fc6274f 100644
--- a/api_docs/kbn_management_storybook_config.mdx
+++ b/api_docs/kbn_management_storybook_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config
title: "@kbn/management-storybook-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/management-storybook-config plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config']
---
import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json';
diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx
index 296d30cd04cd7..f3f364312d27a 100644
--- a/api_docs/kbn_mapbox_gl.mdx
+++ b/api_docs/kbn_mapbox_gl.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl
title: "@kbn/mapbox-gl"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/mapbox-gl plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl']
---
import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json';
diff --git a/api_docs/kbn_maps_vector_tile_utils.mdx b/api_docs/kbn_maps_vector_tile_utils.mdx
index c8483ca9edc37..a31298c42a51d 100644
--- a/api_docs/kbn_maps_vector_tile_utils.mdx
+++ b/api_docs/kbn_maps_vector_tile_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils
title: "@kbn/maps-vector-tile-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/maps-vector-tile-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/maps-vector-tile-utils']
---
import kbnMapsVectorTileUtilsObj from './kbn_maps_vector_tile_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx
index d2ef8d1d4f117..2270f2ba5e5b7 100644
--- a/api_docs/kbn_ml_agg_utils.mdx
+++ b/api_docs/kbn_ml_agg_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils
title: "@kbn/ml-agg-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-agg-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils']
---
import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx
index fe52cb3eb08ca..74973b1f74b29 100644
--- a/api_docs/kbn_ml_anomaly_utils.mdx
+++ b/api_docs/kbn_ml_anomaly_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils
title: "@kbn/ml-anomaly-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-anomaly-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils']
---
import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx
index 0ba49a496063c..1ea58ce81827f 100644
--- a/api_docs/kbn_ml_category_validator.mdx
+++ b/api_docs/kbn_ml_category_validator.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator
title: "@kbn/ml-category-validator"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-category-validator plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator']
---
import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json';
diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx
index dd7b234563cfa..64c5bb6569f17 100644
--- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx
+++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils
title: "@kbn/ml-data-frame-analytics-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-data-frame-analytics-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-frame-analytics-utils']
---
import kbnMlDataFrameAnalyticsUtilsObj from './kbn_ml_data_frame_analytics_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_data_grid.mdx b/api_docs/kbn_ml_data_grid.mdx
index 976408c3c872c..e382cdd019f63 100644
--- a/api_docs/kbn_ml_data_grid.mdx
+++ b/api_docs/kbn_ml_data_grid.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid
title: "@kbn/ml-data-grid"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-data-grid plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-grid']
---
import kbnMlDataGridObj from './kbn_ml_data_grid.devdocs.json';
diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx
index 5172db2cc8b54..4c715d0b221b3 100644
--- a/api_docs/kbn_ml_date_picker.mdx
+++ b/api_docs/kbn_ml_date_picker.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker
title: "@kbn/ml-date-picker"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-date-picker plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker']
---
import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json';
diff --git a/api_docs/kbn_ml_date_utils.mdx b/api_docs/kbn_ml_date_utils.mdx
index 2768209f55d25..2361228e8fb4b 100644
--- a/api_docs/kbn_ml_date_utils.mdx
+++ b/api_docs/kbn_ml_date_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils
title: "@kbn/ml-date-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-date-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-utils']
---
import kbnMlDateUtilsObj from './kbn_ml_date_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_error_utils.mdx b/api_docs/kbn_ml_error_utils.mdx
index ed21c797bbf89..0fcd443023b8b 100644
--- a/api_docs/kbn_ml_error_utils.mdx
+++ b/api_docs/kbn_ml_error_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils
title: "@kbn/ml-error-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-error-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils']
---
import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx
index a9e831490f3ea..be489b790cdb9 100644
--- a/api_docs/kbn_ml_in_memory_table.mdx
+++ b/api_docs/kbn_ml_in_memory_table.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table
title: "@kbn/ml-in-memory-table"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-in-memory-table plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table']
---
import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json';
diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx
index 3c948ad94cdd7..095a2a81e982c 100644
--- a/api_docs/kbn_ml_is_defined.mdx
+++ b/api_docs/kbn_ml_is_defined.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined
title: "@kbn/ml-is-defined"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-is-defined plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined']
---
import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json';
diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx
index 5aea91d505819..bf87b5a80309f 100644
--- a/api_docs/kbn_ml_is_populated_object.mdx
+++ b/api_docs/kbn_ml_is_populated_object.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object
title: "@kbn/ml-is-populated-object"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-is-populated-object plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object']
---
import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json';
diff --git a/api_docs/kbn_ml_kibana_theme.mdx b/api_docs/kbn_ml_kibana_theme.mdx
index c7cb02299f434..d21fb0e679015 100644
--- a/api_docs/kbn_ml_kibana_theme.mdx
+++ b/api_docs/kbn_ml_kibana_theme.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme
title: "@kbn/ml-kibana-theme"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-kibana-theme plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-kibana-theme']
---
import kbnMlKibanaThemeObj from './kbn_ml_kibana_theme.devdocs.json';
diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx
index ee9b12f62801b..c70713615f86a 100644
--- a/api_docs/kbn_ml_local_storage.mdx
+++ b/api_docs/kbn_ml_local_storage.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage
title: "@kbn/ml-local-storage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-local-storage plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage']
---
import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json';
diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx
index 4cedbeff87dde..7ba03cc18dbcc 100644
--- a/api_docs/kbn_ml_nested_property.mdx
+++ b/api_docs/kbn_ml_nested_property.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property
title: "@kbn/ml-nested-property"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-nested-property plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property']
---
import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json';
diff --git a/api_docs/kbn_ml_number_utils.mdx b/api_docs/kbn_ml_number_utils.mdx
index 68e793d44c20c..82f677421a4ea 100644
--- a/api_docs/kbn_ml_number_utils.mdx
+++ b/api_docs/kbn_ml_number_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils
title: "@kbn/ml-number-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-number-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils']
---
import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx
index 97a971f001786..9dd53783ab020 100644
--- a/api_docs/kbn_ml_query_utils.mdx
+++ b/api_docs/kbn_ml_query_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils
title: "@kbn/ml-query-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-query-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils']
---
import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx
index c9ebd984cb632..c36618590308a 100644
--- a/api_docs/kbn_ml_random_sampler_utils.mdx
+++ b/api_docs/kbn_ml_random_sampler_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils
title: "@kbn/ml-random-sampler-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-random-sampler-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-random-sampler-utils']
---
import kbnMlRandomSamplerUtilsObj from './kbn_ml_random_sampler_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_route_utils.mdx b/api_docs/kbn_ml_route_utils.mdx
index a6054abca2f5b..3cce1d841b23f 100644
--- a/api_docs/kbn_ml_route_utils.mdx
+++ b/api_docs/kbn_ml_route_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils
title: "@kbn/ml-route-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-route-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-route-utils']
---
import kbnMlRouteUtilsObj from './kbn_ml_route_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_runtime_field_utils.mdx b/api_docs/kbn_ml_runtime_field_utils.mdx
index 812d7b5fc0292..580e0c944a1f1 100644
--- a/api_docs/kbn_ml_runtime_field_utils.mdx
+++ b/api_docs/kbn_ml_runtime_field_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils
title: "@kbn/ml-runtime-field-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-runtime-field-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-runtime-field-utils']
---
import kbnMlRuntimeFieldUtilsObj from './kbn_ml_runtime_field_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx
index a71021687533b..19ea1bf7caeba 100644
--- a/api_docs/kbn_ml_string_hash.mdx
+++ b/api_docs/kbn_ml_string_hash.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash
title: "@kbn/ml-string-hash"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-string-hash plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash']
---
import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json';
diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx
index ad053696f1b71..021c32900062c 100644
--- a/api_docs/kbn_ml_trained_models_utils.mdx
+++ b/api_docs/kbn_ml_trained_models_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils
title: "@kbn/ml-trained-models-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-trained-models-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils']
---
import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx
index a5544638cc9ce..3d10e0ecd7667 100644
--- a/api_docs/kbn_ml_url_state.mdx
+++ b/api_docs/kbn_ml_url_state.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state
title: "@kbn/ml-url-state"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-url-state plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state']
---
import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json';
diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx
index 3c00597400816..3a40e1a265a93 100644
--- a/api_docs/kbn_monaco.mdx
+++ b/api_docs/kbn_monaco.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco
title: "@kbn/monaco"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/monaco plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco']
---
import kbnMonacoObj from './kbn_monaco.devdocs.json';
diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx
index d71eebcd036bf..e1234b566a9d8 100644
--- a/api_docs/kbn_object_versioning.mdx
+++ b/api_docs/kbn_object_versioning.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning
title: "@kbn/object-versioning"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/object-versioning plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning']
---
import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json';
diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx
index 92f7ecfe04217..0cb3997ce4539 100644
--- a/api_docs/kbn_observability_alert_details.mdx
+++ b/api_docs/kbn_observability_alert_details.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details
title: "@kbn/observability-alert-details"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/observability-alert-details plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details']
---
import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json';
diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx
index db9ac01e9e23e..52e39d606420b 100644
--- a/api_docs/kbn_optimizer.mdx
+++ b/api_docs/kbn_optimizer.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer
title: "@kbn/optimizer"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/optimizer plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer']
---
import kbnOptimizerObj from './kbn_optimizer.devdocs.json';
diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx
index b7f8fc8418bc3..8fb7704e601ce 100644
--- a/api_docs/kbn_optimizer_webpack_helpers.mdx
+++ b/api_docs/kbn_optimizer_webpack_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers
title: "@kbn/optimizer-webpack-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/optimizer-webpack-helpers plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers']
---
import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json';
diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx
index 4cb6e3324db9c..fd1e29f5fc412 100644
--- a/api_docs/kbn_osquery_io_ts_types.mdx
+++ b/api_docs/kbn_osquery_io_ts_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types
title: "@kbn/osquery-io-ts-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/osquery-io-ts-types plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types']
---
import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json';
diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx
index c65b95b481a52..0624cc1f38a3a 100644
--- a/api_docs/kbn_performance_testing_dataset_extractor.mdx
+++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor
title: "@kbn/performance-testing-dataset-extractor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/performance-testing-dataset-extractor plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor']
---
import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json';
diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx
index ebed5ed1a344f..1ba311ff22362 100644
--- a/api_docs/kbn_plugin_generator.mdx
+++ b/api_docs/kbn_plugin_generator.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator
title: "@kbn/plugin-generator"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/plugin-generator plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator']
---
import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json';
diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx
index 13e2e68a03566..4e432fee673b8 100644
--- a/api_docs/kbn_plugin_helpers.mdx
+++ b/api_docs/kbn_plugin_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers
title: "@kbn/plugin-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/plugin-helpers plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers']
---
import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json';
diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx
index a5d463766f0b9..d788cc6f96f2d 100644
--- a/api_docs/kbn_random_sampling.mdx
+++ b/api_docs/kbn_random_sampling.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling
title: "@kbn/random-sampling"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/random-sampling plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling']
---
import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json';
diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx
index 0f3e624aaf688..0ee58600ebacf 100644
--- a/api_docs/kbn_react_field.mdx
+++ b/api_docs/kbn_react_field.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field
title: "@kbn/react-field"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-field plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field']
---
import kbnReactFieldObj from './kbn_react_field.devdocs.json';
diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx
index 3fd442396eeb5..5dcebd2660a0f 100644
--- a/api_docs/kbn_react_kibana_context_common.mdx
+++ b/api_docs/kbn_react_kibana_context_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common
title: "@kbn/react-kibana-context-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-context-common plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common']
---
import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json';
diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx
index d072b7ef1502f..839b9b793070b 100644
--- a/api_docs/kbn_react_kibana_context_render.mdx
+++ b/api_docs/kbn_react_kibana_context_render.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render
title: "@kbn/react-kibana-context-render"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-context-render plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render']
---
import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json';
diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx
index d4101bfac8ea2..c0aa64c497db9 100644
--- a/api_docs/kbn_react_kibana_context_root.mdx
+++ b/api_docs/kbn_react_kibana_context_root.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root
title: "@kbn/react-kibana-context-root"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-context-root plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root']
---
import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json';
diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx
index b297a1726adfd..bc940a17cf64d 100644
--- a/api_docs/kbn_react_kibana_context_styled.mdx
+++ b/api_docs/kbn_react_kibana_context_styled.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled
title: "@kbn/react-kibana-context-styled"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-context-styled plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled']
---
import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json';
diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx
index e9bd0f742c861..244b7833d7a60 100644
--- a/api_docs/kbn_react_kibana_context_theme.mdx
+++ b/api_docs/kbn_react_kibana_context_theme.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme
title: "@kbn/react-kibana-context-theme"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-context-theme plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme']
---
import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json';
diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx
index 74b358802933b..5d1d23ff52ef0 100644
--- a/api_docs/kbn_react_kibana_mount.mdx
+++ b/api_docs/kbn_react_kibana_mount.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount
title: "@kbn/react-kibana-mount"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-mount plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount']
---
import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json';
diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx
index 10545441cf651..6d46fa3caf65e 100644
--- a/api_docs/kbn_repo_file_maps.mdx
+++ b/api_docs/kbn_repo_file_maps.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps
title: "@kbn/repo-file-maps"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-file-maps plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps']
---
import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json';
diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx
index b89bd8d34f20b..e94c41fd5189c 100644
--- a/api_docs/kbn_repo_linter.mdx
+++ b/api_docs/kbn_repo_linter.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter
title: "@kbn/repo-linter"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-linter plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter']
---
import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json';
diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx
index 8568a60356cac..b9b73d110e240 100644
--- a/api_docs/kbn_repo_path.mdx
+++ b/api_docs/kbn_repo_path.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path
title: "@kbn/repo-path"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-path plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path']
---
import kbnRepoPathObj from './kbn_repo_path.devdocs.json';
diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx
index cacddca765224..5c611caf228d3 100644
--- a/api_docs/kbn_repo_source_classifier.mdx
+++ b/api_docs/kbn_repo_source_classifier.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier
title: "@kbn/repo-source-classifier"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-source-classifier plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier']
---
import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json';
diff --git a/api_docs/kbn_reporting_common.mdx b/api_docs/kbn_reporting_common.mdx
index 80ad5a6c08903..2fc77a1d099d1 100644
--- a/api_docs/kbn_reporting_common.mdx
+++ b/api_docs/kbn_reporting_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common
title: "@kbn/reporting-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/reporting-common plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common']
---
import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json';
diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx
index d72498527b77e..535bc14ec140e 100644
--- a/api_docs/kbn_rison.mdx
+++ b/api_docs/kbn_rison.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison
title: "@kbn/rison"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/rison plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison']
---
import kbnRisonObj from './kbn_rison.devdocs.json';
diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx
index ecc3904044faf..685f36e697c9d 100644
--- a/api_docs/kbn_rrule.mdx
+++ b/api_docs/kbn_rrule.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule
title: "@kbn/rrule"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/rrule plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule']
---
import kbnRruleObj from './kbn_rrule.devdocs.json';
diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx
index 332bb5be49d28..ff5a9f70d77b7 100644
--- a/api_docs/kbn_rule_data_utils.mdx
+++ b/api_docs/kbn_rule_data_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils
title: "@kbn/rule-data-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/rule-data-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils']
---
import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json';
diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx
index 9b60d4a33bda9..c20277af20093 100644
--- a/api_docs/kbn_saved_objects_settings.mdx
+++ b/api_docs/kbn_saved_objects_settings.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings
title: "@kbn/saved-objects-settings"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/saved-objects-settings plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings']
---
import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json';
diff --git a/api_docs/kbn_search_api_panels.devdocs.json b/api_docs/kbn_search_api_panels.devdocs.json
new file mode 100644
index 0000000000000..5f1b06dd23303
--- /dev/null
+++ b/api_docs/kbn_search_api_panels.devdocs.json
@@ -0,0 +1,1051 @@
+{
+ "id": "@kbn/search-api-panels",
+ "client": {
+ "classes": [],
+ "functions": [],
+ "interfaces": [],
+ "enums": [],
+ "misc": [],
+ "objects": []
+ },
+ "server": {
+ "classes": [],
+ "functions": [],
+ "interfaces": [],
+ "enums": [],
+ "misc": [],
+ "objects": []
+ },
+ "common": {
+ "classes": [],
+ "functions": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.CodeBox",
+ "type": "Function",
+ "tags": [],
+ "label": "CodeBox",
+ "description": [],
+ "signature": [
+ "({ application, codeSnippet, http, languageType, languages, pluginId, selectedLanguage, setSelectedLanguage, sharePlugin, showTryInConsole, }: React.PropsWithChildren) => JSX.Element"
+ ],
+ "path": "packages/kbn-search-api-panels/components/code_box.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.CodeBox.$1",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "{\n application,\n codeSnippet,\n http,\n languageType,\n languages,\n pluginId,\n selectedLanguage,\n setSelectedLanguage,\n sharePlugin,\n showTryInConsole,\n}",
+ "description": [],
+ "signature": [
+ "React.PropsWithChildren"
+ ],
+ "path": "packages/kbn-search-api-panels/components/code_box.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.GithubLink",
+ "type": "Function",
+ "tags": [],
+ "label": "GithubLink",
+ "description": [],
+ "signature": [
+ "({ label, href, http, pluginId }: React.PropsWithChildren<{ label: string; href: string; http: ",
+ {
+ "pluginId": "@kbn/core-http-browser",
+ "scope": "common",
+ "docId": "kibKbnCoreHttpBrowserPluginApi",
+ "section": "def-common.HttpSetup",
+ "text": "HttpSetup"
+ },
+ "; pluginId: string; }>) => JSX.Element"
+ ],
+ "path": "packages/kbn-search-api-panels/components/github_link.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.GithubLink.$1",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "{ label, href, http, pluginId }",
+ "description": [],
+ "signature": [
+ "React.PropsWithChildren<{ label: string; href: string; http: ",
+ {
+ "pluginId": "@kbn/core-http-browser",
+ "scope": "common",
+ "docId": "kibKbnCoreHttpBrowserPluginApi",
+ "section": "def-common.HttpSetup",
+ "text": "HttpSetup"
+ },
+ "; pluginId: string; }>"
+ ],
+ "path": "packages/kbn-search-api-panels/components/github_link.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.IngestData",
+ "type": "Function",
+ "tags": [],
+ "label": "IngestData",
+ "description": [],
+ "signature": [
+ "({ codeSnippet, selectedLanguage, setSelectedLanguage, docLinks, http, pluginId, application, sharePlugin, languages, showTryInConsole, }: React.PropsWithChildren) => JSX.Element"
+ ],
+ "path": "packages/kbn-search-api-panels/components/ingest_data.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.IngestData.$1",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "{\n codeSnippet,\n selectedLanguage,\n setSelectedLanguage,\n docLinks,\n http,\n pluginId,\n application,\n sharePlugin,\n languages,\n showTryInConsole,\n}",
+ "description": [],
+ "signature": [
+ "React.PropsWithChildren"
+ ],
+ "path": "packages/kbn-search-api-panels/components/ingest_data.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.InstallClientPanel",
+ "type": "Function",
+ "tags": [],
+ "label": "InstallClientPanel",
+ "description": [],
+ "signature": [
+ "({ codeSnippet, showTryInConsole, language, languages, setSelectedLanguage, http, pluginId, application, sharePlugin, isPanelLeft, overviewPanelProps, }: React.PropsWithChildren) => JSX.Element"
+ ],
+ "path": "packages/kbn-search-api-panels/components/install_client.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.InstallClientPanel.$1",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "{\n codeSnippet,\n showTryInConsole,\n language,\n languages,\n setSelectedLanguage,\n http,\n pluginId,\n application,\n sharePlugin,\n isPanelLeft = true,\n overviewPanelProps,\n}",
+ "description": [],
+ "signature": [
+ "React.PropsWithChildren"
+ ],
+ "path": "packages/kbn-search-api-panels/components/install_client.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.IntegrationsPanel",
+ "type": "Function",
+ "tags": [],
+ "label": "IntegrationsPanel",
+ "description": [],
+ "signature": [
+ "({ docLinks, http, pluginId, }: React.PropsWithChildren<",
+ {
+ "pluginId": "@kbn/search-api-panels",
+ "scope": "common",
+ "docId": "kibKbnSearchApiPanelsPluginApi",
+ "section": "def-common.IntegrationsPanelProps",
+ "text": "IntegrationsPanelProps"
+ },
+ ">) => JSX.Element"
+ ],
+ "path": "packages/kbn-search-api-panels/components/integrations_panel.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.IntegrationsPanel.$1",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "{\n docLinks,\n http,\n pluginId,\n}",
+ "description": [],
+ "signature": [
+ "React.PropsWithChildren<",
+ {
+ "pluginId": "@kbn/search-api-panels",
+ "scope": "common",
+ "docId": "kibKbnSearchApiPanelsPluginApi",
+ "section": "def-common.IntegrationsPanelProps",
+ "text": "IntegrationsPanelProps"
+ },
+ ">"
+ ],
+ "path": "packages/kbn-search-api-panels/components/integrations_panel.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageClientPanel",
+ "type": "Function",
+ "tags": [],
+ "label": "LanguageClientPanel",
+ "description": [],
+ "signature": [
+ "({ language, setSelectedLanguage, isSelectedLanguage, http, pluginId, src, }: React.PropsWithChildren) => JSX.Element"
+ ],
+ "path": "packages/kbn-search-api-panels/components/language_client_panel.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageClientPanel.$1",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "{\n language,\n setSelectedLanguage,\n isSelectedLanguage,\n http,\n pluginId,\n src,\n}",
+ "description": [],
+ "signature": [
+ "React.PropsWithChildren"
+ ],
+ "path": "packages/kbn-search-api-panels/components/language_client_panel.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.OverviewPanel",
+ "type": "Function",
+ "tags": [],
+ "label": "OverviewPanel",
+ "description": [],
+ "signature": [
+ "({ children, description, leftPanelContent, links, rightPanelContent, title, overviewPanelProps, }: React.PropsWithChildren) => JSX.Element"
+ ],
+ "path": "packages/kbn-search-api-panels/components/overview_panel.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.OverviewPanel.$1",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "{\n children,\n description,\n leftPanelContent,\n links,\n rightPanelContent,\n title,\n overviewPanelProps,\n}",
+ "description": [],
+ "signature": [
+ "React.PropsWithChildren"
+ ],
+ "path": "packages/kbn-search-api-panels/components/overview_panel.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.SelectClientPanel",
+ "type": "Function",
+ "tags": [],
+ "label": "SelectClientPanel",
+ "description": [],
+ "signature": [
+ "({ docLinks, children, http, isPanelLeft, overviewPanelProps, }: React.PropsWithChildren<",
+ {
+ "pluginId": "@kbn/search-api-panels",
+ "scope": "common",
+ "docId": "kibKbnSearchApiPanelsPluginApi",
+ "section": "def-common.SelectClientPanelProps",
+ "text": "SelectClientPanelProps"
+ },
+ ">) => JSX.Element"
+ ],
+ "path": "packages/kbn-search-api-panels/components/select_client.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.SelectClientPanel.$1",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "{\n docLinks,\n children,\n http,\n isPanelLeft = true,\n overviewPanelProps,\n}",
+ "description": [],
+ "signature": [
+ "React.PropsWithChildren<",
+ {
+ "pluginId": "@kbn/search-api-panels",
+ "scope": "common",
+ "docId": "kibKbnSearchApiPanelsPluginApi",
+ "section": "def-common.SelectClientPanelProps",
+ "text": "SelectClientPanelProps"
+ },
+ ">"
+ ],
+ "path": "packages/kbn-search-api-panels/components/select_client.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.TryInConsoleButton",
+ "type": "Function",
+ "tags": [],
+ "label": "TryInConsoleButton",
+ "description": [],
+ "signature": [
+ "({ request, application, sharePlugin, }: ",
+ {
+ "pluginId": "@kbn/search-api-panels",
+ "scope": "common",
+ "docId": "kibKbnSearchApiPanelsPluginApi",
+ "section": "def-common.TryInConsoleButtonProps",
+ "text": "TryInConsoleButtonProps"
+ },
+ ") => JSX.Element | null"
+ ],
+ "path": "packages/kbn-search-api-panels/components/try_in_console_button.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.TryInConsoleButton.$1",
+ "type": "Object",
+ "tags": [],
+ "label": "{\n request,\n application,\n sharePlugin,\n}",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "@kbn/search-api-panels",
+ "scope": "common",
+ "docId": "kibKbnSearchApiPanelsPluginApi",
+ "section": "def-common.TryInConsoleButtonProps",
+ "text": "TryInConsoleButtonProps"
+ }
+ ],
+ "path": "packages/kbn-search-api-panels/components/try_in_console_button.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.WelcomeBanner",
+ "type": "Function",
+ "tags": [],
+ "label": "WelcomeBanner",
+ "description": [],
+ "signature": [
+ "({ userProfile, assetBasePath, image, showDescription, }: React.PropsWithChildren<",
+ {
+ "pluginId": "@kbn/search-api-panels",
+ "scope": "common",
+ "docId": "kibKbnSearchApiPanelsPluginApi",
+ "section": "def-common.WelcomeBannerProps",
+ "text": "WelcomeBannerProps"
+ },
+ ">) => JSX.Element"
+ ],
+ "path": "packages/kbn-search-api-panels/index.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.WelcomeBanner.$1",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "{\n userProfile,\n assetBasePath,\n image,\n showDescription = true,\n}",
+ "description": [],
+ "signature": [
+ "React.PropsWithChildren<",
+ {
+ "pluginId": "@kbn/search-api-panels",
+ "scope": "common",
+ "docId": "kibKbnSearchApiPanelsPluginApi",
+ "section": "def-common.WelcomeBannerProps",
+ "text": "WelcomeBannerProps"
+ },
+ ">"
+ ],
+ "path": "packages/kbn-search-api-panels/index.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ }
+ ],
+ "interfaces": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.IntegrationsPanelProps",
+ "type": "Interface",
+ "tags": [],
+ "label": "IntegrationsPanelProps",
+ "description": [],
+ "path": "packages/kbn-search-api-panels/components/integrations_panel.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.IntegrationsPanelProps.docLinks",
+ "type": "Any",
+ "tags": [],
+ "label": "docLinks",
+ "description": [],
+ "signature": [
+ "any"
+ ],
+ "path": "packages/kbn-search-api-panels/components/integrations_panel.tsx",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.IntegrationsPanelProps.http",
+ "type": "Object",
+ "tags": [],
+ "label": "http",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "@kbn/core-http-browser",
+ "scope": "common",
+ "docId": "kibKbnCoreHttpBrowserPluginApi",
+ "section": "def-common.HttpSetup",
+ "text": "HttpSetup"
+ }
+ ],
+ "path": "packages/kbn-search-api-panels/components/integrations_panel.tsx",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.IntegrationsPanelProps.pluginId",
+ "type": "string",
+ "tags": [],
+ "label": "pluginId",
+ "description": [],
+ "path": "packages/kbn-search-api-panels/components/integrations_panel.tsx",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinition",
+ "type": "Interface",
+ "tags": [],
+ "label": "LanguageDefinition",
+ "description": [],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinition.advancedConfig",
+ "type": "string",
+ "tags": [],
+ "label": "advancedConfig",
+ "description": [],
+ "signature": [
+ "string | undefined"
+ ],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinition.apiReference",
+ "type": "string",
+ "tags": [],
+ "label": "apiReference",
+ "description": [],
+ "signature": [
+ "string | undefined"
+ ],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinition.basicConfig",
+ "type": "string",
+ "tags": [],
+ "label": "basicConfig",
+ "description": [],
+ "signature": [
+ "string | undefined"
+ ],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinition.configureClient",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "configureClient",
+ "description": [],
+ "signature": [
+ "string | ((args: ",
+ {
+ "pluginId": "@kbn/search-api-panels",
+ "scope": "common",
+ "docId": "kibKbnSearchApiPanelsPluginApi",
+ "section": "def-common.LanguageDefinitionSnippetArguments",
+ "text": "LanguageDefinitionSnippetArguments"
+ },
+ ") => string)"
+ ],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinition.docLink",
+ "type": "string",
+ "tags": [],
+ "label": "docLink",
+ "description": [],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinition.iconType",
+ "type": "string",
+ "tags": [],
+ "label": "iconType",
+ "description": [],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinition.id",
+ "type": "Enum",
+ "tags": [],
+ "label": "id",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "@kbn/search-api-panels",
+ "scope": "common",
+ "docId": "kibKbnSearchApiPanelsPluginApi",
+ "section": "def-common.Languages",
+ "text": "Languages"
+ }
+ ],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinition.ingestData",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "ingestData",
+ "description": [],
+ "signature": [
+ "string | ((args: ",
+ {
+ "pluginId": "@kbn/search-api-panels",
+ "scope": "common",
+ "docId": "kibKbnSearchApiPanelsPluginApi",
+ "section": "def-common.LanguageDefinitionSnippetArguments",
+ "text": "LanguageDefinitionSnippetArguments"
+ },
+ ") => string)"
+ ],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinition.ingestDataIndex",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "ingestDataIndex",
+ "description": [],
+ "signature": [
+ "string | ((args: ",
+ {
+ "pluginId": "@kbn/search-api-panels",
+ "scope": "common",
+ "docId": "kibKbnSearchApiPanelsPluginApi",
+ "section": "def-common.LanguageDefinitionSnippetArguments",
+ "text": "LanguageDefinitionSnippetArguments"
+ },
+ ") => string)"
+ ],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinition.installClient",
+ "type": "string",
+ "tags": [],
+ "label": "installClient",
+ "description": [],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinition.languageStyling",
+ "type": "string",
+ "tags": [],
+ "label": "languageStyling",
+ "description": [],
+ "signature": [
+ "string | undefined"
+ ],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinition.name",
+ "type": "string",
+ "tags": [],
+ "label": "name",
+ "description": [],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinition.buildSearchQuery",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "buildSearchQuery",
+ "description": [],
+ "signature": [
+ "string | ((args: ",
+ {
+ "pluginId": "@kbn/search-api-panels",
+ "scope": "common",
+ "docId": "kibKbnSearchApiPanelsPluginApi",
+ "section": "def-common.LanguageDefinitionSnippetArguments",
+ "text": "LanguageDefinitionSnippetArguments"
+ },
+ ") => string)"
+ ],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinition.testConnection",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "testConnection",
+ "description": [],
+ "signature": [
+ "string | ((args: ",
+ {
+ "pluginId": "@kbn/search-api-panels",
+ "scope": "common",
+ "docId": "kibKbnSearchApiPanelsPluginApi",
+ "section": "def-common.LanguageDefinitionSnippetArguments",
+ "text": "LanguageDefinitionSnippetArguments"
+ },
+ ") => string)"
+ ],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinitionSnippetArguments",
+ "type": "Interface",
+ "tags": [],
+ "label": "LanguageDefinitionSnippetArguments",
+ "description": [],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinitionSnippetArguments.url",
+ "type": "string",
+ "tags": [],
+ "label": "url",
+ "description": [],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinitionSnippetArguments.apiKey",
+ "type": "string",
+ "tags": [],
+ "label": "apiKey",
+ "description": [],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.LanguageDefinitionSnippetArguments.indexName",
+ "type": "string",
+ "tags": [],
+ "label": "indexName",
+ "description": [],
+ "signature": [
+ "string | undefined"
+ ],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.SelectClientPanelProps",
+ "type": "Interface",
+ "tags": [],
+ "label": "SelectClientPanelProps",
+ "description": [],
+ "path": "packages/kbn-search-api-panels/components/select_client.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.SelectClientPanelProps.docLinks",
+ "type": "Object",
+ "tags": [],
+ "label": "docLinks",
+ "description": [],
+ "signature": [
+ "{ elasticsearchClients: string; kibanaRunApiInConsole: string; }"
+ ],
+ "path": "packages/kbn-search-api-panels/components/select_client.tsx",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.SelectClientPanelProps.http",
+ "type": "Object",
+ "tags": [],
+ "label": "http",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "@kbn/core-http-browser",
+ "scope": "common",
+ "docId": "kibKbnCoreHttpBrowserPluginApi",
+ "section": "def-common.HttpSetup",
+ "text": "HttpSetup"
+ }
+ ],
+ "path": "packages/kbn-search-api-panels/components/select_client.tsx",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.SelectClientPanelProps.isPanelLeft",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "isPanelLeft",
+ "description": [],
+ "signature": [
+ "boolean | undefined"
+ ],
+ "path": "packages/kbn-search-api-panels/components/select_client.tsx",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.SelectClientPanelProps.overviewPanelProps",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "overviewPanelProps",
+ "description": [],
+ "signature": [
+ "Partial<(",
+ "DisambiguateSet",
+ "<",
+ "_EuiPanelButtonlike",
+ ", ",
+ "_EuiPanelDivlike",
+ "> & ",
+ "_EuiPanelDivlike",
+ ") | (",
+ "DisambiguateSet",
+ "<",
+ "_EuiPanelDivlike",
+ ", ",
+ "_EuiPanelButtonlike",
+ "> & ",
+ "_EuiPanelButtonlike",
+ ")> | undefined"
+ ],
+ "path": "packages/kbn-search-api-panels/components/select_client.tsx",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.TryInConsoleButtonProps",
+ "type": "Interface",
+ "tags": [],
+ "label": "TryInConsoleButtonProps",
+ "description": [],
+ "path": "packages/kbn-search-api-panels/components/try_in_console_button.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.TryInConsoleButtonProps.request",
+ "type": "string",
+ "tags": [],
+ "label": "request",
+ "description": [],
+ "path": "packages/kbn-search-api-panels/components/try_in_console_button.tsx",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.TryInConsoleButtonProps.application",
+ "type": "Object",
+ "tags": [],
+ "label": "application",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "@kbn/core-application-browser",
+ "scope": "common",
+ "docId": "kibKbnCoreApplicationBrowserPluginApi",
+ "section": "def-common.ApplicationStart",
+ "text": "ApplicationStart"
+ },
+ " | undefined"
+ ],
+ "path": "packages/kbn-search-api-panels/components/try_in_console_button.tsx",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.TryInConsoleButtonProps.sharePlugin",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "sharePlugin",
+ "description": [],
+ "signature": [
+ "{ toggleShareContextMenu: (options: ",
+ {
+ "pluginId": "share",
+ "scope": "public",
+ "docId": "kibSharePluginApi",
+ "section": "def-public.ShowShareMenuOptions",
+ "text": "ShowShareMenuOptions"
+ },
+ ") => void; } & { url: ",
+ {
+ "pluginId": "share",
+ "scope": "public",
+ "docId": "kibSharePluginApi",
+ "section": "def-public.BrowserUrlService",
+ "text": "BrowserUrlService"
+ },
+ "; navigate(options: ",
+ "RedirectOptions",
+ "<",
+ {
+ "pluginId": "@kbn/utility-types",
+ "scope": "common",
+ "docId": "kibKbnUtilityTypesPluginApi",
+ "section": "def-common.SerializableRecord",
+ "text": "SerializableRecord"
+ },
+ ">): void; }"
+ ],
+ "path": "packages/kbn-search-api-panels/components/try_in_console_button.tsx",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.WelcomeBannerProps",
+ "type": "Interface",
+ "tags": [],
+ "label": "WelcomeBannerProps",
+ "description": [],
+ "path": "packages/kbn-search-api-panels/index.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.WelcomeBannerProps.userProfile",
+ "type": "Object",
+ "tags": [],
+ "label": "userProfile",
+ "description": [],
+ "signature": [
+ "{ user: { full_name?: string | undefined; username?: string | undefined; }; }"
+ ],
+ "path": "packages/kbn-search-api-panels/index.tsx",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.WelcomeBannerProps.assetBasePath",
+ "type": "string",
+ "tags": [],
+ "label": "assetBasePath",
+ "description": [],
+ "signature": [
+ "string | undefined"
+ ],
+ "path": "packages/kbn-search-api-panels/index.tsx",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.WelcomeBannerProps.image",
+ "type": "string",
+ "tags": [],
+ "label": "image",
+ "description": [],
+ "signature": [
+ "string | undefined"
+ ],
+ "path": "packages/kbn-search-api-panels/index.tsx",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.WelcomeBannerProps.showDescription",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "showDescription",
+ "description": [],
+ "signature": [
+ "boolean | undefined"
+ ],
+ "path": "packages/kbn-search-api-panels/index.tsx",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ],
+ "initialIsOpen": false
+ }
+ ],
+ "enums": [
+ {
+ "parentPluginId": "@kbn/search-api-panels",
+ "id": "def-common.Languages",
+ "type": "Enum",
+ "tags": [],
+ "label": "Languages",
+ "description": [],
+ "path": "packages/kbn-search-api-panels/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ }
+ ],
+ "misc": [],
+ "objects": []
+ }
+}
\ No newline at end of file
diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx
new file mode 100644
index 0000000000000..5a80374d2c731
--- /dev/null
+++ b/api_docs/kbn_search_api_panels.mdx
@@ -0,0 +1,36 @@
+---
+####
+#### 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: kibKbnSearchApiPanelsPluginApi
+slug: /kibana-dev-docs/api/kbn-search-api-panels
+title: "@kbn/search-api-panels"
+image: https://source.unsplash.com/400x175/?github
+description: API docs for the @kbn/search-api-panels plugin
+date: 2023-08-12
+tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels']
+---
+import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json';
+
+
+
+Contact [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) for questions regarding this plugin.
+
+**Code health stats**
+
+| Public API count | Any count | Items lacking comments | Missing exports |
+|-------------------|-----------|------------------------|-----------------|
+| 58 | 1 | 58 | 0 |
+
+## Common
+
+### Functions
+
+
+### Interfaces
+
+
+### Enums
+
+
diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx
index 0b32efe452eec..3e87b3f8c6050 100644
--- a/api_docs/kbn_search_response_warnings.mdx
+++ b/api_docs/kbn_search_response_warnings.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings
title: "@kbn/search-response-warnings"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/search-response-warnings plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings']
---
import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json';
diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx
index 623bc4266bf5c..f26cfb956a788 100644
--- a/api_docs/kbn_security_solution_navigation.mdx
+++ b/api_docs/kbn_security_solution_navigation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation
title: "@kbn/security-solution-navigation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/security-solution-navigation plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation']
---
import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json';
diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx
index 9583e3ef0fb43..0e1e2e985f6da 100644
--- a/api_docs/kbn_security_solution_side_nav.mdx
+++ b/api_docs/kbn_security_solution_side_nav.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav
title: "@kbn/security-solution-side-nav"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/security-solution-side-nav plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-side-nav']
---
import kbnSecuritySolutionSideNavObj from './kbn_security_solution_side_nav.devdocs.json';
diff --git a/api_docs/kbn_security_solution_storybook_config.mdx b/api_docs/kbn_security_solution_storybook_config.mdx
index 2440a3944ddbb..732102e12c3ca 100644
--- a/api_docs/kbn_security_solution_storybook_config.mdx
+++ b/api_docs/kbn_security_solution_storybook_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config
title: "@kbn/security-solution-storybook-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/security-solution-storybook-config plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config']
---
import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx
index 9595b7a37f121..72e9dd7eea385 100644
--- a/api_docs/kbn_securitysolution_autocomplete.mdx
+++ b/api_docs/kbn_securitysolution_autocomplete.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete
title: "@kbn/securitysolution-autocomplete"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-autocomplete plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete']
---
import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_data_table.mdx b/api_docs/kbn_securitysolution_data_table.mdx
index 7213ff9772688..5f53c5d68af4d 100644
--- a/api_docs/kbn_securitysolution_data_table.mdx
+++ b/api_docs/kbn_securitysolution_data_table.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table
title: "@kbn/securitysolution-data-table"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-data-table plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-data-table']
---
import kbnSecuritysolutionDataTableObj from './kbn_securitysolution_data_table.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx
index 069e8ff637f39..75d8f2ed61706 100644
--- a/api_docs/kbn_securitysolution_ecs.mdx
+++ b/api_docs/kbn_securitysolution_ecs.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs
title: "@kbn/securitysolution-ecs"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-ecs plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs']
---
import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx
index 41437d8916633..bee1e5ea71008 100644
--- a/api_docs/kbn_securitysolution_es_utils.mdx
+++ b/api_docs/kbn_securitysolution_es_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils
title: "@kbn/securitysolution-es-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-es-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils']
---
import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx
index 07499f581ae30..505068d8f0ea0 100644
--- a/api_docs/kbn_securitysolution_exception_list_components.mdx
+++ b/api_docs/kbn_securitysolution_exception_list_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components
title: "@kbn/securitysolution-exception-list-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-exception-list-components plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components']
---
import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx
index 5f071496fdf97..b99993e1733a1 100644
--- a/api_docs/kbn_securitysolution_grouping.mdx
+++ b/api_docs/kbn_securitysolution_grouping.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping
title: "@kbn/securitysolution-grouping"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-grouping plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping']
---
import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx
index 2c4d0d162fcd0..d7b18fa65d0e7 100644
--- a/api_docs/kbn_securitysolution_hook_utils.mdx
+++ b/api_docs/kbn_securitysolution_hook_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils
title: "@kbn/securitysolution-hook-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-hook-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils']
---
import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx
index b88dd85e3e168..ecff7330420c0 100644
--- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types
title: "@kbn/securitysolution-io-ts-alerting-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types']
---
import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx
index 1ec08956dc1c3..634387f421f82 100644
--- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types
title: "@kbn/securitysolution-io-ts-list-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-list-types plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types']
---
import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx
index 32a1abbecab30..10b1efea3a74a 100644
--- a/api_docs/kbn_securitysolution_io_ts_types.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types
title: "@kbn/securitysolution-io-ts-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-types plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types']
---
import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx
index afacfe6725778..d233160a0805b 100644
--- a/api_docs/kbn_securitysolution_io_ts_utils.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils
title: "@kbn/securitysolution-io-ts-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils']
---
import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx
index f3cc8580e00ad..bb1e234f57577 100644
--- a/api_docs/kbn_securitysolution_list_api.mdx
+++ b/api_docs/kbn_securitysolution_list_api.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api
title: "@kbn/securitysolution-list-api"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-api plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api']
---
import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_list_constants.devdocs.json b/api_docs/kbn_securitysolution_list_constants.devdocs.json
index 90a4d358f937e..cdd32ded1156e 100644
--- a/api_docs/kbn_securitysolution_list_constants.devdocs.json
+++ b/api_docs/kbn_securitysolution_list_constants.devdocs.json
@@ -307,14 +307,6 @@
"plugin": "securitySolution",
"path": "x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts"
},
- {
- "plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/telemetry/tasks/security_lists.ts"
- },
- {
- "plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/telemetry/tasks/security_lists.ts"
- },
{
"plugin": "securitySolution",
"path": "x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts"
@@ -343,6 +335,14 @@
"plugin": "securitySolution",
"path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/event_filter_validator.ts"
},
+ {
+ "plugin": "securitySolution",
+ "path": "x-pack/plugins/security_solution/server/lib/telemetry/tasks/security_lists.ts"
+ },
+ {
+ "plugin": "securitySolution",
+ "path": "x-pack/plugins/security_solution/server/lib/telemetry/tasks/security_lists.ts"
+ },
{
"plugin": "securitySolution",
"path": "x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts"
@@ -842,27 +842,27 @@
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts"
+ "path": "x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts"
+ "path": "x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts"
+ "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts"
+ "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts"
},
{
"plugin": "securitySolution",
- "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts"
+ "path": "x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts"
},
{
"plugin": "lists",
diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx
index ccb8df22753ba..0bcfd6c36d981 100644
--- a/api_docs/kbn_securitysolution_list_constants.mdx
+++ b/api_docs/kbn_securitysolution_list_constants.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants
title: "@kbn/securitysolution-list-constants"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-constants plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants']
---
import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx
index 96be46073e76d..83f801a1d48ee 100644
--- a/api_docs/kbn_securitysolution_list_hooks.mdx
+++ b/api_docs/kbn_securitysolution_list_hooks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks
title: "@kbn/securitysolution-list-hooks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-hooks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks']
---
import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx
index 98f8f90c95b93..c82afd82c1f04 100644
--- a/api_docs/kbn_securitysolution_list_utils.mdx
+++ b/api_docs/kbn_securitysolution_list_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils
title: "@kbn/securitysolution-list-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils']
---
import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx
index 79fa8453456a6..0885bd24e42cd 100644
--- a/api_docs/kbn_securitysolution_rules.mdx
+++ b/api_docs/kbn_securitysolution_rules.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules
title: "@kbn/securitysolution-rules"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-rules plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules']
---
import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx
index e84b14427c777..524f9babfb2c3 100644
--- a/api_docs/kbn_securitysolution_t_grid.mdx
+++ b/api_docs/kbn_securitysolution_t_grid.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid
title: "@kbn/securitysolution-t-grid"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-t-grid plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid']
---
import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx
index b4e268f625a16..6973238c08cff 100644
--- a/api_docs/kbn_securitysolution_utils.mdx
+++ b/api_docs/kbn_securitysolution_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils
title: "@kbn/securitysolution-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils']
---
import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json';
diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx
index d6f88427170d1..d52f48a25a3c1 100644
--- a/api_docs/kbn_server_http_tools.mdx
+++ b/api_docs/kbn_server_http_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools
title: "@kbn/server-http-tools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/server-http-tools plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools']
---
import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json';
diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx
index 4bb4d2d9e30ab..8f22bc013e03b 100644
--- a/api_docs/kbn_server_route_repository.mdx
+++ b/api_docs/kbn_server_route_repository.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository
title: "@kbn/server-route-repository"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/server-route-repository plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository']
---
import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json';
diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx
index 92ca70b7f4272..7dae9d8f8e24e 100644
--- a/api_docs/kbn_serverless_project_switcher.mdx
+++ b/api_docs/kbn_serverless_project_switcher.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher
title: "@kbn/serverless-project-switcher"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/serverless-project-switcher plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher']
---
import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json';
diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx
index cc67dcdd1e7a6..d43313bea10f0 100644
--- a/api_docs/kbn_serverless_storybook_config.mdx
+++ b/api_docs/kbn_serverless_storybook_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config
title: "@kbn/serverless-storybook-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/serverless-storybook-config plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-storybook-config']
---
import kbnServerlessStorybookConfigObj from './kbn_serverless_storybook_config.devdocs.json';
diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx
index 25e7d254ef3f7..d3418391ac576 100644
--- a/api_docs/kbn_shared_svg.mdx
+++ b/api_docs/kbn_shared_svg.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg
title: "@kbn/shared-svg"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-svg plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg']
---
import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx
index f6a2868fdd6a6..4ed09053a2834 100644
--- a/api_docs/kbn_shared_ux_avatar_solution.mdx
+++ b/api_docs/kbn_shared_ux_avatar_solution.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution
title: "@kbn/shared-ux-avatar-solution"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-avatar-solution plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution']
---
import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx
index 03eb2ad4638da..b31a275f9b7c5 100644
--- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx
+++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components
title: "@kbn/shared-ux-avatar-user-profile-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components']
---
import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx
index d53a67f3419ca..f06f1cf8aea8a 100644
--- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx
+++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen
title: "@kbn/shared-ux-button-exit-full-screen"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen']
---
import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx
index 93dc5f19a25cb..916c3348d3afd 100644
--- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx
+++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks
title: "@kbn/shared-ux-button-exit-full-screen-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks']
---
import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx
index 97bd6354e74c0..0b4788125472c 100644
--- a/api_docs/kbn_shared_ux_button_toolbar.mdx
+++ b/api_docs/kbn_shared_ux_button_toolbar.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar
title: "@kbn/shared-ux-button-toolbar"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-button-toolbar plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar']
---
import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx
index 0466a03317080..c481463a1ba57 100644
--- a/api_docs/kbn_shared_ux_card_no_data.mdx
+++ b/api_docs/kbn_shared_ux_card_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data
title: "@kbn/shared-ux-card-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-card-no-data plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data']
---
import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx
index 06ad7bbfb6322..b4418ddd30184 100644
--- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks
title: "@kbn/shared-ux-card-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks']
---
import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_chrome_navigation.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx
index 7abcb733de053..8c4ac33b8097f 100644
--- a/api_docs/kbn_shared_ux_chrome_navigation.mdx
+++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation
title: "@kbn/shared-ux-chrome-navigation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-chrome-navigation plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation']
---
import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx
index ac4a26fc135e0..7be2ee9fd2ac4 100644
--- a/api_docs/kbn_shared_ux_file_context.mdx
+++ b/api_docs/kbn_shared_ux_file_context.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context
title: "@kbn/shared-ux-file-context"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-context plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-context']
---
import kbnSharedUxFileContextObj from './kbn_shared_ux_file_context.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_image.mdx b/api_docs/kbn_shared_ux_file_image.mdx
index 2be295b573f50..d08f0b4a25a0a 100644
--- a/api_docs/kbn_shared_ux_file_image.mdx
+++ b/api_docs/kbn_shared_ux_file_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image
title: "@kbn/shared-ux-file-image"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-image plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image']
---
import kbnSharedUxFileImageObj from './kbn_shared_ux_file_image.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_image_mocks.mdx b/api_docs/kbn_shared_ux_file_image_mocks.mdx
index 6ca017f8f2dab..e21163967b9c4 100644
--- a/api_docs/kbn_shared_ux_file_image_mocks.mdx
+++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks
title: "@kbn/shared-ux-file-image-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-image-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image-mocks']
---
import kbnSharedUxFileImageMocksObj from './kbn_shared_ux_file_image_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_mocks.mdx b/api_docs/kbn_shared_ux_file_mocks.mdx
index 2a10fa88f3bf0..6014c2a7a3f57 100644
--- a/api_docs/kbn_shared_ux_file_mocks.mdx
+++ b/api_docs/kbn_shared_ux_file_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks
title: "@kbn/shared-ux-file-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks']
---
import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx
index 5857b29e6040a..cc38dfdd15660 100644
--- a/api_docs/kbn_shared_ux_file_picker.mdx
+++ b/api_docs/kbn_shared_ux_file_picker.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker
title: "@kbn/shared-ux-file-picker"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-picker plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker']
---
import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_types.mdx b/api_docs/kbn_shared_ux_file_types.mdx
index d3743f864ff86..90aee2b629d87 100644
--- a/api_docs/kbn_shared_ux_file_types.mdx
+++ b/api_docs/kbn_shared_ux_file_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types
title: "@kbn/shared-ux-file-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-types plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-types']
---
import kbnSharedUxFileTypesObj from './kbn_shared_ux_file_types.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx
index c191c2e722da1..19b6d30e92f40 100644
--- a/api_docs/kbn_shared_ux_file_upload.mdx
+++ b/api_docs/kbn_shared_ux_file_upload.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload
title: "@kbn/shared-ux-file-upload"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-upload plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload']
---
import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx
index f25b052638dac..855065b3c546c 100644
--- a/api_docs/kbn_shared_ux_file_util.mdx
+++ b/api_docs/kbn_shared_ux_file_util.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util
title: "@kbn/shared-ux-file-util"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-util plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-util']
---
import kbnSharedUxFileUtilObj from './kbn_shared_ux_file_util.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx
index 0b0d19fa03515..051325f027687 100644
--- a/api_docs/kbn_shared_ux_link_redirect_app.mdx
+++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app
title: "@kbn/shared-ux-link-redirect-app"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-link-redirect-app plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app']
---
import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx
index 191816be2d014..68a5fd50b22e6 100644
--- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx
+++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks
title: "@kbn/shared-ux-link-redirect-app-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks']
---
import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx
index 65807653635c4..57584d8c45566 100644
--- a/api_docs/kbn_shared_ux_markdown.mdx
+++ b/api_docs/kbn_shared_ux_markdown.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown
title: "@kbn/shared-ux-markdown"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-markdown plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown']
---
import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx
index aa189dde428b6..1d59c1e39b230 100644
--- a/api_docs/kbn_shared_ux_markdown_mocks.mdx
+++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks
title: "@kbn/shared-ux-markdown-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-markdown-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks']
---
import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx
index 987504901d1b4..4262068d5b73a 100644
--- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx
+++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data
title: "@kbn/shared-ux-page-analytics-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data']
---
import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx
index c8e96f9f7e58c..043ef33f5a2ec 100644
--- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks
title: "@kbn/shared-ux-page-analytics-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks']
---
import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx
index 6757520fbbd7b..29c9ebd74c535 100644
--- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data
title: "@kbn/shared-ux-page-kibana-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data']
---
import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx
index 8343838209b03..edd3f6fdd3d44 100644
--- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks
title: "@kbn/shared-ux-page-kibana-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks']
---
import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx
index ee3fa6c817397..e5e51fbee1950 100644
--- a/api_docs/kbn_shared_ux_page_kibana_template.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template
title: "@kbn/shared-ux-page-kibana-template"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-template plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template']
---
import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx
index bf2316b91cc93..6762621912c61 100644
--- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks
title: "@kbn/shared-ux-page-kibana-template-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks']
---
import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx
index 706fbe9af537d..0b5e962bada2a 100644
--- a/api_docs/kbn_shared_ux_page_no_data.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data
title: "@kbn/shared-ux-page-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data']
---
import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx
index 6b5eae287adac..6463b8fa6ce51 100644
--- a/api_docs/kbn_shared_ux_page_no_data_config.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config
title: "@kbn/shared-ux-page-no-data-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data-config plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config']
---
import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx
index a44407da272f2..20f1c8ce298bb 100644
--- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks
title: "@kbn/shared-ux-page-no-data-config-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks']
---
import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx
index 54ed5c1f65be8..6fcb266233c22 100644
--- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks
title: "@kbn/shared-ux-page-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks']
---
import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx
index 76c5fb436ed1f..1911d4f89855e 100644
--- a/api_docs/kbn_shared_ux_page_solution_nav.mdx
+++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav
title: "@kbn/shared-ux-page-solution-nav"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-solution-nav plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav']
---
import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx
index 8a8370f9f20ad..ff0c0ae5488b2 100644
--- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx
+++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views
title: "@kbn/shared-ux-prompt-no-data-views"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views']
---
import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx
index 42ddd65e40a7b..a1ed4c6e62bdb 100644
--- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx
+++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks
title: "@kbn/shared-ux-prompt-no-data-views-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks']
---
import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_prompt_not_found.mdx b/api_docs/kbn_shared_ux_prompt_not_found.mdx
index 1a0cc472a697c..1b66a7762f1e1 100644
--- a/api_docs/kbn_shared_ux_prompt_not_found.mdx
+++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found
title: "@kbn/shared-ux-prompt-not-found"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-prompt-not-found plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-not-found']
---
import kbnSharedUxPromptNotFoundObj from './kbn_shared_ux_prompt_not_found.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx
index de731faf58a05..90c0bd813ee90 100644
--- a/api_docs/kbn_shared_ux_router.mdx
+++ b/api_docs/kbn_shared_ux_router.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router
title: "@kbn/shared-ux-router"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-router plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router']
---
import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx
index 52cc79ff350fe..9b3864d0b1974 100644
--- a/api_docs/kbn_shared_ux_router_mocks.mdx
+++ b/api_docs/kbn_shared_ux_router_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks
title: "@kbn/shared-ux-router-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-router-mocks plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks']
---
import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx
index efe1c2182dd8c..0521e491833c3 100644
--- a/api_docs/kbn_shared_ux_storybook_config.mdx
+++ b/api_docs/kbn_shared_ux_storybook_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config
title: "@kbn/shared-ux-storybook-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-storybook-config plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config']
---
import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx
index 99e3e80252965..3a5deaa6d6302 100644
--- a/api_docs/kbn_shared_ux_storybook_mock.mdx
+++ b/api_docs/kbn_shared_ux_storybook_mock.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock
title: "@kbn/shared-ux-storybook-mock"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-storybook-mock plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock']
---
import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx
index 7ceb54db5f4a8..8ae99f3350337 100644
--- a/api_docs/kbn_shared_ux_utility.mdx
+++ b/api_docs/kbn_shared_ux_utility.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility
title: "@kbn/shared-ux-utility"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-utility plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility']
---
import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json';
diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx
index 4a4f12358397b..5227688a1b219 100644
--- a/api_docs/kbn_slo_schema.mdx
+++ b/api_docs/kbn_slo_schema.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema
title: "@kbn/slo-schema"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/slo-schema plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema']
---
import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json';
diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx
index e82fc131c74d1..542e2bfc42646 100644
--- a/api_docs/kbn_some_dev_log.mdx
+++ b/api_docs/kbn_some_dev_log.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log
title: "@kbn/some-dev-log"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/some-dev-log plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log']
---
import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json';
diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx
index b0c10f7b95196..b83de87b09723 100644
--- a/api_docs/kbn_std.mdx
+++ b/api_docs/kbn_std.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std
title: "@kbn/std"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/std plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std']
---
import kbnStdObj from './kbn_std.devdocs.json';
diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx
index f3c99bea3842a..78ebbecd6c50b 100644
--- a/api_docs/kbn_stdio_dev_helpers.mdx
+++ b/api_docs/kbn_stdio_dev_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers
title: "@kbn/stdio-dev-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/stdio-dev-helpers plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers']
---
import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json';
diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx
index e26c93f97b71e..b46c0e4857dc2 100644
--- a/api_docs/kbn_storybook.mdx
+++ b/api_docs/kbn_storybook.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook
title: "@kbn/storybook"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/storybook plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook']
---
import kbnStorybookObj from './kbn_storybook.devdocs.json';
diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx
index d16e67f8a0882..90def865fc161 100644
--- a/api_docs/kbn_telemetry_tools.mdx
+++ b/api_docs/kbn_telemetry_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools
title: "@kbn/telemetry-tools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/telemetry-tools plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools']
---
import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json';
diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx
index fd58c14b823af..028abd82260c6 100644
--- a/api_docs/kbn_test.mdx
+++ b/api_docs/kbn_test.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test
title: "@kbn/test"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/test plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test']
---
import kbnTestObj from './kbn_test.devdocs.json';
diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx
index 87f429af0eddb..bf0fc9365e74c 100644
--- a/api_docs/kbn_test_jest_helpers.mdx
+++ b/api_docs/kbn_test_jest_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers
title: "@kbn/test-jest-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/test-jest-helpers plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers']
---
import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json';
diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx
index 75f48424c636b..3ab3d78f20971 100644
--- a/api_docs/kbn_test_subj_selector.mdx
+++ b/api_docs/kbn_test_subj_selector.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector
title: "@kbn/test-subj-selector"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/test-subj-selector plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector']
---
import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json';
diff --git a/api_docs/kbn_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx
index d28bc1f971dfe..81b7a63e83157 100644
--- a/api_docs/kbn_text_based_editor.mdx
+++ b/api_docs/kbn_text_based_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor
title: "@kbn/text-based-editor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/text-based-editor plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor']
---
import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json';
diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx
index a1e8636cfb21e..80f234ca1c8f2 100644
--- a/api_docs/kbn_tooling_log.mdx
+++ b/api_docs/kbn_tooling_log.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log
title: "@kbn/tooling-log"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/tooling-log plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log']
---
import kbnToolingLogObj from './kbn_tooling_log.devdocs.json';
diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx
index 03efc531c0b36..d57898e4aa344 100644
--- a/api_docs/kbn_ts_projects.mdx
+++ b/api_docs/kbn_ts_projects.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects
title: "@kbn/ts-projects"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ts-projects plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects']
---
import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json';
diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx
index 492a7fc64f029..28245d750fd83 100644
--- a/api_docs/kbn_typed_react_router_config.mdx
+++ b/api_docs/kbn_typed_react_router_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config
title: "@kbn/typed-react-router-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/typed-react-router-config plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config']
---
import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json';
diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx
index 463c4adc60a0c..fde85b93a9a94 100644
--- a/api_docs/kbn_ui_actions_browser.mdx
+++ b/api_docs/kbn_ui_actions_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser
title: "@kbn/ui-actions-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ui-actions-browser plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser']
---
import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json';
diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx
index cb0b11bfb50a7..9d563bfa419df 100644
--- a/api_docs/kbn_ui_shared_deps_src.mdx
+++ b/api_docs/kbn_ui_shared_deps_src.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src
title: "@kbn/ui-shared-deps-src"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ui-shared-deps-src plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src']
---
import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json';
diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx
index 4c866341a5772..d4b173ade27b9 100644
--- a/api_docs/kbn_ui_theme.mdx
+++ b/api_docs/kbn_ui_theme.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme
title: "@kbn/ui-theme"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ui-theme plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme']
---
import kbnUiThemeObj from './kbn_ui_theme.devdocs.json';
diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx
index 1fb51e64915e3..68c4ef006ab9e 100644
--- a/api_docs/kbn_unified_field_list.mdx
+++ b/api_docs/kbn_unified_field_list.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list
title: "@kbn/unified-field-list"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/unified-field-list plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list']
---
import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json';
diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx
index e70185a2d5b64..4c8fc6d92e09a 100644
--- a/api_docs/kbn_url_state.mdx
+++ b/api_docs/kbn_url_state.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-url-state
title: "@kbn/url-state"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/url-state plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/url-state']
---
import kbnUrlStateObj from './kbn_url_state.devdocs.json';
diff --git a/api_docs/kbn_use_tracked_promise.devdocs.json b/api_docs/kbn_use_tracked_promise.devdocs.json
new file mode 100644
index 0000000000000..2e695a7761e9a
--- /dev/null
+++ b/api_docs/kbn_use_tracked_promise.devdocs.json
@@ -0,0 +1,80 @@
+{
+ "id": "@kbn/use-tracked-promise",
+ "client": {
+ "classes": [],
+ "functions": [],
+ "interfaces": [],
+ "enums": [],
+ "misc": [],
+ "objects": []
+ },
+ "server": {
+ "classes": [],
+ "functions": [],
+ "interfaces": [],
+ "enums": [],
+ "misc": [],
+ "objects": []
+ },
+ "common": {
+ "classes": [],
+ "functions": [
+ {
+ "parentPluginId": "@kbn/use-tracked-promise",
+ "id": "def-common.useTrackedPromise",
+ "type": "Function",
+ "tags": [],
+ "label": "useTrackedPromise",
+ "description": [
+ "\nThis hook manages a Promise factory and can create new Promises from it. The\nstate of these Promises is tracked and they can be canceled when superseded\nto avoid race conditions.\n\n```\nconst [requestState, performRequest] = useTrackedPromise(\n {\n cancelPreviousOn: 'resolution',\n createPromise: async (url: string) => {\n return await fetchSomething(url)\n },\n onResolve: response => {\n setSomeState(response.data);\n },\n onReject: response => {\n setSomeError(response);\n },\n },\n [fetchSomething]\n);\n```\n\nThe `onResolve` and `onReject` handlers are registered separately, because\nthe hook will inject a rejection when in case of a canellation. The\n`cancelPreviousOn` attribute can be used to indicate when the preceding\npending promises should be canceled:\n\n'never': No preceding promises will be canceled.\n\n'creation': Any preceding promises will be canceled as soon as a new one is\ncreated.\n\n'settlement': Any preceding promise will be canceled when a newer promise is\nresolved or rejected.\n\n'resolution': Any preceding promise will be canceled when a newer promise is\nresolved.\n\n'rejection': Any preceding promise will be canceled when a newer promise is\nrejected.\n\nAny pending promises will be canceled when the component using the hook is\nunmounted, but their status will not be tracked to avoid React warnings\nabout memory leaks.\n\nThe last argument is a normal React hook dependency list that indicates\nunder which conditions a new reference to the configuration object should be\nused.\n\nThe `onResolve`, `onReject` and possible uncatched errors are only triggered\nif the underlying component is mounted. To ensure they always trigger (i.e.\nif the promise is called in a `useLayoutEffect`) use the `triggerOrThrow`\nattribute:\n\n'whenMounted': (default) they are called only if the component is mounted.\n\n'always': they always call. The consumer is then responsible of ensuring no\nside effects happen if the underlying component is not mounted."
+ ],
+ "signature": [
+ "({ createPromise, onResolve, onReject, cancelPreviousOn, triggerOrThrow, }: UseTrackedPromiseArgs, dependencies: React.DependencyList) => [",
+ "PromiseState",
+ ", (...args: Arguments) => Promise, () => void]"
+ ],
+ "path": "packages/kbn-use-tracked-promise/use_tracked_promise.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "@kbn/use-tracked-promise",
+ "id": "def-common.useTrackedPromise.$1",
+ "type": "Object",
+ "tags": [],
+ "label": "{\n createPromise,\n onResolve = noOp,\n onReject = noOp,\n cancelPreviousOn = 'never',\n triggerOrThrow = 'whenMounted',\n }",
+ "description": [],
+ "signature": [
+ "UseTrackedPromiseArgs"
+ ],
+ "path": "packages/kbn-use-tracked-promise/use_tracked_promise.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ },
+ {
+ "parentPluginId": "@kbn/use-tracked-promise",
+ "id": "def-common.useTrackedPromise.$2",
+ "type": "Object",
+ "tags": [],
+ "label": "dependencies",
+ "description": [],
+ "signature": [
+ "React.DependencyList"
+ ],
+ "path": "packages/kbn-use-tracked-promise/use_tracked_promise.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_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx
new file mode 100644
index 0000000000000..587249dc4c3c1
--- /dev/null
+++ b/api_docs/kbn_use_tracked_promise.mdx
@@ -0,0 +1,30 @@
+---
+####
+#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system.
+#### Reach out in #docs-engineering for more info.
+####
+id: kibKbnUseTrackedPromisePluginApi
+slug: /kibana-dev-docs/api/kbn-use-tracked-promise
+title: "@kbn/use-tracked-promise"
+image: https://source.unsplash.com/400x175/?github
+description: API docs for the @kbn/use-tracked-promise plugin
+date: 2023-08-12
+tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise']
+---
+import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json';
+
+
+
+Contact [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) for questions regarding this plugin.
+
+**Code health stats**
+
+| Public API count | Any count | Items lacking comments | Missing exports |
+|-------------------|-----------|------------------------|-----------------|
+| 3 | 0 | 2 | 1 |
+
+## Common
+
+### Functions
+
+
diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx
index d0736c9957c65..79eb8d26dc5c0 100644
--- a/api_docs/kbn_user_profile_components.mdx
+++ b/api_docs/kbn_user_profile_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components
title: "@kbn/user-profile-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/user-profile-components plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components']
---
import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json';
diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx
index 89ca0031d665b..5ee0f493e1d9c 100644
--- a/api_docs/kbn_utility_types.mdx
+++ b/api_docs/kbn_utility_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types
title: "@kbn/utility-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/utility-types plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types']
---
import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json';
diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx
index e306a57de9c3e..2e3d903f1254a 100644
--- a/api_docs/kbn_utility_types_jest.mdx
+++ b/api_docs/kbn_utility_types_jest.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest
title: "@kbn/utility-types-jest"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/utility-types-jest plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest']
---
import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json';
diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx
index f51f9e1722d7d..02945911ac7fb 100644
--- a/api_docs/kbn_utils.mdx
+++ b/api_docs/kbn_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils
title: "@kbn/utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/utils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils']
---
import kbnUtilsObj from './kbn_utils.devdocs.json';
diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx
index 401ef7887c3f8..58d4e95e6750b 100644
--- a/api_docs/kbn_visualization_ui_components.mdx
+++ b/api_docs/kbn_visualization_ui_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components
title: "@kbn/visualization-ui-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/visualization-ui-components plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components']
---
import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json';
diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx
index 2c4d82820d316..28031effa0e0f 100644
--- a/api_docs/kbn_yarn_lock_validator.mdx
+++ b/api_docs/kbn_yarn_lock_validator.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator
title: "@kbn/yarn-lock-validator"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/yarn-lock-validator plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator']
---
import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json';
diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx
index ad9cc9b230005..4abbb1aa1f065 100644
--- a/api_docs/kibana_overview.mdx
+++ b/api_docs/kibana_overview.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview
title: "kibanaOverview"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kibanaOverview plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview']
---
import kibanaOverviewObj from './kibana_overview.devdocs.json';
diff --git a/api_docs/kibana_react.devdocs.json b/api_docs/kibana_react.devdocs.json
index db6b50d2ea25c..8fbe44a9b89d4 100644
--- a/api_docs/kibana_react.devdocs.json
+++ b/api_docs/kibana_react.devdocs.json
@@ -760,18 +760,6 @@
"plugin": "management",
"path": "src/plugins/management/public/components/management_app/management_app.tsx"
},
- {
- "plugin": "data",
- "path": "src/plugins/data/public/search/session/sessions_mgmt/components/main.tsx"
- },
- {
- "plugin": "data",
- "path": "src/plugins/data/public/search/session/sessions_mgmt/components/main.tsx"
- },
- {
- "plugin": "data",
- "path": "src/plugins/data/public/search/session/sessions_mgmt/components/main.tsx"
- },
{
"plugin": "advancedSettings",
"path": "src/plugins/advanced_settings/public/management_app/components/form/form.tsx"
@@ -844,6 +832,18 @@
"plugin": "savedObjects",
"path": "src/plugins/saved_objects/public/save_modal/show_saved_object_save_modal.tsx"
},
+ {
+ "plugin": "serverless",
+ "path": "x-pack/plugins/serverless/public/plugin.tsx"
+ },
+ {
+ "plugin": "serverless",
+ "path": "x-pack/plugins/serverless/public/plugin.tsx"
+ },
+ {
+ "plugin": "serverless",
+ "path": "x-pack/plugins/serverless/public/plugin.tsx"
+ },
{
"plugin": "visualizations",
"path": "src/plugins/visualizations/public/visualize_app/utils/use/use_visualize_app_state.tsx"
@@ -904,18 +904,6 @@
"plugin": "visualizations",
"path": "src/plugins/visualizations/public/visualize_app/index.tsx"
},
- {
- "plugin": "serverless",
- "path": "x-pack/plugins/serverless/public/plugin.tsx"
- },
- {
- "plugin": "serverless",
- "path": "x-pack/plugins/serverless/public/plugin.tsx"
- },
- {
- "plugin": "serverless",
- "path": "x-pack/plugins/serverless/public/plugin.tsx"
- },
{
"plugin": "controls",
"path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx"
@@ -1317,48 +1305,16 @@
"path": "x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx"
},
{
- "plugin": "discover",
- "path": "src/plugins/discover/public/embeddable/saved_search_embeddable.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/embeddable/saved_search_embeddable.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/embeddable/saved_search_embeddable.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/embeddable/saved_search_embeddable.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/embeddable/saved_search_embeddable.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/main/components/top_nav/show_open_search_panel.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/main/components/top_nav/show_open_search_panel.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/main/components/top_nav/show_open_search_panel.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx"
+ "plugin": "observabilityAIAssistant",
+ "path": "x-pack/plugins/observability_ai_assistant/public/application.tsx"
},
{
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx"
+ "plugin": "observabilityAIAssistant",
+ "path": "x-pack/plugins/observability_ai_assistant/public/application.tsx"
},
{
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx"
+ "plugin": "observabilityAIAssistant",
+ "path": "x-pack/plugins/observability_ai_assistant/public/application.tsx"
},
{
"plugin": "exploratoryView",
@@ -1372,18 +1328,6 @@
"plugin": "exploratoryView",
"path": "x-pack/plugins/exploratory_view/public/application/index.tsx"
},
- {
- "plugin": "observabilityAIAssistant",
- "path": "x-pack/plugins/observability_ai_assistant/public/application.tsx"
- },
- {
- "plugin": "observabilityAIAssistant",
- "path": "x-pack/plugins/observability_ai_assistant/public/application.tsx"
- },
- {
- "plugin": "observabilityAIAssistant",
- "path": "x-pack/plugins/observability_ai_assistant/public/application.tsx"
- },
{
"plugin": "fleet",
"path": "x-pack/plugins/fleet/public/applications/integrations/app.tsx"
@@ -2128,18 +2072,6 @@
"plugin": "console",
"path": "src/plugins/console/public/application/index.tsx"
},
- {
- "plugin": "dataViewManagement",
- "path": "src/plugins/data_view_management/public/management_app/mount_management_section.tsx"
- },
- {
- "plugin": "dataViewManagement",
- "path": "src/plugins/data_view_management/public/management_app/mount_management_section.tsx"
- },
- {
- "plugin": "dataViewManagement",
- "path": "src/plugins/data_view_management/public/management_app/mount_management_section.tsx"
- },
{
"plugin": "filesManagement",
"path": "src/plugins/files_management/public/mount_management_section.tsx"
@@ -3318,14 +3250,6 @@
"plugin": "dataViewEditor",
"path": "src/plugins/data_view_editor/public/shared_imports.ts"
},
- {
- "plugin": "dataViewEditor",
- "path": "src/plugins/data_view_editor/public/open_editor.tsx"
- },
- {
- "plugin": "dataViewEditor",
- "path": "src/plugins/data_view_editor/public/open_editor.tsx"
- },
{
"plugin": "unifiedSearch",
"path": "src/plugins/unified_search/public/query_string_input/query_string_input.tsx"
@@ -3502,14 +3426,6 @@
"plugin": "dataViewFieldEditor",
"path": "src/plugins/data_view_field_editor/public/open_delete_modal.tsx"
},
- {
- "plugin": "dataViewFieldEditor",
- "path": "src/plugins/data_view_field_editor/public/open_editor.tsx"
- },
- {
- "plugin": "dataViewFieldEditor",
- "path": "src/plugins/data_view_field_editor/public/open_editor.tsx"
- },
{
"plugin": "lens",
"path": "x-pack/plugins/lens/public/persistence/saved_objects_utils/confirm_modal_promise.tsx"
@@ -3690,62 +3606,6 @@
"plugin": "observabilityShared",
"path": "x-pack/plugins/observability_shared/public/components/header_menu/header_menu_portal.tsx"
},
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/main/hooks/use_alert_results_toast.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/main/hooks/use_alert_results_toast.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/not_found/not_found_route.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/not_found/not_found_route.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/view_alert/view_alert_utils.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/view_alert/view_alert_utils.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/view_alert/view_alert_utils.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/view_alert/view_alert_utils.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/index.tsx"
- },
- {
- "plugin": "discover",
- "path": "src/plugins/discover/public/application/index.tsx"
- },
{
"plugin": "exploratoryView",
"path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/header/add_to_case_action.tsx"
diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx
index 3ca005f473d61..48cf58efc1528 100644
--- a/api_docs/kibana_react.mdx
+++ b/api_docs/kibana_react.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact
title: "kibanaReact"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kibanaReact plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact']
---
import kibanaReactObj from './kibana_react.devdocs.json';
diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx
index 2e06bfc93237d..d149fc980b32b 100644
--- a/api_docs/kibana_utils.mdx
+++ b/api_docs/kibana_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils
title: "kibanaUtils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kibanaUtils plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils']
---
import kibanaUtilsObj from './kibana_utils.devdocs.json';
diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx
index fa6abbd8d8f43..a5a65bf452426 100644
--- a/api_docs/kubernetes_security.mdx
+++ b/api_docs/kubernetes_security.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity
title: "kubernetesSecurity"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kubernetesSecurity plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity']
---
import kubernetesSecurityObj from './kubernetes_security.devdocs.json';
diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx
index 486ee7fec8656..ed7af268d748f 100644
--- a/api_docs/lens.mdx
+++ b/api_docs/lens.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens
title: "lens"
image: https://source.unsplash.com/400x175/?github
description: API docs for the lens plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens']
---
import lensObj from './lens.devdocs.json';
diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx
index c66783d83f492..319f0c9ee4d81 100644
--- a/api_docs/license_api_guard.mdx
+++ b/api_docs/license_api_guard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard
title: "licenseApiGuard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the licenseApiGuard plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard']
---
import licenseApiGuardObj from './license_api_guard.devdocs.json';
diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx
index cc789ac6e5019..6f1546b039e99 100644
--- a/api_docs/license_management.mdx
+++ b/api_docs/license_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement
title: "licenseManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the licenseManagement plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement']
---
import licenseManagementObj from './license_management.devdocs.json';
diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx
index 00639d8119c07..0a42158074c29 100644
--- a/api_docs/licensing.mdx
+++ b/api_docs/licensing.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing
title: "licensing"
image: https://source.unsplash.com/400x175/?github
description: API docs for the licensing plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing']
---
import licensingObj from './licensing.devdocs.json';
diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx
index 90852e424a2ad..114b87eb14089 100644
--- a/api_docs/lists.mdx
+++ b/api_docs/lists.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists
title: "lists"
image: https://source.unsplash.com/400x175/?github
description: API docs for the lists plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists']
---
import listsObj from './lists.devdocs.json';
diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx
index 9b213c3873a93..e8ca736ab4e65 100644
--- a/api_docs/logs_shared.mdx
+++ b/api_docs/logs_shared.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared
title: "logsShared"
image: https://source.unsplash.com/400x175/?github
description: API docs for the logsShared plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsShared']
---
import logsSharedObj from './logs_shared.devdocs.json';
diff --git a/api_docs/management.mdx b/api_docs/management.mdx
index 4e9247adb679c..875b81df9ba76 100644
--- a/api_docs/management.mdx
+++ b/api_docs/management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management
title: "management"
image: https://source.unsplash.com/400x175/?github
description: API docs for the management plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management']
---
import managementObj from './management.devdocs.json';
diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx
index f4b8727ae554f..64a97f2b21158 100644
--- a/api_docs/maps.mdx
+++ b/api_docs/maps.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps
title: "maps"
image: https://source.unsplash.com/400x175/?github
description: API docs for the maps plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps']
---
import mapsObj from './maps.devdocs.json';
diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx
index 519313b17a929..d38b693d82fda 100644
--- a/api_docs/maps_ems.mdx
+++ b/api_docs/maps_ems.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms
title: "mapsEms"
image: https://source.unsplash.com/400x175/?github
description: API docs for the mapsEms plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms']
---
import mapsEmsObj from './maps_ems.devdocs.json';
diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx
index 45c60a643eaed..68353d63b98f9 100644
--- a/api_docs/ml.mdx
+++ b/api_docs/ml.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml
title: "ml"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ml plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml']
---
import mlObj from './ml.devdocs.json';
diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx
index c733a6d311c24..4e7fc7b6b3d78 100644
--- a/api_docs/monitoring.mdx
+++ b/api_docs/monitoring.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring
title: "monitoring"
image: https://source.unsplash.com/400x175/?github
description: API docs for the monitoring plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring']
---
import monitoringObj from './monitoring.devdocs.json';
diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx
index 4dd1dec3ef6d1..b313dd4272c2e 100644
--- a/api_docs/monitoring_collection.mdx
+++ b/api_docs/monitoring_collection.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection
title: "monitoringCollection"
image: https://source.unsplash.com/400x175/?github
description: API docs for the monitoringCollection plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection']
---
import monitoringCollectionObj from './monitoring_collection.devdocs.json';
diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx
index 7fe10615fad48..6b2fb1f932e7a 100644
--- a/api_docs/navigation.mdx
+++ b/api_docs/navigation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation
title: "navigation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the navigation plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation']
---
import navigationObj from './navigation.devdocs.json';
diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx
index 31f84fbbb482a..6a814080026c1 100644
--- a/api_docs/newsfeed.mdx
+++ b/api_docs/newsfeed.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed
title: "newsfeed"
image: https://source.unsplash.com/400x175/?github
description: API docs for the newsfeed plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed']
---
import newsfeedObj from './newsfeed.devdocs.json';
diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx
index 0868fcb787d8c..e7f46df933026 100644
--- a/api_docs/notifications.mdx
+++ b/api_docs/notifications.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications
title: "notifications"
image: https://source.unsplash.com/400x175/?github
description: API docs for the notifications plugin
-date: 2023-08-11
+date: 2023-08-12
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 8cc7e821fa1a3..0617660cdfa85 100644
--- a/api_docs/observability.devdocs.json
+++ b/api_docs/observability.devdocs.json
@@ -2205,6 +2205,26 @@
"deprecated": false,
"trackAdoption": false
},
+ {
+ "parentPluginId": "observability",
+ "id": "def-public.ObservabilityPublicPluginsSetup.observabilityAIAssistant",
+ "type": "Object",
+ "tags": [],
+ "label": "observabilityAIAssistant",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ObservabilityAIAssistantPluginSetup",
+ "text": "ObservabilityAIAssistantPluginSetup"
+ }
+ ],
+ "path": "x-pack/plugins/observability/public/plugin.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
{
"parentPluginId": "observability",
"id": "def-public.ObservabilityPublicPluginsSetup.share",
@@ -2655,6 +2675,26 @@
"deprecated": false,
"trackAdoption": false
},
+ {
+ "parentPluginId": "observability",
+ "id": "def-public.ObservabilityPublicPluginsStart.observabilityAIAssistant",
+ "type": "Object",
+ "tags": [],
+ "label": "observabilityAIAssistant",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ObservabilityAIAssistantPluginStart",
+ "text": "ObservabilityAIAssistantPluginStart"
+ }
+ ],
+ "path": "x-pack/plugins/observability/public/plugin.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
{
"parentPluginId": "observability",
"id": "def-public.ObservabilityPublicPluginsStart.ruleTypeRegistry",
@@ -14839,6 +14879,22 @@
"initialIsOpen": false
}
],
- "objects": []
+ "objects": [
+ {
+ "parentPluginId": "observability",
+ "id": "def-common.observabilityPaths",
+ "type": "Object",
+ "tags": [],
+ "label": "observabilityPaths",
+ "description": [],
+ "signature": [
+ "{ alerts: string; alertDetails: (alertId: string) => string; rules: string; ruleDetails: (ruleId: string) => string; slos: string; slosWelcome: string; sloCreate: string; sloCreateWithEncodedForm: (encodedParams: string) => string; sloEdit: (sloId: string) => string; sloDetails: (sloId: string, instanceId?: string | undefined) => string; }"
+ ],
+ "path": "x-pack/plugins/observability/common/index.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ }
+ ]
}
}
\ No newline at end of file
diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx
index bc3cd0aa831f4..b98a4c87c1f75 100644
--- a/api_docs/observability.mdx
+++ b/api_docs/observability.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability
title: "observability"
image: https://source.unsplash.com/400x175/?github
description: API docs for the observability plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability']
---
import observabilityObj from './observability.devdocs.json';
@@ -21,7 +21,7 @@ Contact [@elastic/actionable-observability](https://github.com/orgs/elastic/team
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 508 | 45 | 501 | 16 |
+| 511 | 45 | 504 | 16 |
## Client
@@ -62,6 +62,9 @@ Contact [@elastic/actionable-observability](https://github.com/orgs/elastic/team
## Common
+### Objects
+
+
### Functions
diff --git a/api_docs/observability_a_i_assistant.devdocs.json b/api_docs/observability_a_i_assistant.devdocs.json
index f2fd46f618d93..355f2bb93edc9 100644
--- a/api_docs/observability_a_i_assistant.devdocs.json
+++ b/api_docs/observability_a_i_assistant.devdocs.json
@@ -43,6 +43,38 @@
],
"initialIsOpen": false
},
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantActionMenuItem",
+ "type": "Function",
+ "tags": [],
+ "label": "ObservabilityAIAssistantActionMenuItem",
+ "description": [],
+ "signature": [
+ "React.ForwardRefExoticComponent>"
+ ],
+ "path": "x-pack/plugins/observability_ai_assistant/public/index.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "returnComment": [],
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantActionMenuItem.$1",
+ "type": "Uncategorized",
+ "tags": [],
+ "label": "props",
+ "description": [],
+ "signature": [
+ "P"
+ ],
+ "path": "node_modules/@types/react/index.d.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ],
+ "initialIsOpen": false
+ },
{
"parentPluginId": "observabilityAIAssistant",
"id": "def-public.ObservabilityAIAssistantProvider",
@@ -94,6 +126,25 @@
"children": [],
"returnComment": [],
"initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.useObservabilityAIAssistantOptional",
+ "type": "Function",
+ "tags": [],
+ "label": "useObservabilityAIAssistantOptional",
+ "description": [],
+ "signature": [
+ "() => ",
+ "ObservabilityAIAssistantService",
+ " | undefined"
+ ],
+ "path": "x-pack/plugins/observability_ai_assistant/public/hooks/use_observability_ai_assistant.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [],
+ "returnComment": [],
+ "initialIsOpen": false
}
],
"interfaces": [
diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx
index 41c9829cb7a69..cce6161dff982 100644
--- a/api_docs/observability_a_i_assistant.mdx
+++ b/api_docs/observability_a_i_assistant.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant
title: "observabilityAIAssistant"
image: https://source.unsplash.com/400x175/?github
description: API docs for the observabilityAIAssistant plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant']
---
import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json';
@@ -21,7 +21,7 @@ Contact [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 45 | 0 | 43 | 7 |
+| 48 | 0 | 45 | 7 |
## Client
diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx
index 4b6ef8413d5ee..4286b7108c9bb 100644
--- a/api_docs/observability_onboarding.mdx
+++ b/api_docs/observability_onboarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding
title: "observabilityOnboarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the observabilityOnboarding plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding']
---
import observabilityOnboardingObj from './observability_onboarding.devdocs.json';
diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx
index 1a51ae011f14f..381f6d110b7b6 100644
--- a/api_docs/observability_shared.mdx
+++ b/api_docs/observability_shared.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared
title: "observabilityShared"
image: https://source.unsplash.com/400x175/?github
description: API docs for the observabilityShared plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared']
---
import observabilitySharedObj from './observability_shared.devdocs.json';
diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx
index 2a9c8b001d4ac..7d8d56d68474a 100644
--- a/api_docs/osquery.mdx
+++ b/api_docs/osquery.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery
title: "osquery"
image: https://source.unsplash.com/400x175/?github
description: API docs for the osquery plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery']
---
import osqueryObj from './osquery.devdocs.json';
diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx
index c565083087ea6..e03859252f5de 100644
--- a/api_docs/plugin_directory.mdx
+++ b/api_docs/plugin_directory.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory
slug: /kibana-dev-docs/api-meta/plugin-api-directory
title: Directory
description: Directory of public APIs available through plugins or packages.
-date: 2023-08-11
+date: 2023-08-12
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 |
|--------------|----------|------------------------|
-| 660 | 550 | 39 |
+| 662 | 552 | 39 |
### Public API health stats
| API Count | Any Count | Missing comments | Missing exports |
|--------------|----------|-----------------|--------|
-| 71887 | 556 | 61394 | 1474 |
+| 71956 | 558 | 61461 | 1476 |
## Plugin Directory
@@ -74,7 +74,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 115 | 3 | 111 | 3 |
| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | The Event Annotation service contains expressions for event annotations | 191 | 30 | 191 | 2 |
| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 111 | 0 | 111 | 11 |
-| | [@elastic/uptime](https://github.com/orgs/elastic/teams/uptime) | - | 131 | 1 | 131 | 14 |
+| | [@elastic/uptime](https://github.com/orgs/elastic/teams/uptime) | - | 132 | 1 | 132 | 14 |
| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'error' renderer to expressions | 17 | 0 | 15 | 2 |
| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression Gauge plugin adds a `gauge` renderer and function to the expression plugin. The renderer will display the `gauge` chart. | 59 | 0 | 59 | 2 |
| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression Heatmap plugin adds a `heatmap` renderer and function to the expression plugin. The renderer will display the `heatmap` chart. | 112 | 14 | 108 | 2 |
@@ -132,8 +132,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 34 | 0 | 34 | 2 |
| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 17 | 0 | 17 | 0 |
| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 1 |
-| | [@elastic/actionable-observability](https://github.com/orgs/elastic/teams/actionable-observability) | - | 508 | 45 | 501 | 16 |
-| | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 45 | 0 | 43 | 7 |
+| | [@elastic/actionable-observability](https://github.com/orgs/elastic/teams/actionable-observability) | - | 511 | 45 | 504 | 16 |
+| | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 48 | 0 | 45 | 7 |
| | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 14 | 0 | 14 | 0 |
| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 277 | 1 | 276 | 11 |
| | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 24 | 0 | 24 | 7 |
@@ -155,7 +155,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [@elastic/kibana-reporting-services](https://github.com/orgs/elastic/teams/kibana-reporting-services) | Kibana Screenshotting Plugin | 27 | 0 | 8 | 5 |
| searchprofiler | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 |
| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 270 | 0 | 87 | 3 |
-| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 194 | 2 | 128 | 32 |
+| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 195 | 3 | 129 | 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. | 6 | 0 | 6 | 0 |
| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | The core Serverless plugin, providing APIs to Serverless Project plugins. | 17 | 0 | 16 | 0 |
@@ -517,6 +517,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) | - | 107 | 0 | 104 | 0 |
| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 |
+| | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 58 | 1 | 58 | 0 |
| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 16 | 0 | 8 | 0 |
| | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 44 | 0 | 41 | 0 |
| | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 27 | 0 | 21 | 0 |
@@ -601,6 +602,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 7 | 0 | 6 | 0 |
| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the field list and field stats which can be integrated into apps | 306 | 0 | 277 | 9 |
| | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 4 | 0 | 0 | 0 |
+| | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | - | 3 | 0 | 2 | 1 |
| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 80 | 0 | 21 | 2 |
| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 36 | 0 | 15 | 1 |
| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 2 | 0 |
diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx
index bc1e2cafe21af..56e2d05ddfbcb 100644
--- a/api_docs/presentation_util.mdx
+++ b/api_docs/presentation_util.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil
title: "presentationUtil"
image: https://source.unsplash.com/400x175/?github
description: API docs for the presentationUtil plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil']
---
import presentationUtilObj from './presentation_util.devdocs.json';
diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx
index 34101cd5cb069..6aa37196c1e50 100644
--- a/api_docs/profiling.mdx
+++ b/api_docs/profiling.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling
title: "profiling"
image: https://source.unsplash.com/400x175/?github
description: API docs for the profiling plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling']
---
import profilingObj from './profiling.devdocs.json';
diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx
index d7d1030ac7b00..70477c95e2605 100644
--- a/api_docs/remote_clusters.mdx
+++ b/api_docs/remote_clusters.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters
title: "remoteClusters"
image: https://source.unsplash.com/400x175/?github
description: API docs for the remoteClusters plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters']
---
import remoteClustersObj from './remote_clusters.devdocs.json';
diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx
index 69b50036a8c52..a36fe1b1ff6e7 100644
--- a/api_docs/reporting.mdx
+++ b/api_docs/reporting.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting
title: "reporting"
image: https://source.unsplash.com/400x175/?github
description: API docs for the reporting plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting']
---
import reportingObj from './reporting.devdocs.json';
diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx
index 640d8b84d4788..d1a18117b3ddb 100644
--- a/api_docs/rollup.mdx
+++ b/api_docs/rollup.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup
title: "rollup"
image: https://source.unsplash.com/400x175/?github
description: API docs for the rollup plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup']
---
import rollupObj from './rollup.devdocs.json';
diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx
index 928d8e5404902..a34a7054fffee 100644
--- a/api_docs/rule_registry.mdx
+++ b/api_docs/rule_registry.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry
title: "ruleRegistry"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ruleRegistry plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry']
---
import ruleRegistryObj from './rule_registry.devdocs.json';
diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx
index 3ff6d1e7ec70e..561a3cfcac513 100644
--- a/api_docs/runtime_fields.mdx
+++ b/api_docs/runtime_fields.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields
title: "runtimeFields"
image: https://source.unsplash.com/400x175/?github
description: API docs for the runtimeFields plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields']
---
import runtimeFieldsObj from './runtime_fields.devdocs.json';
diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx
index 88f0af9217efd..834e600d941e3 100644
--- a/api_docs/saved_objects.mdx
+++ b/api_docs/saved_objects.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects
title: "savedObjects"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjects plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects']
---
import savedObjectsObj from './saved_objects.devdocs.json';
diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx
index c454fe88acce3..5aac2032cf1b4 100644
--- a/api_docs/saved_objects_finder.mdx
+++ b/api_docs/saved_objects_finder.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder
title: "savedObjectsFinder"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsFinder plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder']
---
import savedObjectsFinderObj from './saved_objects_finder.devdocs.json';
diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx
index f07fcc48f5adf..4d5e18bd7f2f0 100644
--- a/api_docs/saved_objects_management.mdx
+++ b/api_docs/saved_objects_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement
title: "savedObjectsManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsManagement plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement']
---
import savedObjectsManagementObj from './saved_objects_management.devdocs.json';
diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx
index afd30deea39c6..b56f2119c4fdf 100644
--- a/api_docs/saved_objects_tagging.mdx
+++ b/api_docs/saved_objects_tagging.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging
title: "savedObjectsTagging"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsTagging plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging']
---
import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json';
diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx
index 2c4d590590074..7ce540a3fb368 100644
--- a/api_docs/saved_objects_tagging_oss.mdx
+++ b/api_docs/saved_objects_tagging_oss.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss
title: "savedObjectsTaggingOss"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsTaggingOss plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss']
---
import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json';
diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx
index f678346de945c..aa239b2d362d0 100644
--- a/api_docs/saved_search.mdx
+++ b/api_docs/saved_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch
title: "savedSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedSearch plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch']
---
import savedSearchObj from './saved_search.devdocs.json';
diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx
index c3d511a299449..9a296d6c63361 100644
--- a/api_docs/screenshot_mode.mdx
+++ b/api_docs/screenshot_mode.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode
title: "screenshotMode"
image: https://source.unsplash.com/400x175/?github
description: API docs for the screenshotMode plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode']
---
import screenshotModeObj from './screenshot_mode.devdocs.json';
diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx
index ff681c7a4b7a4..460273a832ebd 100644
--- a/api_docs/screenshotting.mdx
+++ b/api_docs/screenshotting.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting
title: "screenshotting"
image: https://source.unsplash.com/400x175/?github
description: API docs for the screenshotting plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting']
---
import screenshottingObj from './screenshotting.devdocs.json';
diff --git a/api_docs/security.mdx b/api_docs/security.mdx
index a6f7362978786..bac9c542fdaf7 100644
--- a/api_docs/security.mdx
+++ b/api_docs/security.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security
title: "security"
image: https://source.unsplash.com/400x175/?github
description: API docs for the security plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security']
---
import securityObj from './security.devdocs.json';
diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json
index 62ef5e036ebbd..f85bb8c6c3920 100644
--- a/api_docs/security_solution.devdocs.json
+++ b/api_docs/security_solution.devdocs.json
@@ -101,7 +101,7 @@
"label": "experimentalFeatures",
"description": [],
"signature": [
- "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly securityFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly newUserDetailsFlyout: boolean; readonly detectionsCoverageOverview: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly discoverInTimeline: boolean; }"
+ "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly newUserDetailsFlyout: boolean; readonly detectionsCoverageOverview: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly discoverInTimeline: boolean; }"
],
"path": "x-pack/plugins/security_solution/public/plugin.tsx",
"deprecated": false,
@@ -831,7 +831,7 @@
"\nExperimental flag needed to enable the link"
],
"signature": [
- "\"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"chartEmbeddablesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"alertsPreviewChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"alertDetailsPageEnabled\" | \"responseActionUploadEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"securityFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"detectionsCoverageOverview\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"discoverInTimeline\" | undefined"
+ "\"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"chartEmbeddablesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"alertsPreviewChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"alertDetailsPageEnabled\" | \"responseActionUploadEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"detectionsCoverageOverview\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"discoverInTimeline\" | undefined"
],
"path": "x-pack/plugins/security_solution/public/common/links/types.ts",
"deprecated": false,
@@ -911,7 +911,7 @@
"\nExperimental flag needed to disable the link. Opposite of experimentalKey"
],
"signature": [
- "\"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"chartEmbeddablesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"alertsPreviewChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"alertDetailsPageEnabled\" | \"responseActionUploadEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"securityFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"detectionsCoverageOverview\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"discoverInTimeline\" | undefined"
+ "\"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"chartEmbeddablesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"alertsPreviewChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"alertDetailsPageEnabled\" | \"responseActionUploadEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"detectionsCoverageOverview\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"discoverInTimeline\" | undefined"
],
"path": "x-pack/plugins/security_solution/public/common/links/types.ts",
"deprecated": false,
@@ -3330,7 +3330,9 @@
"signature": [
"AppFeatureSecurityKey",
" | ",
- "AppFeatureCasesKey"
+ "AppFeatureCasesKey",
+ " | ",
+ "AppFeatureAssistantKey"
],
"path": "x-pack/plugins/security_solution/common/types/app_features.ts",
"deprecated": false,
@@ -3399,7 +3401,7 @@
"label": "ExperimentalFeatures",
"description": [],
"signature": [
- "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly securityFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly newUserDetailsFlyout: boolean; readonly detectionsCoverageOverview: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly discoverInTimeline: boolean; }"
+ "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly newUserDetailsFlyout: boolean; readonly detectionsCoverageOverview: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly discoverInTimeline: boolean; }"
],
"path": "x-pack/plugins/security_solution/common/experimental_features.ts",
"deprecated": false,
@@ -3450,7 +3452,9 @@
"AppFeatureSecurityKey",
" | ",
"AppFeatureCasesKey",
- ".casesConnectors)[]"
+ ".casesConnectors | ",
+ "AppFeatureAssistantKey",
+ ".assistant)[]"
],
"path": "x-pack/plugins/security_solution/common/types/app_features.ts",
"deprecated": false,
@@ -3467,7 +3471,7 @@
"\nA list of allowed values that can be used in `xpack.securitySolution.enableExperimental`.\nThis object is then used to validate and parse the value entered."
],
"signature": [
- "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly securityFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly newUserDetailsFlyout: boolean; readonly detectionsCoverageOverview: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly discoverInTimeline: boolean; }"
+ "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly newUserDetailsFlyout: boolean; readonly detectionsCoverageOverview: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly discoverInTimeline: boolean; }"
],
"path": "x-pack/plugins/security_solution/common/experimental_features.ts",
"deprecated": false,
@@ -3499,6 +3503,20 @@
"deprecated": false,
"trackAdoption": false
},
+ {
+ "parentPluginId": "securitySolution",
+ "id": "def-common.AppFeatureKey.Unnamed",
+ "type": "Any",
+ "tags": [],
+ "label": "Unnamed",
+ "description": [],
+ "signature": [
+ "any"
+ ],
+ "path": "x-pack/plugins/security_solution/common/types/app_features.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
{
"parentPluginId": "securitySolution",
"id": "def-common.AppFeatureKey.Unnamed",
diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx
index a52378d6e2547..16dcff99cca2d 100644
--- a/api_docs/security_solution.mdx
+++ b/api_docs/security_solution.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution
title: "securitySolution"
image: https://source.unsplash.com/400x175/?github
description: API docs for the securitySolution plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution']
---
import securitySolutionObj from './security_solution.devdocs.json';
@@ -21,7 +21,7 @@ Contact [@elastic/security-solution](https://github.com/orgs/elastic/teams/secur
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 194 | 2 | 128 | 32 |
+| 195 | 3 | 129 | 33 |
## Client
diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx
index fb8248f42f31b..a398c92d10edc 100644
--- a/api_docs/security_solution_ess.mdx
+++ b/api_docs/security_solution_ess.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss
title: "securitySolutionEss"
image: https://source.unsplash.com/400x175/?github
description: API docs for the securitySolutionEss plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionEss']
---
import securitySolutionEssObj from './security_solution_ess.devdocs.json';
diff --git a/api_docs/security_solution_serverless.mdx b/api_docs/security_solution_serverless.mdx
index 27d5f6f3680db..9bacec2e90ca6 100644
--- a/api_docs/security_solution_serverless.mdx
+++ b/api_docs/security_solution_serverless.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless
title: "securitySolutionServerless"
image: https://source.unsplash.com/400x175/?github
description: API docs for the securitySolutionServerless plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionServerless']
---
import securitySolutionServerlessObj from './security_solution_serverless.devdocs.json';
diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx
index 46824e0e10ab0..02dcf82a899f3 100644
--- a/api_docs/serverless.mdx
+++ b/api_docs/serverless.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless
title: "serverless"
image: https://source.unsplash.com/400x175/?github
description: API docs for the serverless plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless']
---
import serverlessObj from './serverless.devdocs.json';
diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx
index a2fdf5819cb29..bd37d46f955a3 100644
--- a/api_docs/serverless_observability.mdx
+++ b/api_docs/serverless_observability.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability
title: "serverlessObservability"
image: https://source.unsplash.com/400x175/?github
description: API docs for the serverlessObservability plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability']
---
import serverlessObservabilityObj from './serverless_observability.devdocs.json';
diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx
index 73da4ad9f9111..d2da6cd5b6d8d 100644
--- a/api_docs/serverless_search.mdx
+++ b/api_docs/serverless_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch
title: "serverlessSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the serverlessSearch plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch']
---
import serverlessSearchObj from './serverless_search.devdocs.json';
diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx
index 550e51cb0f041..1a32abd1ebe55 100644
--- a/api_docs/session_view.mdx
+++ b/api_docs/session_view.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView
title: "sessionView"
image: https://source.unsplash.com/400x175/?github
description: API docs for the sessionView plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView']
---
import sessionViewObj from './session_view.devdocs.json';
diff --git a/api_docs/share.mdx b/api_docs/share.mdx
index 8f81d457f7415..bd11864c17b8d 100644
--- a/api_docs/share.mdx
+++ b/api_docs/share.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share
title: "share"
image: https://source.unsplash.com/400x175/?github
description: API docs for the share plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share']
---
import shareObj from './share.devdocs.json';
diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx
index c9227da961ca2..88777d813d6da 100644
--- a/api_docs/snapshot_restore.mdx
+++ b/api_docs/snapshot_restore.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore
title: "snapshotRestore"
image: https://source.unsplash.com/400x175/?github
description: API docs for the snapshotRestore plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore']
---
import snapshotRestoreObj from './snapshot_restore.devdocs.json';
diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx
index 66df012cb9f09..14719df673333 100644
--- a/api_docs/spaces.mdx
+++ b/api_docs/spaces.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces
title: "spaces"
image: https://source.unsplash.com/400x175/?github
description: API docs for the spaces plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces']
---
import spacesObj from './spaces.devdocs.json';
diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx
index 3bb5ccdb0ff6c..ec5a098414f94 100644
--- a/api_docs/stack_alerts.mdx
+++ b/api_docs/stack_alerts.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts
title: "stackAlerts"
image: https://source.unsplash.com/400x175/?github
description: API docs for the stackAlerts plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts']
---
import stackAlertsObj from './stack_alerts.devdocs.json';
diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx
index 1c0604e5efa4a..64df7d4c05c4b 100644
--- a/api_docs/stack_connectors.mdx
+++ b/api_docs/stack_connectors.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors
title: "stackConnectors"
image: https://source.unsplash.com/400x175/?github
description: API docs for the stackConnectors plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors']
---
import stackConnectorsObj from './stack_connectors.devdocs.json';
diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx
index d04568c1292dd..fcad5738a3b92 100644
--- a/api_docs/task_manager.mdx
+++ b/api_docs/task_manager.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager
title: "taskManager"
image: https://source.unsplash.com/400x175/?github
description: API docs for the taskManager plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager']
---
import taskManagerObj from './task_manager.devdocs.json';
diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx
index bb9985d7df43e..268e918ce7520 100644
--- a/api_docs/telemetry.mdx
+++ b/api_docs/telemetry.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry
title: "telemetry"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetry plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry']
---
import telemetryObj from './telemetry.devdocs.json';
diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx
index f749de82fa114..48bbb281ad7af 100644
--- a/api_docs/telemetry_collection_manager.mdx
+++ b/api_docs/telemetry_collection_manager.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager
title: "telemetryCollectionManager"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryCollectionManager plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager']
---
import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json';
diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx
index feb2deaf6e497..0a7e0b53b0c5e 100644
--- a/api_docs/telemetry_collection_xpack.mdx
+++ b/api_docs/telemetry_collection_xpack.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack
title: "telemetryCollectionXpack"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryCollectionXpack plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack']
---
import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json';
diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx
index 8e25ae8a81f26..d7a3030407eb4 100644
--- a/api_docs/telemetry_management_section.mdx
+++ b/api_docs/telemetry_management_section.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection
title: "telemetryManagementSection"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryManagementSection plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection']
---
import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json';
diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx
index fd4f3c1281454..e5432c9d9a12e 100644
--- a/api_docs/text_based_languages.mdx
+++ b/api_docs/text_based_languages.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages
title: "textBasedLanguages"
image: https://source.unsplash.com/400x175/?github
description: API docs for the textBasedLanguages plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages']
---
import textBasedLanguagesObj from './text_based_languages.devdocs.json';
diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx
index 55eefe39343e3..33ee0ba6a4671 100644
--- a/api_docs/threat_intelligence.mdx
+++ b/api_docs/threat_intelligence.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence
title: "threatIntelligence"
image: https://source.unsplash.com/400x175/?github
description: API docs for the threatIntelligence plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence']
---
import threatIntelligenceObj from './threat_intelligence.devdocs.json';
diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx
index 8db4258b83835..4d1f066beb0ce 100644
--- a/api_docs/timelines.mdx
+++ b/api_docs/timelines.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines
title: "timelines"
image: https://source.unsplash.com/400x175/?github
description: API docs for the timelines plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines']
---
import timelinesObj from './timelines.devdocs.json';
diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx
index 6999f6b6202b6..4221621669584 100644
--- a/api_docs/transform.mdx
+++ b/api_docs/transform.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform
title: "transform"
image: https://source.unsplash.com/400x175/?github
description: API docs for the transform plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform']
---
import transformObj from './transform.devdocs.json';
diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx
index 351eaba5fd360..a5d35ba5329b7 100644
--- a/api_docs/triggers_actions_ui.mdx
+++ b/api_docs/triggers_actions_ui.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi
title: "triggersActionsUi"
image: https://source.unsplash.com/400x175/?github
description: API docs for the triggersActionsUi plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi']
---
import triggersActionsUiObj from './triggers_actions_ui.devdocs.json';
diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx
index 7c1731cd03d4a..9a89aed99fe94 100644
--- a/api_docs/ui_actions.mdx
+++ b/api_docs/ui_actions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions
title: "uiActions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the uiActions plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions']
---
import uiActionsObj from './ui_actions.devdocs.json';
diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx
index 185ea96738c72..3f5a001e174ae 100644
--- a/api_docs/ui_actions_enhanced.mdx
+++ b/api_docs/ui_actions_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced
title: "uiActionsEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the uiActionsEnhanced plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced']
---
import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json';
diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx
index 877e7c31e4a13..2e32a14c65da3 100644
--- a/api_docs/unified_histogram.mdx
+++ b/api_docs/unified_histogram.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram
title: "unifiedHistogram"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedHistogram plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram']
---
import unifiedHistogramObj from './unified_histogram.devdocs.json';
diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx
index 723f9e5f5df8c..f276ec785f7d0 100644
--- a/api_docs/unified_search.mdx
+++ b/api_docs/unified_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch
title: "unifiedSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedSearch plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch']
---
import unifiedSearchObj from './unified_search.devdocs.json';
diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx
index 283f530658649..afa78ca2e124c 100644
--- a/api_docs/unified_search_autocomplete.mdx
+++ b/api_docs/unified_search_autocomplete.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete
title: "unifiedSearch.autocomplete"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedSearch.autocomplete plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete']
---
import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json';
diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx
index 240a3ee4217fc..8640ecf53acc8 100644
--- a/api_docs/uptime.mdx
+++ b/api_docs/uptime.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime
title: "uptime"
image: https://source.unsplash.com/400x175/?github
description: API docs for the uptime plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime']
---
import uptimeObj from './uptime.devdocs.json';
diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx
index 6989741b6a623..cbf5b24609fd9 100644
--- a/api_docs/url_forwarding.mdx
+++ b/api_docs/url_forwarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding
title: "urlForwarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the urlForwarding plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding']
---
import urlForwardingObj from './url_forwarding.devdocs.json';
diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx
index 62f2e922b51d9..c665caa41a09e 100644
--- a/api_docs/usage_collection.mdx
+++ b/api_docs/usage_collection.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection
title: "usageCollection"
image: https://source.unsplash.com/400x175/?github
description: API docs for the usageCollection plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection']
---
import usageCollectionObj from './usage_collection.devdocs.json';
diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx
index cc8aa551fe4b6..19311cde93314 100644
--- a/api_docs/ux.mdx
+++ b/api_docs/ux.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux
title: "ux"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ux plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux']
---
import uxObj from './ux.devdocs.json';
diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx
index 74637a4502f96..45f279ce2052c 100644
--- a/api_docs/vis_default_editor.mdx
+++ b/api_docs/vis_default_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor
title: "visDefaultEditor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visDefaultEditor plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor']
---
import visDefaultEditorObj from './vis_default_editor.devdocs.json';
diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx
index a4f496ee98007..bfdeb2e5a8248 100644
--- a/api_docs/vis_type_gauge.mdx
+++ b/api_docs/vis_type_gauge.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge
title: "visTypeGauge"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeGauge plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge']
---
import visTypeGaugeObj from './vis_type_gauge.devdocs.json';
diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx
index 1a4e4c888f38a..a8829ddf2c375 100644
--- a/api_docs/vis_type_heatmap.mdx
+++ b/api_docs/vis_type_heatmap.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap
title: "visTypeHeatmap"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeHeatmap plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap']
---
import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json';
diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx
index aaa3db43215b1..fac483ca951b7 100644
--- a/api_docs/vis_type_pie.mdx
+++ b/api_docs/vis_type_pie.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie
title: "visTypePie"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypePie plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie']
---
import visTypePieObj from './vis_type_pie.devdocs.json';
diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx
index e39a6a93bec88..da99c5ff8d640 100644
--- a/api_docs/vis_type_table.mdx
+++ b/api_docs/vis_type_table.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable
title: "visTypeTable"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeTable plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable']
---
import visTypeTableObj from './vis_type_table.devdocs.json';
diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx
index c605dec3de204..b43575795ec37 100644
--- a/api_docs/vis_type_timelion.mdx
+++ b/api_docs/vis_type_timelion.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion
title: "visTypeTimelion"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeTimelion plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion']
---
import visTypeTimelionObj from './vis_type_timelion.devdocs.json';
diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx
index 4a3f2055b779d..4b15e8b11a966 100644
--- a/api_docs/vis_type_timeseries.mdx
+++ b/api_docs/vis_type_timeseries.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries
title: "visTypeTimeseries"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeTimeseries plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries']
---
import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json';
diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx
index b9d4679bb363f..abbac2be135be 100644
--- a/api_docs/vis_type_vega.mdx
+++ b/api_docs/vis_type_vega.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega
title: "visTypeVega"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeVega plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega']
---
import visTypeVegaObj from './vis_type_vega.devdocs.json';
diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx
index 44a0526c32a7c..6cc6519a7709d 100644
--- a/api_docs/vis_type_vislib.mdx
+++ b/api_docs/vis_type_vislib.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib
title: "visTypeVislib"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeVislib plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib']
---
import visTypeVislibObj from './vis_type_vislib.devdocs.json';
diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx
index e92d3c910284b..4d9ede267f8e8 100644
--- a/api_docs/vis_type_xy.mdx
+++ b/api_docs/vis_type_xy.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy
title: "visTypeXy"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeXy plugin
-date: 2023-08-11
+date: 2023-08-12
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 b271ba18b64c5..13d63e1387885 100644
--- a/api_docs/visualizations.mdx
+++ b/api_docs/visualizations.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations
title: "visualizations"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visualizations plugin
-date: 2023-08-11
+date: 2023-08-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations']
---
import visualizationsObj from './visualizations.devdocs.json';
From 0284cc158d7687790657c657cd5b3f4489b69b65 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?=
Date: Sat, 12 Aug 2023 23:20:06 +0200
Subject: [PATCH 41/46] [Telemetry] Use header-based versioned APIs instead of
path-based (#159839)
---
.../using-server-logs.asciidoc | 4 +-
.../usage/integration_tests/usage.test.ts | 8 +-
src/plugins/files/tsconfig.json | 1 +
src/plugins/telemetry/common/routes.ts | 44 +++-
src/plugins/telemetry/common/types/index.ts | 1 +
src/plugins/telemetry/public/plugin.ts | 4 +-
.../public/services/telemetry_service.test.ts | 19 +-
.../public/services/telemetry_service.ts | 40 +--
.../server/routes/telemetry_config.ts | 105 +++++---
.../server/routes/telemetry_last_reported.ts | 61 ++---
.../server/routes/telemetry_opt_in.ts | 145 ++++++-----
.../server/routes/telemetry_opt_in_stats.ts | 90 ++++---
.../routes/telemetry_usage_stats.test.ts | 13 +-
.../server/routes/telemetry_usage_stats.ts | 121 +++++----
.../routes/telemetry_user_has_seen_notice.ts | 71 +++---
src/plugins/telemetry/tsconfig.json | 1 +
test/api_integration/apis/telemetry/opt_in.ts | 10 +-
.../apis/telemetry/telemetry_config.ts | 234 ++++++++++--------
.../apis/telemetry/telemetry_last_reported.ts | 24 +-
.../telemetry/telemetry_optin_notice_seen.ts | 13 +-
.../test_suites/telemetry/telemetry.ts | 12 +-
.../api_debug/apis/telemetry/index.js | 2 +-
.../advanced_settings/feature_controls.ts | 8 +-
.../apis/maps/maps_telemetry.ts | 8 +-
.../apis/telemetry/telemetry.ts | 50 +++-
.../apis/telemetry/telemetry_local.ts | 10 +-
.../api_integration/services/usage_api.ts | 9 +-
.../telemetry/telemetry.ts | 25 +-
.../utils/get_stats.ts | 6 +
.../utils/get_stats_url.ts | 2 +-
.../apis/fleet_telemetry.ts | 8 +-
.../apps/infra/logs_source_configuration.ts | 8 +-
.../tests/server.ts | 8 +-
...elemetry.cluster_stats.1600_dataviews.json | 8 +-
.../apis/api.telemetry.cluster_stats.json | 8 +-
...cluster_stats.no_cache.1600_dataviews.json | 8 +-
.../api.telemetry.cluster_stats.no_cache.json | 8 +-
37 files changed, 762 insertions(+), 435 deletions(-)
diff --git a/docs/user/troubleshooting/using-server-logs.asciidoc b/docs/user/troubleshooting/using-server-logs.asciidoc
index ee6f1858478cd..894b229d3f34d 100644
--- a/docs/user/troubleshooting/using-server-logs.asciidoc
+++ b/docs/user/troubleshooting/using-server-logs.asciidoc
@@ -54,12 +54,12 @@ Once you set up the APM infrastructure, you can enable the APM agent and put {ki
*Prerequisites* {kib} logs are configured to be in {ecs-ref}/ecs-reference.html[ECS JSON] format to include tracing identifiers.
Open {kib} Logs and search for an operation you are interested in.
-For example, suppose you want to investigate the response times for queries to the `/api/telemetry/v2/clusters/_stats` {kib} endpoint.
+For example, suppose you want to investigate the response times for queries to the `/internal/telemetry/clusters/_stats` {kib} endpoint.
Open Kibana Logs and search for the HTTP server response for the endpoint. It looks similar to the following (some fields are omitted for brevity).
[source,json]
----
{
- "message":"POST /api/telemetry/v2/clusters/_stats 200 1014ms - 43.2KB",
+ "message":"POST /internal/telemetry/clusters/_stats 200 1014ms - 43.2KB",
"log":{"level":"DEBUG","logger":"http.server.response"},
"trace":{"id":"9b99131a6f66587971ef085ef97dfd07"},
"transaction":{"id":"d0c5bbf14f5febca"}
diff --git a/src/plugins/files/server/usage/integration_tests/usage.test.ts b/src/plugins/files/server/usage/integration_tests/usage.test.ts
index 02cc7dfee55fa..9455453023732 100644
--- a/src/plugins/files/server/usage/integration_tests/usage.test.ts
+++ b/src/plugins/files/server/usage/integration_tests/usage.test.ts
@@ -6,6 +6,10 @@
* Side Public License, v 1.
*/
+import {
+ ELASTIC_HTTP_VERSION_HEADER,
+ X_ELASTIC_INTERNAL_ORIGIN_REQUEST,
+} from '@kbn/core-http-common';
import { setupIntegrationEnvironment, TestEnvironmentUtils } from '../../test_utils';
describe('Files usage telemetry', () => {
@@ -45,7 +49,9 @@ describe('Files usage telemetry', () => {
]);
const { body } = await request
- .post(root, '/api/telemetry/v2/clusters/_stats')
+ .post(root, '/internal/telemetry/clusters/_stats')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ unencrypted: true });
expect(body[0].stats.stack_stats.kibana.plugins.files).toMatchInlineSnapshot(`
diff --git a/src/plugins/files/tsconfig.json b/src/plugins/files/tsconfig.json
index 08d910f23c5e9..a45132f21d592 100644
--- a/src/plugins/files/tsconfig.json
+++ b/src/plugins/files/tsconfig.json
@@ -32,6 +32,7 @@
"@kbn/core-elasticsearch-server-mocks",
"@kbn/core-saved-objects-server-mocks",
"@kbn/logging",
+ "@kbn/core-http-common",
],
"exclude": [
"target/**/*",
diff --git a/src/plugins/telemetry/common/routes.ts b/src/plugins/telemetry/common/routes.ts
index 06d6f746bf2c1..ce4db9c87b5ea 100644
--- a/src/plugins/telemetry/common/routes.ts
+++ b/src/plugins/telemetry/common/routes.ts
@@ -6,7 +6,49 @@
* Side Public License, v 1.
*/
+const BASE_INTERNAL_PATH = '/internal/telemetry';
+
+export const INTERNAL_VERSION = { version: '2' };
+
+/**
+ * Fetch Telemetry Config
+ * @public Kept public and path-based because we know other Elastic products fetch the opt-in status via this endpoint.
+ */
+export const FetchTelemetryConfigRoutePathBasedV2 = '/api/telemetry/v2/config';
+
/**
* Fetch Telemetry Config
+ * @internal
+ */
+export const FetchTelemetryConfigRoute = `${BASE_INTERNAL_PATH}/config`;
+
+/**
+ * GET/PUT Last reported date for Snapshot telemetry
+ * @internal
+ */
+export const LastReportedRoute = `${BASE_INTERNAL_PATH}/last_reported`;
+
+/**
+ * Set user has seen notice
+ * @internal
+ */
+export const UserHasSeenNoticeRoute = `${BASE_INTERNAL_PATH}/userHasSeenNotice`;
+
+/**
+ * Set opt-in/out status
+ * @internal
+ */
+export const OptInRoute = `${BASE_INTERNAL_PATH}/optIn`;
+
+/**
+ * Fetch the Snapshot telemetry report
+ * @internal
+ */
+export const FetchSnapshotTelemetry = `${BASE_INTERNAL_PATH}/clusters/_stats`;
+
+/**
+ * Get Opt-in stats
+ * @internal
+ * @deprecated
*/
-export const FetchTelemetryConfigRoute = '/api/telemetry/v2/config';
+export const GetOptInStatsRoutePathBasedV2 = '/api/telemetry/v2/clusters/_opt_in_stats';
diff --git a/src/plugins/telemetry/common/types/index.ts b/src/plugins/telemetry/common/types/index.ts
index 14b2d3cbefcf4..f03d8f821b1eb 100644
--- a/src/plugins/telemetry/common/types/index.ts
+++ b/src/plugins/telemetry/common/types/index.ts
@@ -8,4 +8,5 @@
export * from './latest';
+export * as v1 from './v2'; // Just so v1 can also be used (but for some reason telemetry endpoints have always been v2 :shrug:)
export * as v2 from './v2';
diff --git a/src/plugins/telemetry/public/plugin.ts b/src/plugins/telemetry/public/plugin.ts
index cf879472a2bb0..c0d0faf0819b0 100644
--- a/src/plugins/telemetry/public/plugin.ts
+++ b/src/plugins/telemetry/public/plugin.ts
@@ -24,7 +24,7 @@ import type { HomePublicPluginSetup } from '@kbn/home-plugin/public';
import { ElasticV3BrowserShipper } from '@kbn/analytics-shippers-elastic-v3-browser';
import { of } from 'rxjs';
-import { FetchTelemetryConfigRoute } from '../common/routes';
+import { FetchTelemetryConfigRoute, INTERNAL_VERSION } from '../common/routes';
import type { v2 } from '../common/types';
import { TelemetrySender, TelemetryService, TelemetryNotifications } from './services';
import { renderWelcomeTelemetryNotice } from './render_welcome_telemetry_notice';
@@ -329,7 +329,7 @@ export class TelemetryPlugin
*/
private async fetchUpdatedConfig(http: HttpStart | HttpSetup): Promise {
const { allowChangingOptInStatus, optIn, sendUsageFrom, telemetryNotifyUserAboutOptInDefault } =
- await http.get(FetchTelemetryConfigRoute);
+ await http.get(FetchTelemetryConfigRoute, INTERNAL_VERSION);
return {
...this.config,
diff --git a/src/plugins/telemetry/public/services/telemetry_service.test.ts b/src/plugins/telemetry/public/services/telemetry_service.test.ts
index 4934495d57d8b..d072d654cceaa 100644
--- a/src/plugins/telemetry/public/services/telemetry_service.test.ts
+++ b/src/plugins/telemetry/public/services/telemetry_service.test.ts
@@ -10,6 +10,12 @@
/* eslint-disable dot-notation */
import { mockTelemetryService } from '../mocks';
+import {
+ FetchSnapshotTelemetry,
+ INTERNAL_VERSION,
+ OptInRoute,
+ UserHasSeenNoticeRoute,
+} from '../../common/routes';
describe('TelemetryService', () => {
describe('fetchTelemetry', () => {
@@ -17,7 +23,8 @@ describe('TelemetryService', () => {
const telemetryService = mockTelemetryService();
await telemetryService.fetchTelemetry();
- expect(telemetryService['http'].post).toBeCalledWith('/api/telemetry/v2/clusters/_stats', {
+ expect(telemetryService['http'].post).toBeCalledWith(FetchSnapshotTelemetry, {
+ ...INTERNAL_VERSION,
body: JSON.stringify({ unencrypted: false, refreshCache: false }),
});
});
@@ -64,7 +71,8 @@ describe('TelemetryService', () => {
const optedIn = true;
await telemetryService.setOptIn(optedIn);
- expect(telemetryService['http'].post).toBeCalledWith('/api/telemetry/v2/optIn', {
+ expect(telemetryService['http'].post).toBeCalledWith(OptInRoute, {
+ ...INTERNAL_VERSION,
body: JSON.stringify({ enabled: optedIn }),
});
});
@@ -77,7 +85,8 @@ describe('TelemetryService', () => {
const optedIn = false;
await telemetryService.setOptIn(optedIn);
- expect(telemetryService['http'].post).toBeCalledWith('/api/telemetry/v2/optIn', {
+ expect(telemetryService['http'].post).toBeCalledWith(OptInRoute, {
+ ...INTERNAL_VERSION,
body: JSON.stringify({ enabled: optedIn }),
});
});
@@ -110,7 +119,7 @@ describe('TelemetryService', () => {
config: { allowChangingOptInStatus: true },
});
telemetryService['http'].post = jest.fn().mockImplementation((url: string) => {
- if (url === '/api/telemetry/v2/optIn') {
+ if (url === OptInRoute) {
throw Error('failed to update opt in.');
}
});
@@ -203,7 +212,7 @@ describe('TelemetryService', () => {
});
telemetryService['http'].put = jest.fn().mockImplementation((url: string) => {
- if (url === '/api/telemetry/v2/userHasSeenNotice') {
+ if (url === UserHasSeenNoticeRoute) {
throw Error('failed to update opt in.');
}
});
diff --git a/src/plugins/telemetry/public/services/telemetry_service.ts b/src/plugins/telemetry/public/services/telemetry_service.ts
index 0629630fea48a..ec67a4e675e26 100644
--- a/src/plugins/telemetry/public/services/telemetry_service.ts
+++ b/src/plugins/telemetry/public/services/telemetry_service.ts
@@ -8,11 +8,19 @@
import { i18n } from '@kbn/i18n';
import type { CoreSetup, CoreStart } from '@kbn/core/public';
+import {
+ LastReportedRoute,
+ INTERNAL_VERSION,
+ OptInRoute,
+ FetchSnapshotTelemetry,
+ UserHasSeenNoticeRoute,
+} from '../../common/routes';
import type { TelemetryPluginConfig } from '../plugin';
-import { getTelemetryChannelEndpoint } from '../../common/telemetry_config/get_telemetry_channel_endpoint';
+import { getTelemetryChannelEndpoint } from '../../common/telemetry_config';
import type {
UnencryptedTelemetryPayload,
EncryptedTelemetryPayload,
+ FetchLastReportedResponse,
} from '../../common/types/latest';
import { PAYLOAD_CONTENT_ENCODING } from '../../common/constants';
@@ -93,8 +101,7 @@ export class TelemetryService {
/** Is the cluster allowed to change the opt-in/out status **/
public getCanChangeOptInStatus = () => {
- const allowChangingOptInStatus = this.config.allowChangingOptInStatus;
- return allowChangingOptInStatus;
+ return this.config.allowChangingOptInStatus;
};
/** Retrieve the opt-in/out notification URL **/
@@ -156,17 +163,18 @@ export class TelemetryService {
};
public fetchLastReported = async (): Promise => {
- const response = await this.http.get<{ lastReported?: number }>(
- '/api/telemetry/v2/last_reported'
+ const response = await this.http.get(
+ LastReportedRoute,
+ INTERNAL_VERSION
);
return response?.lastReported;
};
public updateLastReported = async (): Promise => {
- return this.http.put('/api/telemetry/v2/last_reported');
+ return this.http.put(LastReportedRoute);
};
- /** Fetches an unencrypted telemetry payload so we can show it to the user **/
+ /** Fetches an unencrypted telemetry payload, so we can show it to the user **/
public fetchExample = async (): Promise => {
return await this.fetchTelemetry({ unencrypted: true, refreshCache: true });
};
@@ -174,12 +182,14 @@ export class TelemetryService {
/**
* Fetches telemetry payload
* @param unencrypted Default `false`. Whether the returned payload should be encrypted or not.
+ * @param refreshCache Default `false`. Set to `true` to force the regeneration of the telemetry report.
*/
public fetchTelemetry = async ({
unencrypted = false,
refreshCache = false,
} = {}): Promise => {
- return this.http.post('/api/telemetry/v2/clusters/_stats', {
+ return this.http.post(FetchSnapshotTelemetry, {
+ ...INTERNAL_VERSION,
body: JSON.stringify({ unencrypted, refreshCache }),
});
};
@@ -198,12 +208,10 @@ export class TelemetryService {
try {
// Report the option to the Kibana server to store the settings.
// It returns the encrypted update to send to the telemetry cluster [{cluster_uuid, opt_in_status}]
- const optInStatusPayload = await this.http.post(
- '/api/telemetry/v2/optIn',
- {
- body: JSON.stringify({ enabled: optedIn }),
- }
- );
+ const optInStatusPayload = await this.http.post(OptInRoute, {
+ ...INTERNAL_VERSION,
+ body: JSON.stringify({ enabled: optedIn }),
+ });
if (this.reportOptInStatusChange) {
// Use the response to report about the change to the remote telemetry cluster.
// If it's opt-out, this will be the last communication to the remote service.
@@ -231,7 +239,7 @@ export class TelemetryService {
*/
public setUserHasSeenNotice = async (): Promise => {
try {
- await this.http.put('/api/telemetry/v2/userHasSeenNotice');
+ await this.http.put(UserHasSeenNoticeRoute, INTERNAL_VERSION);
this.userHasSeenOptedInNotice = true;
} catch (error) {
this.notifications.toasts.addError(error, {
@@ -248,7 +256,7 @@ export class TelemetryService {
/**
* Pushes the encrypted payload [{cluster_uuid, opt_in_status}] to the remote telemetry service
- * @param optInPayload [{cluster_uuid, opt_in_status}] encrypted by the server into an array of strings
+ * @param optInStatusPayload [{cluster_uuid, opt_in_status}] encrypted by the server into an array of strings
*/
private reportOptInStatus = async (
optInStatusPayload: EncryptedTelemetryPayload
diff --git a/src/plugins/telemetry/server/routes/telemetry_config.ts b/src/plugins/telemetry/server/routes/telemetry_config.ts
index 60a34d80aad2e..37daef537b568 100644
--- a/src/plugins/telemetry/server/routes/telemetry_config.ts
+++ b/src/plugins/telemetry/server/routes/telemetry_config.ts
@@ -8,9 +8,14 @@
import { type Observable, firstValueFrom } from 'rxjs';
import type { IRouter, SavedObjectsClient } from '@kbn/core/server';
+import { schema } from '@kbn/config-schema';
+import { RequestHandler } from '@kbn/core-http-server';
import type { TelemetryConfigType } from '../config';
import { v2 } from '../../common/types';
-import { FetchTelemetryConfigRoute } from '../../common/routes';
+import {
+ FetchTelemetryConfigRoutePathBasedV2,
+ FetchTelemetryConfigRoute,
+} from '../../common/routes';
import { getTelemetrySavedObject } from '../saved_objects';
import {
getNotifyUserAboutOptInDefault,
@@ -25,54 +30,74 @@ interface RegisterTelemetryConfigRouteOptions {
currentKibanaVersion: string;
savedObjectsInternalClient$: Observable;
}
+
export function registerTelemetryConfigRoutes({
router,
config$,
currentKibanaVersion,
savedObjectsInternalClient$,
}: RegisterTelemetryConfigRouteOptions) {
- // GET to retrieve
- router.get(
- {
- path: FetchTelemetryConfigRoute,
- validate: false,
- },
- async (context, req, res) => {
- const config = await firstValueFrom(config$);
- const savedObjectsInternalClient = await firstValueFrom(savedObjectsInternalClient$);
- const telemetrySavedObject = await getTelemetrySavedObject(savedObjectsInternalClient);
- const allowChangingOptInStatus = getTelemetryAllowChangingOptInStatus({
- configTelemetryAllowChangingOptInStatus: config.allowChangingOptInStatus,
- telemetrySavedObject,
- });
+ const v2Handler: RequestHandler = async (context, req, res) => {
+ const config = await firstValueFrom(config$);
+ const savedObjectsInternalClient = await firstValueFrom(savedObjectsInternalClient$);
+ const telemetrySavedObject = await getTelemetrySavedObject(savedObjectsInternalClient);
+ const allowChangingOptInStatus = getTelemetryAllowChangingOptInStatus({
+ configTelemetryAllowChangingOptInStatus: config.allowChangingOptInStatus,
+ telemetrySavedObject,
+ });
+
+ const optIn = getTelemetryOptIn({
+ configTelemetryOptIn: config.optIn,
+ allowChangingOptInStatus,
+ telemetrySavedObject,
+ currentKibanaVersion,
+ });
- const optIn = getTelemetryOptIn({
- configTelemetryOptIn: config.optIn,
- allowChangingOptInStatus,
- telemetrySavedObject,
- currentKibanaVersion,
- });
+ const sendUsageFrom = getTelemetrySendUsageFrom({
+ configTelemetrySendUsageFrom: config.sendUsageFrom,
+ telemetrySavedObject,
+ });
- const sendUsageFrom = getTelemetrySendUsageFrom({
- configTelemetrySendUsageFrom: config.sendUsageFrom,
- telemetrySavedObject,
- });
+ const telemetryNotifyUserAboutOptInDefault = getNotifyUserAboutOptInDefault({
+ telemetrySavedObject,
+ allowChangingOptInStatus,
+ configTelemetryOptIn: config.optIn,
+ telemetryOptedIn: optIn,
+ });
- const telemetryNotifyUserAboutOptInDefault = getNotifyUserAboutOptInDefault({
- telemetrySavedObject,
- allowChangingOptInStatus,
- configTelemetryOptIn: config.optIn,
- telemetryOptedIn: optIn,
- });
+ const body: v2.FetchTelemetryConfigResponse = {
+ allowChangingOptInStatus,
+ optIn,
+ sendUsageFrom,
+ telemetryNotifyUserAboutOptInDefault,
+ };
+
+ return res.ok({ body });
+ };
+
+ const v2Validations = {
+ response: {
+ 200: {
+ body: schema.object({
+ allowChangingOptInStatus: schema.boolean(),
+ optIn: schema.oneOf([schema.boolean(), schema.literal(null)]),
+ sendUsageFrom: schema.oneOf([schema.literal('server'), schema.literal('browser')]),
+ telemetryNotifyUserAboutOptInDefault: schema.boolean(),
+ }),
+ },
+ },
+ };
- const body: v2.FetchTelemetryConfigResponse = {
- allowChangingOptInStatus,
- optIn,
- sendUsageFrom,
- telemetryNotifyUserAboutOptInDefault,
- };
+ // Register the internal versioned API
+ router.versioned
+ .get({ access: 'internal', path: FetchTelemetryConfigRoute })
+ // Just because it used to be /v2/, we are creating identical v1 and v2.
+ .addVersion({ version: '1', validate: v2Validations }, v2Handler)
+ .addVersion({ version: '2', validate: v2Validations }, v2Handler);
- return res.ok({ body });
- }
- );
+ // Register the deprecated public and path-based for BWC
+ // as we know this one is used by other Elastic products to fetch the opt-in status.
+ router.versioned
+ .get({ access: 'public', path: FetchTelemetryConfigRoutePathBasedV2 })
+ .addVersion({ version: '2023-10-31', validate: v2Validations }, v2Handler);
}
diff --git a/src/plugins/telemetry/server/routes/telemetry_last_reported.ts b/src/plugins/telemetry/server/routes/telemetry_last_reported.ts
index 2e21785b9296d..23c15521d870d 100644
--- a/src/plugins/telemetry/server/routes/telemetry_last_reported.ts
+++ b/src/plugins/telemetry/server/routes/telemetry_last_reported.ts
@@ -6,9 +6,12 @@
* Side Public License, v 1.
*/
+import { schema } from '@kbn/config-schema';
import type { IRouter, SavedObjectsClient } from '@kbn/core/server';
import type { Observable } from 'rxjs';
import { firstValueFrom } from 'rxjs';
+import { RequestHandler } from '@kbn/core-http-server';
+import { LastReportedRoute } from '../../common/routes';
import { v2 } from '../../common/types';
import { getTelemetrySavedObject, updateTelemetrySavedObject } from '../saved_objects';
@@ -17,38 +20,38 @@ export function registerTelemetryLastReported(
savedObjectsInternalClient$: Observable
) {
// GET to retrieve
- router.get(
- {
- path: '/api/telemetry/v2/last_reported',
- validate: false,
- },
- async (context, req, res) => {
- const savedObjectsInternalClient = await firstValueFrom(savedObjectsInternalClient$);
- const telemetrySavedObject = await getTelemetrySavedObject(savedObjectsInternalClient);
+ const v2GetValidations = {
+ response: { 200: { body: schema.object({ lastReported: schema.maybe(schema.number()) }) } },
+ };
- const body: v2.FetchLastReportedResponse = {
- lastReported: telemetrySavedObject && telemetrySavedObject?.lastReported,
- };
+ const v2GetHandler: RequestHandler = async (context, req, res) => {
+ const savedObjectsInternalClient = await firstValueFrom(savedObjectsInternalClient$);
+ const telemetrySavedObject = await getTelemetrySavedObject(savedObjectsInternalClient);
- return res.ok({
- body,
- });
- }
- );
+ const body: v2.FetchLastReportedResponse = {
+ lastReported: telemetrySavedObject && telemetrySavedObject?.lastReported,
+ };
+ return res.ok({ body });
+ };
+
+ router.versioned
+ .get({ access: 'internal', path: LastReportedRoute })
+ // Just because it used to be /v2/, we are creating identical v1 and v2.
+ .addVersion({ version: '1', validate: v2GetValidations }, v2GetHandler)
+ .addVersion({ version: '2', validate: v2GetValidations }, v2GetHandler);
// PUT to update
- router.put(
- {
- path: '/api/telemetry/v2/last_reported',
- validate: false,
- },
- async (context, req, res) => {
- const savedObjectsInternalClient = await firstValueFrom(savedObjectsInternalClient$);
- await updateTelemetrySavedObject(savedObjectsInternalClient, {
- lastReported: Date.now(),
- });
+ const v2PutHandler: RequestHandler = async (context, req, res) => {
+ const savedObjectsInternalClient = await firstValueFrom(savedObjectsInternalClient$);
+ await updateTelemetrySavedObject(savedObjectsInternalClient, {
+ lastReported: Date.now(),
+ });
+ return res.ok();
+ };
- return res.ok();
- }
- );
+ router.versioned
+ .put({ access: 'internal', path: LastReportedRoute })
+ // Just because it used to be /v2/, we are creating identical v1 and v2.
+ .addVersion({ version: '1', validate: false }, v2PutHandler)
+ .addVersion({ version: '2', validate: false }, v2PutHandler);
}
diff --git a/src/plugins/telemetry/server/routes/telemetry_opt_in.ts b/src/plugins/telemetry/server/routes/telemetry_opt_in.ts
index f523031e181ed..689e0cd06fad8 100644
--- a/src/plugins/telemetry/server/routes/telemetry_opt_in.ts
+++ b/src/plugins/telemetry/server/routes/telemetry_opt_in.ts
@@ -9,12 +9,14 @@
import { firstValueFrom, type Observable } from 'rxjs';
import { schema } from '@kbn/config-schema';
import type { IRouter, Logger } from '@kbn/core/server';
-import { SavedObjectsErrorHelpers } from '@kbn/core/server';
+import { RequestHandlerContext, SavedObjectsErrorHelpers } from '@kbn/core/server';
import type {
StatsGetterConfig,
TelemetryCollectionManagerPluginSetup,
} from '@kbn/telemetry-collection-manager-plugin/server';
-import { v2 } from '../../common/types';
+import { RequestHandler } from '@kbn/core-http-server';
+import { OptInRoute } from '../../common/routes';
+import { OptInBody, v2 } from '../../common/types';
import { sendTelemetryOptInStatus } from './telemetry_opt_in_stats';
import {
getTelemetrySavedObject,
@@ -41,78 +43,91 @@ export function registerTelemetryOptInRoutes({
currentKibanaVersion,
telemetryCollectionManager,
}: RegisterOptInRoutesParams) {
- router.post(
- {
- path: '/api/telemetry/v2/optIn',
- validate: {
- body: schema.object({ enabled: schema.boolean() }),
- },
- },
- async (context, req, res) => {
- const newOptInStatus = req.body.enabled;
- const soClient = (await context.core).savedObjects.getClient({
- includedHiddenTypes: [TELEMETRY_SAVED_OBJECT_TYPE],
- });
- const attributes: TelemetrySavedObject = {
- enabled: newOptInStatus,
- lastVersionChecked: currentKibanaVersion,
- };
- const config = await firstValueFrom(config$);
+ const v2Handler: RequestHandler = async (
+ context,
+ req,
+ res
+ ) => {
+ const newOptInStatus = req.body.enabled;
+ const soClient = (await context.core).savedObjects.getClient({
+ includedHiddenTypes: [TELEMETRY_SAVED_OBJECT_TYPE],
+ });
+ const attributes: TelemetrySavedObject = {
+ enabled: newOptInStatus,
+ lastVersionChecked: currentKibanaVersion,
+ };
+ const config = await firstValueFrom(config$);
- let telemetrySavedObject: TelemetrySavedObject | undefined;
- try {
- telemetrySavedObject = await getTelemetrySavedObject(soClient);
- } catch (err) {
- if (SavedObjectsErrorHelpers.isForbiddenError(err)) {
- // If we couldn't get the saved object due to lack of permissions,
- // we can assume the user won't be able to update it either
- return res.forbidden();
- }
+ let telemetrySavedObject: TelemetrySavedObject | undefined;
+ try {
+ telemetrySavedObject = await getTelemetrySavedObject(soClient);
+ } catch (err) {
+ if (SavedObjectsErrorHelpers.isForbiddenError(err)) {
+ // If we couldn't get the saved object due to lack of permissions,
+ // we can assume the user won't be able to update it either
+ return res.forbidden();
}
+ }
- const allowChangingOptInStatus = getTelemetryAllowChangingOptInStatus({
- configTelemetryAllowChangingOptInStatus: config.allowChangingOptInStatus,
- telemetrySavedObject,
+ const allowChangingOptInStatus = getTelemetryAllowChangingOptInStatus({
+ configTelemetryAllowChangingOptInStatus: config.allowChangingOptInStatus,
+ telemetrySavedObject,
+ });
+ if (!allowChangingOptInStatus) {
+ return res.badRequest({
+ body: JSON.stringify({ error: 'Not allowed to change Opt-in Status.' }),
});
- if (!allowChangingOptInStatus) {
- return res.badRequest({
- body: JSON.stringify({ error: 'Not allowed to change Opt-in Status.' }),
- });
- }
+ }
- const statsGetterConfig: StatsGetterConfig = {
- unencrypted: false,
- };
+ const statsGetterConfig: StatsGetterConfig = {
+ unencrypted: false,
+ };
- const optInStatus = await telemetryCollectionManager.getOptInStats(
- newOptInStatus,
+ const optInStatus = await telemetryCollectionManager.getOptInStats(
+ newOptInStatus,
+ statsGetterConfig
+ );
+
+ if (config.sendUsageFrom === 'server') {
+ const { appendServerlessChannelsSuffix, sendUsageTo } = config;
+ sendTelemetryOptInStatus(
+ telemetryCollectionManager,
+ { appendServerlessChannelsSuffix, sendUsageTo, newOptInStatus, currentKibanaVersion },
statsGetterConfig
- );
+ ).catch((err) => {
+ // The server is likely behind a firewall and can't reach the remote service
+ logger.warn(
+ `Failed to notify the telemetry endpoint about the opt-in selection. Possibly blocked by a firewall? - Error: ${err.message}`
+ );
+ });
+ }
- if (config.sendUsageFrom === 'server') {
- const { appendServerlessChannelsSuffix, sendUsageTo } = config;
- sendTelemetryOptInStatus(
- telemetryCollectionManager,
- { appendServerlessChannelsSuffix, sendUsageTo, newOptInStatus, currentKibanaVersion },
- statsGetterConfig
- ).catch((err) => {
- // The server is likely behind a firewall and can't reach the remote service
- logger.warn(
- `Failed to notify the telemetry endpoint about the opt-in selection. Possibly blocked by a firewall? - Error: ${err.message}`
- );
- });
+ try {
+ await updateTelemetrySavedObject(soClient, attributes);
+ } catch (e) {
+ if (SavedObjectsErrorHelpers.isForbiddenError(e)) {
+ return res.forbidden();
}
+ }
- try {
- await updateTelemetrySavedObject(soClient, attributes);
- } catch (e) {
- if (SavedObjectsErrorHelpers.isForbiddenError(e)) {
- return res.forbidden();
- }
- }
+ const body: v2.OptInResponse = optInStatus;
+ return res.ok({ body });
+ };
- const body: v2.OptInResponse = optInStatus;
- return res.ok({ body });
- }
- );
+ const v2Validations = {
+ request: { body: schema.object({ enabled: schema.boolean() }) },
+ response: {
+ 200: {
+ body: schema.arrayOf(
+ schema.object({ clusterUuid: schema.string(), stats: schema.string() })
+ ),
+ },
+ },
+ };
+
+ router.versioned
+ .post({ access: 'internal', path: OptInRoute })
+ // Just because it used to be /v2/, we are creating identical v1 and v2.
+ .addVersion({ version: '1', validate: v2Validations }, v2Handler)
+ .addVersion({ version: '2', validate: v2Validations }, v2Handler);
}
diff --git a/src/plugins/telemetry/server/routes/telemetry_opt_in_stats.ts b/src/plugins/telemetry/server/routes/telemetry_opt_in_stats.ts
index f715c84fc9341..378dbdcc9e495 100644
--- a/src/plugins/telemetry/server/routes/telemetry_opt_in_stats.ts
+++ b/src/plugins/telemetry/server/routes/telemetry_opt_in_stats.ts
@@ -14,6 +14,7 @@ import type {
TelemetryCollectionManagerPluginSetup,
StatsGetterConfig,
} from '@kbn/telemetry-collection-manager-plugin/server';
+import { GetOptInStatsRoutePathBasedV2 } from '../../common/routes';
import type { v2 } from '../../common/types';
import { EncryptedTelemetryPayload, UnencryptedTelemetryPayload } from '../../common/types';
import { getTelemetryChannelEndpoint } from '../../common/telemetry_config';
@@ -62,43 +63,64 @@ export function registerTelemetryOptInStatsRoutes(
router: IRouter,
telemetryCollectionManager: TelemetryCollectionManagerPluginSetup
) {
- router.post(
- {
- path: '/api/telemetry/v2/clusters/_opt_in_stats',
- validate: {
- body: schema.object({
- enabled: schema.boolean(),
- unencrypted: schema.boolean({ defaultValue: true }),
- }),
+ router.versioned
+ .post({
+ access: 'public', // It's not used across Kibana, and I didn't want to remove it in this PR just in case.
+ path: GetOptInStatsRoutePathBasedV2,
+ })
+ .addVersion(
+ {
+ version: '2023-10-31',
+ validate: {
+ request: {
+ body: schema.object({
+ enabled: schema.boolean(),
+ unencrypted: schema.boolean({ defaultValue: true }),
+ }),
+ },
+ response: {
+ 200: {
+ body: schema.arrayOf(
+ schema.object({
+ clusterUuid: schema.string(),
+ stats: schema.object({
+ cluster_uuid: schema.string(),
+ opt_in_status: schema.boolean(),
+ }),
+ })
+ ),
+ },
+ 503: { body: schema.string() },
+ },
+ },
},
- },
- async (context, req, res) => {
- try {
- const newOptInStatus = req.body.enabled;
- const unencrypted = req.body.unencrypted;
+ async (context, req, res) => {
+ try {
+ const newOptInStatus = req.body.enabled;
+ const unencrypted = req.body.unencrypted;
- if (!(await telemetryCollectionManager.shouldGetTelemetry())) {
- // We probably won't reach here because there is a license check in the auth phase of the HTTP requests.
- // But let's keep it here should that changes at any point.
- return res.customError({
- statusCode: 503,
- body: `Can't fetch telemetry at the moment because some services are down. Check the /status page for more details.`,
- });
- }
+ if (!(await telemetryCollectionManager.shouldGetTelemetry())) {
+ // We probably won't reach here because there is a license check in the auth phase of the HTTP requests.
+ // But let's keep it here should that changes at any point.
+ return res.customError({
+ statusCode: 503,
+ body: `Can't fetch telemetry at the moment because some services are down. Check the /status page for more details.`,
+ });
+ }
- const statsGetterConfig: StatsGetterConfig = {
- unencrypted,
- };
+ const statsGetterConfig: StatsGetterConfig = {
+ unencrypted,
+ };
- const optInStatus = await telemetryCollectionManager.getOptInStats(
- newOptInStatus,
- statsGetterConfig
- );
- const body: v2.OptInStatsResponse = optInStatus;
- return res.ok({ body });
- } catch (err) {
- return res.ok({ body: [] });
+ const optInStatus = await telemetryCollectionManager.getOptInStats(
+ newOptInStatus,
+ statsGetterConfig
+ );
+ const body: v2.OptInStatsResponse = optInStatus;
+ return res.ok({ body });
+ } catch (err) {
+ return res.ok({ body: [] });
+ }
}
- }
- );
+ );
}
diff --git a/src/plugins/telemetry/server/routes/telemetry_usage_stats.test.ts b/src/plugins/telemetry/server/routes/telemetry_usage_stats.test.ts
index 152aaa4c9eed9..4cbb1381c0566 100644
--- a/src/plugins/telemetry/server/routes/telemetry_usage_stats.test.ts
+++ b/src/plugins/telemetry/server/routes/telemetry_usage_stats.test.ts
@@ -16,8 +16,9 @@ async function runRequest(
mockRouter: IRouter,
body?: { unencrypted?: boolean; refreshCache?: boolean }
) {
- expect(mockRouter.post).toBeCalled();
- const [, handler] = (mockRouter.post as jest.Mock).mock.calls[0];
+ expect(mockRouter.versioned.post).toBeCalled();
+ const [, handler] = (mockRouter.versioned.post as jest.Mock).mock.results[0].value.addVersion.mock
+ .calls[0];
const mockResponse = httpServerMock.createResponseFactory();
const mockRequest = httpServerMock.createKibanaRequest({ body });
await handler(null, mockRequest, mockResponse);
@@ -49,10 +50,10 @@ describe('registerTelemetryUsageStatsRoutes', () => {
describe('clusters/_stats POST route', () => {
it('registers _stats POST route and accepts body configs', () => {
registerTelemetryUsageStatsRoutes(mockRouter, telemetryCollectionManager, true, getSecurity);
- expect(mockRouter.post).toBeCalledTimes(1);
- const [routeConfig, handler] = (mockRouter.post as jest.Mock).mock.calls[0];
- expect(routeConfig.path).toMatchInlineSnapshot(`"/api/telemetry/v2/clusters/_stats"`);
- expect(Object.keys(routeConfig.validate.body.props)).toEqual(['unencrypted', 'refreshCache']);
+ expect(mockRouter.versioned.post).toBeCalledTimes(1);
+ const [routeConfig, handler] = (mockRouter.versioned.post as jest.Mock).mock.results[0].value
+ .addVersion.mock.calls[0];
+ expect(routeConfig.version).toMatchInlineSnapshot(`"1"`);
expect(handler).toBeInstanceOf(Function);
});
diff --git a/src/plugins/telemetry/server/routes/telemetry_usage_stats.ts b/src/plugins/telemetry/server/routes/telemetry_usage_stats.ts
index 600c6d3ef2c70..a828de911c29a 100644
--- a/src/plugins/telemetry/server/routes/telemetry_usage_stats.ts
+++ b/src/plugins/telemetry/server/routes/telemetry_usage_stats.ts
@@ -13,7 +13,9 @@ import type {
StatsGetterConfig,
} from '@kbn/telemetry-collection-manager-plugin/server';
import type { SecurityPluginStart } from '@kbn/security-plugin/server';
-import { v2 } from '../../common/types';
+import { RequestHandler } from '@kbn/core-http-server';
+import { FetchSnapshotTelemetry } from '../../common/routes';
+import { UsageStatsBody, v2 } from '../../common/types';
export type SecurityGetter = () => SecurityPluginStart | undefined;
@@ -23,64 +25,75 @@ export function registerTelemetryUsageStatsRoutes(
isDev: boolean,
getSecurity: SecurityGetter
) {
- router.post(
- {
- path: '/api/telemetry/v2/clusters/_stats',
- validate: {
- body: schema.object({
- unencrypted: schema.boolean({ defaultValue: false }),
- refreshCache: schema.boolean({ defaultValue: false }),
- }),
- },
- },
- async (context, req, res) => {
- const { unencrypted, refreshCache } = req.body;
+ const v2Handler: RequestHandler = async (
+ context,
+ req,
+ res
+ ) => {
+ const { unencrypted, refreshCache } = req.body;
- if (!(await telemetryCollectionManager.shouldGetTelemetry())) {
- // We probably won't reach here because there is a license check in the auth phase of the HTTP requests.
- // But let's keep it here should that changes at any point.
- return res.customError({
- statusCode: 503,
- body: `Can't fetch telemetry at the moment because some services are down. Check the /status page for more details.`,
- });
- }
+ if (!(await telemetryCollectionManager.shouldGetTelemetry())) {
+ // We probably won't reach here because there is a license check in the auth phase of the HTTP requests.
+ // But let's keep it here should that changes at any point.
+ return res.customError({
+ statusCode: 503,
+ body: `Can't fetch telemetry at the moment because some services are down. Check the /status page for more details.`,
+ });
+ }
- const security = getSecurity();
- // We need to check useRbacForRequest to figure out if ES has security enabled before making the privileges check
- if (security && unencrypted && security.authz.mode.useRbacForRequest(req)) {
- // Normally we would use `options: { tags: ['access:decryptedTelemetry'] }` in the route definition to check authorization for an
- // API action, however, we want to check this conditionally based on the `unencrypted` parameter. In this case we need to use the
- // security API directly to check privileges for this action. Note that the 'decryptedTelemetry' API privilege string is only
- // granted to users that have "Global All" or "Global Read" privileges in Kibana.
- const { checkPrivilegesWithRequest, actions } = security.authz;
- const privileges = { kibana: actions.api.get('decryptedTelemetry') };
- const { hasAllRequested } = await checkPrivilegesWithRequest(req).globally(privileges);
- if (!hasAllRequested) {
- return res.forbidden();
- }
+ const security = getSecurity();
+ // We need to check useRbacForRequest to figure out if ES has security enabled before making the privileges check
+ if (security && unencrypted && security.authz.mode.useRbacForRequest(req)) {
+ // Normally we would use `options: { tags: ['access:decryptedTelemetry'] }` in the route definition to check authorization for an
+ // API action, however, we want to check this conditionally based on the `unencrypted` parameter. In this case we need to use the
+ // security API directly to check privileges for this action. Note that the 'decryptedTelemetry' API privilege string is only
+ // granted to users that have "Global All" or "Global Read" privileges in Kibana.
+ const { checkPrivilegesWithRequest, actions } = security.authz;
+ const privileges = { kibana: actions.api.get('decryptedTelemetry') };
+ const { hasAllRequested } = await checkPrivilegesWithRequest(req).globally(privileges);
+ if (!hasAllRequested) {
+ return res.forbidden();
}
+ }
- try {
- const statsConfig: StatsGetterConfig = {
- unencrypted,
- refreshCache: unencrypted || refreshCache,
- };
+ try {
+ const statsConfig: StatsGetterConfig = {
+ unencrypted,
+ refreshCache: unencrypted || refreshCache,
+ };
- const body: v2.UnencryptedTelemetryPayload = await telemetryCollectionManager.getStats(
- statsConfig
- );
- return res.ok({ body });
- } catch (err) {
- if (isDev) {
- // don't ignore errors when running in dev mode
- throw err;
- }
- if (unencrypted && err.status === 403) {
- return res.forbidden();
- }
- // ignore errors and return empty set
- return res.ok({ body: [] });
+ const body: v2.UnencryptedTelemetryPayload = await telemetryCollectionManager.getStats(
+ statsConfig
+ );
+ return res.ok({ body });
+ } catch (err) {
+ if (isDev) {
+ // don't ignore errors when running in dev mode
+ throw err;
}
+ if (unencrypted && err.status === 403) {
+ return res.forbidden();
+ }
+ // ignore errors and return empty set
+ return res.ok({ body: [] });
}
- );
+ };
+
+ const v2Validations = {
+ request: {
+ body: schema.object({
+ unencrypted: schema.boolean({ defaultValue: false }),
+ refreshCache: schema.boolean({ defaultValue: false }),
+ }),
+ },
+ };
+
+ router.versioned
+ .post({
+ access: 'internal',
+ path: FetchSnapshotTelemetry,
+ })
+ // Just because it used to be /v2/, we are creating identical v1 and v2.
+ .addVersion({ version: '1', validate: v2Validations }, v2Handler)
+ .addVersion({ version: '2', validate: v2Validations }, v2Handler);
}
diff --git a/src/plugins/telemetry/server/routes/telemetry_user_has_seen_notice.ts b/src/plugins/telemetry/server/routes/telemetry_user_has_seen_notice.ts
index d9cb0b981b0a9..b59ada443054d 100644
--- a/src/plugins/telemetry/server/routes/telemetry_user_has_seen_notice.ts
+++ b/src/plugins/telemetry/server/routes/telemetry_user_has_seen_notice.ts
@@ -7,6 +7,9 @@
*/
import type { IRouter } from '@kbn/core/server';
+import { RequestHandler } from '@kbn/core-http-server';
+import { RequestHandlerContext } from '@kbn/core/server';
+import { UserHasSeenNoticeRoute } from '../../common/routes';
import { TELEMETRY_SAVED_OBJECT_TYPE } from '../saved_objects';
import { v2 } from '../../common/types';
import {
@@ -16,38 +19,42 @@ import {
} from '../saved_objects';
export function registerTelemetryUserHasSeenNotice(router: IRouter, currentKibanaVersion: string) {
- router.put(
- {
- path: '/api/telemetry/v2/userHasSeenNotice',
- validate: false,
- },
- async (context, req, res) => {
- const soClient = (await context.core).savedObjects.getClient({
- includedHiddenTypes: [TELEMETRY_SAVED_OBJECT_TYPE],
- });
- const telemetrySavedObject = await getTelemetrySavedObject(soClient);
+ const v2Handler: RequestHandler = async (
+ context,
+ req,
+ res
+ ) => {
+ const soClient = (await context.core).savedObjects.getClient({
+ includedHiddenTypes: [TELEMETRY_SAVED_OBJECT_TYPE],
+ });
+ const telemetrySavedObject = await getTelemetrySavedObject(soClient);
- // update the object with a flag stating that the opt-in notice has been seen
- const updatedAttributes: TelemetrySavedObjectAttributes = {
- ...telemetrySavedObject,
- userHasSeenNotice: true,
- // We need to store that the user was notified in this version.
- // Otherwise, it'll continuously show the banner if previously opted-out.
- lastVersionChecked: currentKibanaVersion,
- };
- await updateTelemetrySavedObject(soClient, updatedAttributes);
+ // update the object with a flag stating that the opt-in notice has been seen
+ const updatedAttributes: TelemetrySavedObjectAttributes = {
+ ...telemetrySavedObject,
+ userHasSeenNotice: true,
+ // We need to store that the user was notified in this version.
+ // Otherwise, it'll continuously show the banner if previously opted-out.
+ lastVersionChecked: currentKibanaVersion,
+ };
+ await updateTelemetrySavedObject(soClient, updatedAttributes);
- const body: v2.Telemetry = {
- allowChangingOptInStatus: updatedAttributes.allowChangingOptInStatus,
- enabled: updatedAttributes.enabled,
- lastReported: updatedAttributes.lastReported,
- lastVersionChecked: updatedAttributes.lastVersionChecked,
- reportFailureCount: updatedAttributes.reportFailureCount,
- reportFailureVersion: updatedAttributes.reportFailureVersion,
- sendUsageFrom: updatedAttributes.sendUsageFrom,
- userHasSeenNotice: updatedAttributes.userHasSeenNotice,
- };
- return res.ok({ body });
- }
- );
+ const body: v2.Telemetry = {
+ allowChangingOptInStatus: updatedAttributes.allowChangingOptInStatus,
+ enabled: updatedAttributes.enabled,
+ lastReported: updatedAttributes.lastReported,
+ lastVersionChecked: updatedAttributes.lastVersionChecked,
+ reportFailureCount: updatedAttributes.reportFailureCount,
+ reportFailureVersion: updatedAttributes.reportFailureVersion,
+ sendUsageFrom: updatedAttributes.sendUsageFrom,
+ userHasSeenNotice: updatedAttributes.userHasSeenNotice,
+ };
+ return res.ok({ body });
+ };
+
+ router.versioned
+ .put({ access: 'internal', path: UserHasSeenNoticeRoute })
+ // Just because it used to be /v2/, we are creating identical v1 and v2.
+ .addVersion({ version: '1', validate: false }, v2Handler)
+ .addVersion({ version: '2', validate: false }, v2Handler);
}
diff --git a/src/plugins/telemetry/tsconfig.json b/src/plugins/telemetry/tsconfig.json
index 7da7e89bae02f..638bfb4f722a7 100644
--- a/src/plugins/telemetry/tsconfig.json
+++ b/src/plugins/telemetry/tsconfig.json
@@ -34,6 +34,7 @@
"@kbn/std",
"@kbn/core-http-browser-mocks",
"@kbn/core-http-browser",
+ "@kbn/core-http-server",
],
"exclude": [
"target/**/*",
diff --git a/test/api_integration/apis/telemetry/opt_in.ts b/test/api_integration/apis/telemetry/opt_in.ts
index 943d7534acc0a..c7d8a42c6e392 100644
--- a/test/api_integration/apis/telemetry/opt_in.ts
+++ b/test/api_integration/apis/telemetry/opt_in.ts
@@ -11,6 +11,10 @@ import expect from '@kbn/expect';
import SuperTest from 'supertest';
import type { KbnClient } from '@kbn/test';
import type { TelemetrySavedObjectAttributes } from '@kbn/telemetry-plugin/server/saved_objects';
+import {
+ ELASTIC_HTTP_VERSION_HEADER,
+ X_ELASTIC_INTERNAL_ORIGIN_REQUEST,
+} from '@kbn/core-http-common';
import type { FtrProviderContext } from '../../ftr_provider_context';
export default function optInTest({ getService }: FtrProviderContext) {
@@ -18,7 +22,7 @@ export default function optInTest({ getService }: FtrProviderContext) {
const kibanaServer = getService('kibanaServer');
const esArchiver = getService('esArchiver');
- describe('/api/telemetry/v2/optIn API', () => {
+ describe('/internal/telemetry/optIn API', () => {
let defaultAttributes: TelemetrySavedObjectAttributes;
let kibanaVersion: string;
before(async () => {
@@ -88,8 +92,10 @@ async function postTelemetryV2OptIn(
statusCode: number
): Promise {
const { body } = await supertest
- .post('/api/telemetry/v2/optIn')
+ .post('/internal/telemetry/optIn')
.set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ enabled: value })
.expect(statusCode);
diff --git a/test/api_integration/apis/telemetry/telemetry_config.ts b/test/api_integration/apis/telemetry/telemetry_config.ts
index f6dd12b0c2a9d..a9a04a3986ba7 100644
--- a/test/api_integration/apis/telemetry/telemetry_config.ts
+++ b/test/api_integration/apis/telemetry/telemetry_config.ts
@@ -7,6 +7,10 @@
*/
import { AxiosError } from 'axios';
+import {
+ ELASTIC_HTTP_VERSION_HEADER,
+ X_ELASTIC_INTERNAL_ORIGIN_REQUEST,
+} from '@kbn/core-http-common';
import type { FtrProviderContext } from '../../ftr_provider_context';
const TELEMETRY_SO_TYPE = 'telemetry';
@@ -16,110 +20,146 @@ export default function telemetryConfigTest({ getService }: FtrProviderContext)
const kbnClient = getService('kibanaServer');
const supertest = getService('supertest');
- describe('/api/telemetry/v2/config API Telemetry config', () => {
- before(async () => {
- try {
- await kbnClient.savedObjects.delete({ type: TELEMETRY_SO_TYPE, id: TELEMETRY_SO_ID });
- } catch (err) {
- const is404Error = err instanceof AxiosError && err.response?.status === 404;
- if (!is404Error) {
- throw err;
- }
- }
- });
-
- it('GET should get the default config', async () => {
- await supertest.get('/api/telemetry/v2/config').set('kbn-xsrf', 'xxx').expect(200, {
- allowChangingOptInStatus: true,
- optIn: null, // the config.js for this FTR sets it to `false`, we are bound to ask again.
- sendUsageFrom: 'server',
- telemetryNotifyUserAboutOptInDefault: false, // it's not opted-in by default (that's what this flag is about)
- });
- });
-
- it('GET should get `true` when opted-in', async () => {
- // Opt-in
- await supertest
- .post('/api/telemetry/v2/optIn')
- .set('kbn-xsrf', 'xxx')
- .send({ enabled: true })
- .expect(200);
-
- await supertest.get('/api/telemetry/v2/config').set('kbn-xsrf', 'xxx').expect(200, {
- allowChangingOptInStatus: true,
- optIn: true,
- sendUsageFrom: 'server',
- telemetryNotifyUserAboutOptInDefault: false,
- });
- });
-
- it('GET should get false when opted-out', async () => {
- // Opt-in
- await supertest
- .post('/api/telemetry/v2/optIn')
- .set('kbn-xsrf', 'xxx')
- .send({ enabled: false })
- .expect(200);
-
- await supertest.get('/api/telemetry/v2/config').set('kbn-xsrf', 'xxx').expect(200, {
- allowChangingOptInStatus: true,
- optIn: false,
- sendUsageFrom: 'server',
- telemetryNotifyUserAboutOptInDefault: false,
- });
- });
-
- describe('From a previous version', function () {
- this.tags(['skipCloud']);
-
- // Get current values
- let attributes: Record;
- let currentVersion: string;
- let previousMinor: string;
-
- before(async () => {
- [{ attributes }, currentVersion] = await Promise.all([
- kbnClient.savedObjects.get({ type: TELEMETRY_SO_TYPE, id: TELEMETRY_SO_ID }),
- kbnClient.version.get(),
- ]);
-
- const [major, minor, patch] = currentVersion.match(/^(\d+)\.(\d+)\.(\d+)/)!.map(parseInt);
- previousMinor = `${minor === 0 ? major - 1 : major}.${
- minor === 0 ? minor : minor - 1
- }.${patch}`;
- });
+ describe('API Telemetry config', () => {
+ ['/api/telemetry/v2/config', '/internal/telemetry/config'].forEach((api) => {
+ describe(`GET ${api}`, () => {
+ const apiVersion = api === '/api/telemetry/v2/config' ? '2023-10-31' : '2';
+ before(async () => {
+ try {
+ await kbnClient.savedObjects.delete({ type: TELEMETRY_SO_TYPE, id: TELEMETRY_SO_ID });
+ } catch (err) {
+ const is404Error = err instanceof AxiosError && err.response?.status === 404;
+ if (!is404Error) {
+ throw err;
+ }
+ }
+ });
- it('GET should get `true` when opted-in in the current version', async () => {
- // Opt-in from a previous version
- await kbnClient.savedObjects.create({
- overwrite: true,
- type: TELEMETRY_SO_TYPE,
- id: TELEMETRY_SO_ID,
- attributes: { ...attributes, enabled: true, lastVersionChecked: previousMinor },
+ it('GET should get the default config', async () => {
+ await supertest
+ .get(api)
+ .set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, apiVersion)
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
+ .expect(200, {
+ allowChangingOptInStatus: true,
+ optIn: null, // the config.js for this FTR sets it to `false`, we are bound to ask again.
+ sendUsageFrom: 'server',
+ telemetryNotifyUserAboutOptInDefault: false, // it's not opted-in by default (that's what this flag is about)
+ });
});
- await supertest.get('/api/telemetry/v2/config').set('kbn-xsrf', 'xxx').expect(200, {
- allowChangingOptInStatus: true,
- optIn: true,
- sendUsageFrom: 'server',
- telemetryNotifyUserAboutOptInDefault: false,
+ it('GET should get `true` when opted-in', async () => {
+ // Opt-in
+ await supertest
+ .post('/internal/telemetry/optIn')
+ .set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
+ .send({ enabled: true })
+ .expect(200);
+
+ await supertest
+ .get(api)
+ .set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, apiVersion)
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
+ .expect(200, {
+ allowChangingOptInStatus: true,
+ optIn: true,
+ sendUsageFrom: 'server',
+ telemetryNotifyUserAboutOptInDefault: false,
+ });
});
- });
- it('GET should get `null` when opted-out in a previous version', async () => {
- // Opt-out from previous version
- await kbnClient.savedObjects.create({
- overwrite: true,
- type: TELEMETRY_SO_TYPE,
- id: TELEMETRY_SO_ID,
- attributes: { ...attributes, enabled: false, lastVersionChecked: previousMinor },
+ it('GET should get false when opted-out', async () => {
+ // Opt-in
+ await supertest
+ .post('/internal/telemetry/optIn')
+ .set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
+ .send({ enabled: false })
+ .expect(200);
+
+ await supertest
+ .get(api)
+ .set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, apiVersion)
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
+ .expect(200, {
+ allowChangingOptInStatus: true,
+ optIn: false,
+ sendUsageFrom: 'server',
+ telemetryNotifyUserAboutOptInDefault: false,
+ });
});
- await supertest.get('/api/telemetry/v2/config').set('kbn-xsrf', 'xxx').expect(200, {
- allowChangingOptInStatus: true,
- optIn: null,
- sendUsageFrom: 'server',
- telemetryNotifyUserAboutOptInDefault: false,
+ describe('From a previous version', function () {
+ this.tags(['skipCloud']);
+
+ // Get current values
+ let attributes: Record;
+ let currentVersion: string;
+ let previousMinor: string;
+
+ before(async () => {
+ [{ attributes }, currentVersion] = await Promise.all([
+ kbnClient.savedObjects.get({ type: TELEMETRY_SO_TYPE, id: TELEMETRY_SO_ID }),
+ kbnClient.version.get(),
+ ]);
+
+ const [major, minor, patch] = currentVersion
+ .match(/^(\d+)\.(\d+)\.(\d+)/)!
+ .map(parseInt);
+ previousMinor = `${minor === 0 ? major - 1 : major}.${
+ minor === 0 ? minor : minor - 1
+ }.${patch}`;
+ });
+
+ it('GET should get `true` when opted-in in the current version', async () => {
+ // Opt-in from a previous version
+ await kbnClient.savedObjects.create({
+ overwrite: true,
+ type: TELEMETRY_SO_TYPE,
+ id: TELEMETRY_SO_ID,
+ attributes: { ...attributes, enabled: true, lastVersionChecked: previousMinor },
+ });
+
+ await supertest
+ .get(api)
+ .set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, apiVersion)
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
+ .expect(200, {
+ allowChangingOptInStatus: true,
+ optIn: true,
+ sendUsageFrom: 'server',
+ telemetryNotifyUserAboutOptInDefault: false,
+ });
+ });
+
+ it('GET should get `null` when opted-out in a previous version', async () => {
+ // Opt-out from previous version
+ await kbnClient.savedObjects.create({
+ overwrite: true,
+ type: TELEMETRY_SO_TYPE,
+ id: TELEMETRY_SO_ID,
+ attributes: { ...attributes, enabled: false, lastVersionChecked: previousMinor },
+ });
+
+ await supertest
+ .get(api)
+ .set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, apiVersion)
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
+ .expect(200, {
+ allowChangingOptInStatus: true,
+ optIn: null,
+ sendUsageFrom: 'server',
+ telemetryNotifyUserAboutOptInDefault: false,
+ });
+ });
});
});
});
diff --git a/test/api_integration/apis/telemetry/telemetry_last_reported.ts b/test/api_integration/apis/telemetry/telemetry_last_reported.ts
index e553fa0218aa1..6d077dd2857d9 100644
--- a/test/api_integration/apis/telemetry/telemetry_last_reported.ts
+++ b/test/api_integration/apis/telemetry/telemetry_last_reported.ts
@@ -7,23 +7,37 @@
*/
import expect from '@kbn/expect';
+import {
+ ELASTIC_HTTP_VERSION_HEADER,
+ X_ELASTIC_INTERNAL_ORIGIN_REQUEST,
+} from '@kbn/core-http-common';
import type { FtrProviderContext } from '../../ftr_provider_context';
export default function optInTest({ getService }: FtrProviderContext) {
const client = getService('kibanaServer');
const supertest = getService('supertest');
- describe('/api/telemetry/v2/last_reported API Telemetry lastReported', () => {
+ describe('/internal/telemetry/last_reported API Telemetry lastReported', () => {
before(async () => {
await client.savedObjects.delete({ type: 'telemetry', id: 'telemetry' });
});
it('GET should return undefined when there is no stored telemetry.lastReported value', async () => {
- await supertest.get('/api/telemetry/v2/last_reported').set('kbn-xsrf', 'xxx').expect(200, {});
+ await supertest
+ .get('/internal/telemetry/last_reported')
+ .set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
+ .expect(200, {});
});
it('PUT should update telemetry.lastReported to now', async () => {
- await supertest.put('/api/telemetry/v2/last_reported').set('kbn-xsrf', 'xxx').expect(200);
+ await supertest
+ .put('/internal/telemetry/last_reported')
+ .set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
+ .expect(200);
const {
attributes: { lastReported },
@@ -46,8 +60,10 @@ export default function optInTest({ getService }: FtrProviderContext) {
expect(lastReported).to.be.a('number');
await supertest
- .get('/api/telemetry/v2/last_reported')
+ .get('/internal/telemetry/last_reported')
.set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.expect(200, { lastReported });
});
});
diff --git a/test/api_integration/apis/telemetry/telemetry_optin_notice_seen.ts b/test/api_integration/apis/telemetry/telemetry_optin_notice_seen.ts
index 53b0d2cadca64..5310e32b87fed 100644
--- a/test/api_integration/apis/telemetry/telemetry_optin_notice_seen.ts
+++ b/test/api_integration/apis/telemetry/telemetry_optin_notice_seen.ts
@@ -7,17 +7,26 @@
*/
import expect from '@kbn/expect';
+import {
+ ELASTIC_HTTP_VERSION_HEADER,
+ X_ELASTIC_INTERNAL_ORIGIN_REQUEST,
+} from '@kbn/core-http-common';
import type { FtrProviderContext } from '../../ftr_provider_context';
export default function optInTest({ getService }: FtrProviderContext) {
const client = getService('kibanaServer');
const supertest = getService('supertest');
- describe('/api/telemetry/v2/userHasSeenNotice API Telemetry User has seen OptIn Notice', () => {
+ describe('/internal/telemetry/userHasSeenNotice API Telemetry User has seen OptIn Notice', () => {
it('should update telemetry setting field via PUT', async () => {
await client.savedObjects.delete({ type: 'telemetry', id: 'telemetry' });
- await supertest.put('/api/telemetry/v2/userHasSeenNotice').set('kbn-xsrf', 'xxx').expect(200);
+ await supertest
+ .put('/internal/telemetry/userHasSeenNotice')
+ .set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
+ .expect(200);
const {
attributes: { userHasSeenNotice },
diff --git a/test/plugin_functional/test_suites/telemetry/telemetry.ts b/test/plugin_functional/test_suites/telemetry/telemetry.ts
index cbba01a9ddcb5..a998e139eb5c6 100644
--- a/test/plugin_functional/test_suites/telemetry/telemetry.ts
+++ b/test/plugin_functional/test_suites/telemetry/telemetry.ts
@@ -8,6 +8,10 @@
import expect from '@kbn/expect';
import { KBN_SCREENSHOT_MODE_ENABLED_KEY } from '@kbn/screenshot-mode-plugin/public';
+import {
+ ELASTIC_HTTP_VERSION_HEADER,
+ X_ELASTIC_INTERNAL_ORIGIN_REQUEST,
+} from '@kbn/core-http-common';
import { PluginFunctionalProviderContext } from '../../services';
const TELEMETRY_SO_TYPE = 'telemetry';
@@ -83,8 +87,10 @@ export default function ({ getService, getPageObjects }: PluginFunctionalProvide
it('does not show the banner if opted-in', async () => {
await supertest
- .post('/api/telemetry/v2/optIn')
+ .post('/internal/telemetry/optIn')
.set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ enabled: true })
.expect(200);
@@ -95,8 +101,10 @@ export default function ({ getService, getPageObjects }: PluginFunctionalProvide
it('does not show the banner if opted-out in this version', async () => {
await supertest
- .post('/api/telemetry/v2/optIn')
+ .post('/internal/telemetry/optIn')
.set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ enabled: false })
.expect(200);
diff --git a/x-pack/dev-tools/api_debug/apis/telemetry/index.js b/x-pack/dev-tools/api_debug/apis/telemetry/index.js
index bd9ffb5ed6c0c..1b2e622d91c77 100644
--- a/x-pack/dev-tools/api_debug/apis/telemetry/index.js
+++ b/x-pack/dev-tools/api_debug/apis/telemetry/index.js
@@ -8,6 +8,6 @@
export const name = 'telemetry';
export const description = 'Get the clusters stats from the Kibana server';
export const method = 'POST';
-export const path = '/api/telemetry/v2/clusters/_stats';
+export const path = '/internal/telemetry/clusters/_stats';
export const body = { unencrypted: true, refreshCache: true };
diff --git a/x-pack/test/api_integration/apis/management/advanced_settings/feature_controls.ts b/x-pack/test/api_integration/apis/management/advanced_settings/feature_controls.ts
index ccc9b92ac8298..4af49a3991611 100644
--- a/x-pack/test/api_integration/apis/management/advanced_settings/feature_controls.ts
+++ b/x-pack/test/api_integration/apis/management/advanced_settings/feature_controls.ts
@@ -8,6 +8,10 @@
import expect from '@kbn/expect';
import { SuperTest } from 'supertest';
import { CSV_QUOTE_VALUES_SETTING } from '@kbn/share-plugin/common/constants';
+import {
+ ELASTIC_HTTP_VERSION_HEADER,
+ X_ELASTIC_INTERNAL_ORIGIN_REQUEST,
+} from '@kbn/core-http-common';
import { FtrProviderContext } from '../../../ftr_provider_context';
export default function featureControlsTests({ getService }: FtrProviderContext) {
@@ -64,9 +68,11 @@ export default function featureControlsTests({ getService }: FtrProviderContext)
const basePath = spaceId ? `/s/${spaceId}` : '';
return await supertest
- .post(`${basePath}/api/telemetry/v2/optIn`)
+ .post(`${basePath}/internal/telemetry/optIn`)
.auth(username, password)
.set('kbn-xsrf', 'foo')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ enabled: true })
.then((response: any) => ({ error: undefined, response }))
.catch((error: any) => ({ error, response: undefined }));
diff --git a/x-pack/test/api_integration/apis/maps/maps_telemetry.ts b/x-pack/test/api_integration/apis/maps/maps_telemetry.ts
index 8dbfca9a40a77..4883f01b5ac6e 100644
--- a/x-pack/test/api_integration/apis/maps/maps_telemetry.ts
+++ b/x-pack/test/api_integration/apis/maps/maps_telemetry.ts
@@ -7,6 +7,10 @@
import expect from '@kbn/expect';
import { estypes } from '@elastic/elasticsearch';
+import {
+ ELASTIC_HTTP_VERSION_HEADER,
+ X_ELASTIC_INTERNAL_ORIGIN_REQUEST,
+} from '@kbn/core-http-common';
import { FtrProviderContext } from '../../ftr_provider_context';
export default function ({ getService }: FtrProviderContext) {
@@ -17,7 +21,9 @@ export default function ({ getService }: FtrProviderContext) {
const {
body: [{ stats: apiResponse }],
} = await supertest
- .post(`/api/telemetry/v2/clusters/_stats`)
+ .post(`/internal/telemetry/clusters/_stats`)
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.set('kbn-xsrf', 'xxxx')
.send({
unencrypted: true,
diff --git a/x-pack/test/api_integration/apis/telemetry/telemetry.ts b/x-pack/test/api_integration/apis/telemetry/telemetry.ts
index 2d02f0a976421..601e2fddbd83e 100644
--- a/x-pack/test/api_integration/apis/telemetry/telemetry.ts
+++ b/x-pack/test/api_integration/apis/telemetry/telemetry.ts
@@ -21,6 +21,10 @@ import type {
CacheDetails,
} from '@kbn/telemetry-collection-manager-plugin/server/types';
import { assertTelemetryPayload } from '@kbn/telemetry-tools';
+import {
+ ELASTIC_HTTP_VERSION_HEADER,
+ X_ELASTIC_INTERNAL_ORIGIN_REQUEST,
+} from '@kbn/core-http-common';
import basicClusterFixture from './fixtures/basiccluster.json';
import multiClusterFixture from './fixtures/multicluster.json';
import type { SecurityService } from '../../../../../test/common/services/security/security';
@@ -97,7 +101,7 @@ export default function ({ getService }: FtrProviderContext) {
const esSupertest = getService('esSupertest');
const security = getService('security');
- describe('/api/telemetry/v2/clusters/_stats', () => {
+ describe('/internal/telemetry/clusters/_stats', () => {
const timestamp = new Date().toISOString();
describe('monitoring/multicluster', () => {
let localXPack: Record;
@@ -112,8 +116,10 @@ export default function ({ getService }: FtrProviderContext) {
await updateMonitoringDates(esSupertest, fromTimestamp, toTimestamp, timestamp);
const { body }: { body: UnencryptedTelemetryPayload } = await supertest
- .post('/api/telemetry/v2/clusters/_stats')
+ .post('/internal/telemetry/clusters/_stats')
.set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ unencrypted: true, refreshCache: true })
.expect(200);
@@ -167,8 +173,10 @@ export default function ({ getService }: FtrProviderContext) {
after(() => esArchiver.unload(archive));
it('should load non-expiring basic cluster', async () => {
const { body }: { body: UnencryptedTelemetryPayload } = await supertest
- .post('/api/telemetry/v2/clusters/_stats')
+ .post('/internal/telemetry/clusters/_stats')
.set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ unencrypted: true, refreshCache: true })
.expect(200);
@@ -193,8 +201,10 @@ export default function ({ getService }: FtrProviderContext) {
await updateMonitoringDates(esSupertest, fromTimestamp, toTimestamp, timestamp);
// hit the endpoint to cache results
await supertest
- .post('/api/telemetry/v2/clusters/_stats')
+ .post('/internal/telemetry/clusters/_stats')
.set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ unencrypted: true, refreshCache: true })
.expect(200);
});
@@ -204,8 +214,10 @@ export default function ({ getService }: FtrProviderContext) {
it('returns non-cached results when unencrypted', async () => {
const now = Date.now();
const { body }: { body: UnencryptedTelemetryPayload } = await supertest
- .post('/api/telemetry/v2/clusters/_stats')
+ .post('/internal/telemetry/clusters/_stats')
.set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ unencrypted: true })
.expect(200);
@@ -224,8 +236,10 @@ export default function ({ getService }: FtrProviderContext) {
it('grabs a fresh copy on refresh', async () => {
const now = Date.now();
const { body }: { body: UnencryptedTelemetryPayload } = await supertest
- .post('/api/telemetry/v2/clusters/_stats')
+ .post('/internal/telemetry/clusters/_stats')
.set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ unencrypted: true, refreshCache: true })
.expect(200);
@@ -243,16 +257,20 @@ export default function ({ getService }: FtrProviderContext) {
describe('superadmin user', () => {
it('should return unencrypted telemetry for the admin user', async () => {
await supertest
- .post('/api/telemetry/v2/clusters/_stats')
+ .post('/internal/telemetry/clusters/_stats')
.set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ unencrypted: true })
.expect(200);
});
it('should return encrypted telemetry for the admin user', async () => {
await supertest
- .post('/api/telemetry/v2/clusters/_stats')
+ .post('/internal/telemetry/clusters/_stats')
.set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ unencrypted: false })
.expect(200);
});
@@ -281,18 +299,22 @@ export default function ({ getService }: FtrProviderContext) {
it('should return encrypted telemetry for the global-read user', async () => {
await supertestWithoutAuth
- .post('/api/telemetry/v2/clusters/_stats')
+ .post('/internal/telemetry/clusters/_stats')
.auth(globalReadOnlyUser, password(globalReadOnlyUser))
.set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ unencrypted: false })
.expect(200);
});
it('should return unencrypted telemetry for the global-read user', async () => {
await supertestWithoutAuth
- .post('/api/telemetry/v2/clusters/_stats')
+ .post('/internal/telemetry/clusters/_stats')
.auth(globalReadOnlyUser, password(globalReadOnlyUser))
.set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ unencrypted: true })
.expect(200);
});
@@ -330,18 +352,22 @@ export default function ({ getService }: FtrProviderContext) {
it('should return encrypted telemetry for the read-only user', async () => {
await supertestWithoutAuth
- .post('/api/telemetry/v2/clusters/_stats')
+ .post('/internal/telemetry/clusters/_stats')
.auth(noGlobalUser, password(noGlobalUser))
.set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ unencrypted: false })
.expect(200);
});
it('should return 403 when the read-only user requests unencrypted telemetry', async () => {
await supertestWithoutAuth
- .post('/api/telemetry/v2/clusters/_stats')
+ .post('/internal/telemetry/clusters/_stats')
.auth(noGlobalUser, password(noGlobalUser))
.set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ unencrypted: true })
.expect(403);
});
diff --git a/x-pack/test/api_integration/apis/telemetry/telemetry_local.ts b/x-pack/test/api_integration/apis/telemetry/telemetry_local.ts
index f0bb15d29b87b..51e60c2e22bd1 100644
--- a/x-pack/test/api_integration/apis/telemetry/telemetry_local.ts
+++ b/x-pack/test/api_integration/apis/telemetry/telemetry_local.ts
@@ -12,6 +12,10 @@ import ossPluginsTelemetrySchema from '@kbn/telemetry-plugin/schema/oss_plugins.
import xpackRootTelemetrySchema from '@kbn/telemetry-collection-xpack-plugin/schema/xpack_root.json';
import xpackPluginsTelemetrySchema from '@kbn/telemetry-collection-xpack-plugin/schema/xpack_plugins.json';
import { assertTelemetryPayload } from '@kbn/telemetry-tools';
+import {
+ ELASTIC_HTTP_VERSION_HEADER,
+ X_ELASTIC_INTERNAL_ORIGIN_REQUEST,
+} from '@kbn/core-http-common';
import { flatKeys } from '../../../../../test/api_integration/apis/telemetry/utils';
import type { FtrProviderContext } from '../../ftr_provider_context';
@@ -31,7 +35,7 @@ export default function ({ getService }: FtrProviderContext) {
const supertest = getService('supertest');
const es = getService('es');
- describe('/api/telemetry/v2/clusters/_stats with monitoring disabled', () => {
+ describe('/internal/telemetry/clusters/_stats with monitoring disabled', () => {
let stats: Record;
before('disable monitoring and pull local stats', async () => {
@@ -39,8 +43,10 @@ export default function ({ getService }: FtrProviderContext) {
await new Promise((r) => setTimeout(r, 1000));
const { body } = await supertest
- .post('/api/telemetry/v2/clusters/_stats')
+ .post('/internal/telemetry/clusters/_stats')
.set('kbn-xsrf', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ unencrypted: true, refreshCache: true })
.expect(200);
diff --git a/x-pack/test/api_integration/services/usage_api.ts b/x-pack/test/api_integration/services/usage_api.ts
index fbcddfb3dc512..500212d96ddfc 100644
--- a/x-pack/test/api_integration/services/usage_api.ts
+++ b/x-pack/test/api_integration/services/usage_api.ts
@@ -6,6 +6,10 @@
*/
import { UsageStatsPayload } from '@kbn/telemetry-collection-manager-plugin/server';
+import {
+ ELASTIC_HTTP_VERSION_HEADER,
+ X_ELASTIC_INTERNAL_ORIGIN_REQUEST,
+} from '@kbn/core-http-common';
import { FtrProviderContext } from '../ftr_provider_context';
export interface UsageStatsPayloadTestFriendly extends UsageStatsPayload {
@@ -29,9 +33,10 @@ export function UsageAPIProvider({ getService }: FtrProviderContext) {
refreshCache?: boolean;
}): Promise> {
const { body } = await supertest
- .post('/api/telemetry/v2/clusters/_stats')
+ .post('/internal/telemetry/clusters/_stats')
.set('kbn-xsrf', 'xxx')
- .set('x-elastic-internal-origin', 'xxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ refreshCache: true, ...payload })
.expect(200);
return body;
diff --git a/x-pack/test/cloud_security_posture_api/telemetry/telemetry.ts b/x-pack/test/cloud_security_posture_api/telemetry/telemetry.ts
index 797a88881a87b..e5867ccd74897 100644
--- a/x-pack/test/cloud_security_posture_api/telemetry/telemetry.ts
+++ b/x-pack/test/cloud_security_posture_api/telemetry/telemetry.ts
@@ -6,7 +6,10 @@
*/
import expect from '@kbn/expect';
-import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common';
+import {
+ ELASTIC_HTTP_VERSION_HEADER,
+ X_ELASTIC_INTERNAL_ORIGIN_REQUEST,
+} from '@kbn/core-http-common';
import { data, MockTelemetryFindings } from './data';
import type { FtrProviderContext } from '../ftr_provider_context';
@@ -67,7 +70,9 @@ export default function ({ getService }: FtrProviderContext) {
const {
body: [{ stats: apiResponse }],
} = await supertest
- .post(`/api/telemetry/v2/clusters/_stats`)
+ .post(`/internal/telemetry/clusters/_stats`)
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.set('kbn-xsrf', 'xxxx')
.send({
unencrypted: true,
@@ -119,8 +124,10 @@ export default function ({ getService }: FtrProviderContext) {
const {
body: [{ stats: apiResponse }],
} = await supertest
- .post(`/api/telemetry/v2/clusters/_stats`)
+ .post(`/internal/telemetry/clusters/_stats`)
.set('kbn-xsrf', 'xxxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({
unencrypted: true,
refreshCache: true,
@@ -164,8 +171,10 @@ export default function ({ getService }: FtrProviderContext) {
const {
body: [{ stats: apiResponse }],
} = await supertest
- .post(`/api/telemetry/v2/clusters/_stats`)
+ .post(`/internal/telemetry/clusters/_stats`)
.set('kbn-xsrf', 'xxxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({
unencrypted: true,
refreshCache: true,
@@ -240,8 +249,10 @@ export default function ({ getService }: FtrProviderContext) {
const {
body: [{ stats: apiResponse }],
} = await supertest
- .post(`/api/telemetry/v2/clusters/_stats`)
+ .post(`/internal/telemetry/clusters/_stats`)
.set('kbn-xsrf', 'xxxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({
unencrypted: true,
refreshCache: true,
@@ -294,8 +305,10 @@ export default function ({ getService }: FtrProviderContext) {
const {
body: [{ stats: apiResponse }],
} = await supertest
- .post(`/api/telemetry/v2/clusters/_stats`)
+ .post(`/internal/telemetry/clusters/_stats`)
.set('kbn-xsrf', 'xxxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({
unencrypted: true,
refreshCache: true,
diff --git a/x-pack/test/detection_engine_api_integration/utils/get_stats.ts b/x-pack/test/detection_engine_api_integration/utils/get_stats.ts
index 0871012f8749f..7f4a2bddbd833 100644
--- a/x-pack/test/detection_engine_api_integration/utils/get_stats.ts
+++ b/x-pack/test/detection_engine_api_integration/utils/get_stats.ts
@@ -8,6 +8,10 @@
import type { ToolingLog } from '@kbn/tooling-log';
import type SuperTest from 'supertest';
import type { DetectionMetrics } from '@kbn/security-solution-plugin/server/usage/detections/types';
+import {
+ ELASTIC_HTTP_VERSION_HEADER,
+ X_ELASTIC_INTERNAL_ORIGIN_REQUEST,
+} from '@kbn/core-http-common';
import { getStatsUrl } from './get_stats_url';
import { getDetectionMetricsFromBody } from './get_detection_metrics_from_body';
@@ -24,6 +28,8 @@ export const getStats = async (
const response = await supertest
.post(getStatsUrl())
.set('kbn-xsrf', 'true')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ unencrypted: true, refreshCache: true });
if (response.status !== 200) {
log.error(
diff --git a/x-pack/test/detection_engine_api_integration/utils/get_stats_url.ts b/x-pack/test/detection_engine_api_integration/utils/get_stats_url.ts
index ac6537f670f77..1cd397df92267 100644
--- a/x-pack/test/detection_engine_api_integration/utils/get_stats_url.ts
+++ b/x-pack/test/detection_engine_api_integration/utils/get_stats_url.ts
@@ -8,4 +8,4 @@
/**
* Cluster stats URL. Replace this with any from kibana core if there is ever a constant there for this.
*/
-export const getStatsUrl = (): string => '/api/telemetry/v2/clusters/_stats';
+export const getStatsUrl = (): string => '/internal/telemetry/clusters/_stats';
diff --git a/x-pack/test/fleet_api_integration/apis/fleet_telemetry.ts b/x-pack/test/fleet_api_integration/apis/fleet_telemetry.ts
index 04b8d80fdbee1..3efb072907fac 100644
--- a/x-pack/test/fleet_api_integration/apis/fleet_telemetry.ts
+++ b/x-pack/test/fleet_api_integration/apis/fleet_telemetry.ts
@@ -5,6 +5,10 @@
* 2.0.
*/
+import {
+ ELASTIC_HTTP_VERSION_HEADER,
+ X_ELASTIC_INTERNAL_ORIGIN_REQUEST,
+} from '@kbn/core-http-common';
import expect from '@kbn/expect';
import { FtrProviderContext } from '../../api_integration/ftr_provider_context';
import { skipIfNoDockerRegistry, generateAgent } from '../helpers';
@@ -124,8 +128,10 @@ export default function (providerContext: FtrProviderContext) {
const {
body: [{ stats: apiResponse }],
} = await supertest
- .post(`/api/telemetry/v2/clusters/_stats`)
+ .post(`/internal/telemetry/clusters/_stats`)
.set('kbn-xsrf', 'xxxx')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({
unencrypted: true,
refreshCache: true,
diff --git a/x-pack/test/functional/apps/infra/logs_source_configuration.ts b/x-pack/test/functional/apps/infra/logs_source_configuration.ts
index 8166af7848275..daf6296ed2c2c 100644
--- a/x-pack/test/functional/apps/infra/logs_source_configuration.ts
+++ b/x-pack/test/functional/apps/infra/logs_source_configuration.ts
@@ -6,6 +6,10 @@
*/
import expect from '@kbn/expect';
+import {
+ ELASTIC_HTTP_VERSION_HEADER,
+ X_ELASTIC_INTERNAL_ORIGIN_REQUEST,
+} from '@kbn/core-http-common';
import { DATES } from './constants';
import { FtrProviderContext } from '../../ftr_provider_context';
@@ -133,8 +137,10 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
await logsUi.logStreamPage.getStreamEntries();
const [{ stats }] = await supertest
- .post(`/api/telemetry/v2/clusters/_stats`)
+ .post(`/internal/telemetry/clusters/_stats`)
.set(COMMON_REQUEST_HEADERS)
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.set('Accept', 'application/json')
.send({
unencrypted: true,
diff --git a/x-pack/test/functional_execution_context/tests/server.ts b/x-pack/test/functional_execution_context/tests/server.ts
index 1d854fed2b94d..64035a0077966 100644
--- a/x-pack/test/functional_execution_context/tests/server.ts
+++ b/x-pack/test/functional_execution_context/tests/server.ts
@@ -5,6 +5,10 @@
* 2.0.
*/
+import {
+ ELASTIC_HTTP_VERSION_HEADER,
+ X_ELASTIC_INTERNAL_ORIGIN_REQUEST,
+} from '@kbn/core-http-common';
import expect from '@kbn/expect';
import type { FtrProviderContext } from '../ftr_provider_context';
import { assertLogContains, isExecutionContextLog, ANY } from '../test_utils';
@@ -111,8 +115,10 @@ export default function ({ getService }: FtrProviderContext) {
it('propagates context for Telemetry collection', async () => {
await supertest
- .post('/api/telemetry/v2/clusters/_stats')
+ .post('/internal/telemetry/clusters/_stats')
.set('kbn-xsrf', 'true')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '2')
+ .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.send({ unencrypted: false })
.expect(200);
diff --git a/x-pack/test/scalability/apis/api.telemetry.cluster_stats.1600_dataviews.json b/x-pack/test/scalability/apis/api.telemetry.cluster_stats.1600_dataviews.json
index 621bd21556d66..485208916d48e 100644
--- a/x-pack/test/scalability/apis/api.telemetry.cluster_stats.1600_dataviews.json
+++ b/x-pack/test/scalability/apis/api.telemetry.cluster_stats.1600_dataviews.json
@@ -1,5 +1,5 @@
{
- "journeyName": "POST /api/telemetry/v2/clusters/_stats - 1600 dataviews",
+ "journeyName": "POST /internal/telemetry/clusters/_stats - 1600 dataviews",
"scalabilitySetup": {
"warmup": [
{
@@ -30,13 +30,15 @@
{
"http": {
"method": "POST",
- "path": "/api/telemetry/v2/clusters/_stats",
+ "path": "/internal/telemetry/clusters/_stats",
"body": "{}",
"headers": {
"Cookie": "",
"Kbn-Version": "",
"Accept-Encoding": "gzip, deflate, br",
- "Content-Type": "application/json"
+ "Content-Type": "application/json",
+ "elastic-api-version": "2",
+ "x-elastic-internal-origin": "kibana"
},
"statusCode": 200
}
diff --git a/x-pack/test/scalability/apis/api.telemetry.cluster_stats.json b/x-pack/test/scalability/apis/api.telemetry.cluster_stats.json
index eb5bf0808d3ea..041fb1fae31ea 100644
--- a/x-pack/test/scalability/apis/api.telemetry.cluster_stats.json
+++ b/x-pack/test/scalability/apis/api.telemetry.cluster_stats.json
@@ -1,5 +1,5 @@
{
- "journeyName": "POST /api/telemetry/v2/clusters/_stats",
+ "journeyName": "POST /internal/telemetry/clusters/_stats",
"scalabilitySetup": {
"warmup": [
{
@@ -28,13 +28,15 @@
{
"http": {
"method": "POST",
- "path": "/api/telemetry/v2/clusters/_stats",
+ "path": "/internal/telemetry/clusters/_stats",
"body": "{}",
"headers": {
"Cookie": "",
"Kbn-Version": "",
"Accept-Encoding": "gzip, deflate, br",
- "Content-Type": "application/json"
+ "Content-Type": "application/json",
+ "elastic-api-version": "2",
+ "x-elastic-internal-origin": "kibana"
},
"statusCode": 200
}
diff --git a/x-pack/test/scalability/apis/api.telemetry.cluster_stats.no_cache.1600_dataviews.json b/x-pack/test/scalability/apis/api.telemetry.cluster_stats.no_cache.1600_dataviews.json
index 191d01c6a7424..2a3095447e8b4 100644
--- a/x-pack/test/scalability/apis/api.telemetry.cluster_stats.no_cache.1600_dataviews.json
+++ b/x-pack/test/scalability/apis/api.telemetry.cluster_stats.no_cache.1600_dataviews.json
@@ -1,5 +1,5 @@
{
- "journeyName": "POST /api/telemetry/v2/clusters/_stats - no cache - 1600 dataviews",
+ "journeyName": "POST /internal/telemetry/clusters/_stats - no cache - 1600 dataviews",
"scalabilitySetup": {
"responseTimeThreshold": {
"threshold1": 1000,
@@ -35,13 +35,15 @@
{
"http": {
"method": "POST",
- "path": "/api/telemetry/v2/clusters/_stats",
+ "path": "/internal/telemetry/clusters/_stats",
"body": "{ \"refreshCache\": true }",
"headers": {
"Cookie": "",
"Kbn-Version": "",
"Accept-Encoding": "gzip, deflate, br",
- "Content-Type": "application/json"
+ "Content-Type": "application/json",
+ "elastic-api-version": "2",
+ "x-elastic-internal-origin": "kibana"
},
"timeout": 240000,
"statusCode": 200
diff --git a/x-pack/test/scalability/apis/api.telemetry.cluster_stats.no_cache.json b/x-pack/test/scalability/apis/api.telemetry.cluster_stats.no_cache.json
index b3099941180a3..c0521ffb2607b 100644
--- a/x-pack/test/scalability/apis/api.telemetry.cluster_stats.no_cache.json
+++ b/x-pack/test/scalability/apis/api.telemetry.cluster_stats.no_cache.json
@@ -1,5 +1,5 @@
{
- "journeyName": "POST /api/telemetry/v2/clusters/_stats - no cache",
+ "journeyName": "POST /internal/telemetry/clusters/_stats - no cache",
"scalabilitySetup": {
"responseTimeThreshold": {
"threshold1": 1000,
@@ -33,13 +33,15 @@
{
"http": {
"method": "POST",
- "path": "/api/telemetry/v2/clusters/_stats",
+ "path": "/internal/telemetry/clusters/_stats",
"body": "{ \"refreshCache\": true }",
"headers": {
"Cookie": "",
"Kbn-Version": "",
"Accept-Encoding": "gzip, deflate, br",
- "Content-Type": "application/json"
+ "Content-Type": "application/json",
+ "elastic-api-version": "2",
+ "x-elastic-internal-origin": "kibana"
},
"statusCode": 200
}
From e67ec4a3d82d8a2f1781db9a29ad78a140f6dc4b Mon Sep 17 00:00:00 2001
From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Date: Sun, 13 Aug 2023 01:02:09 -0400
Subject: [PATCH 42/46] [api-docs] 2023-08-13 Daily api_docs build (#163773)
Generated by
https://buildkite.com/elastic/kibana-api-docs-daily/builds/428
---
api_docs/actions.mdx | 2 +-
api_docs/advanced_settings.mdx | 2 +-
api_docs/aiops.mdx | 2 +-
api_docs/alerting.mdx | 2 +-
api_docs/apm.mdx | 2 +-
api_docs/asset_manager.mdx | 2 +-
api_docs/banners.mdx | 2 +-
api_docs/bfetch.mdx | 2 +-
api_docs/canvas.mdx | 2 +-
api_docs/cases.mdx | 2 +-
api_docs/charts.mdx | 2 +-
api_docs/cloud.mdx | 2 +-
api_docs/cloud_chat.mdx | 2 +-
api_docs/cloud_chat_provider.mdx | 2 +-
api_docs/cloud_data_migration.mdx | 2 +-
api_docs/cloud_defend.mdx | 2 +-
api_docs/cloud_experiments.mdx | 2 +-
api_docs/cloud_security_posture.mdx | 2 +-
api_docs/console.mdx | 2 +-
api_docs/content_management.mdx | 2 +-
api_docs/controls.mdx | 2 +-
api_docs/custom_integrations.mdx | 2 +-
api_docs/dashboard.mdx | 2 +-
api_docs/dashboard_enhanced.mdx | 2 +-
api_docs/data.mdx | 2 +-
api_docs/data_query.mdx | 2 +-
api_docs/data_search.mdx | 2 +-
api_docs/data_view_editor.mdx | 2 +-
api_docs/data_view_field_editor.mdx | 2 +-
api_docs/data_view_management.mdx | 2 +-
api_docs/data_views.mdx | 2 +-
api_docs/data_visualizer.mdx | 2 +-
api_docs/deprecations_by_api.mdx | 2 +-
api_docs/deprecations_by_plugin.mdx | 2 +-
api_docs/deprecations_by_team.mdx | 2 +-
api_docs/dev_tools.mdx | 2 +-
api_docs/discover.mdx | 2 +-
api_docs/discover_enhanced.mdx | 2 +-
api_docs/ecs_data_quality_dashboard.mdx | 2 +-
api_docs/embeddable.mdx | 2 +-
api_docs/embeddable_enhanced.mdx | 2 +-
api_docs/encrypted_saved_objects.mdx | 2 +-
api_docs/enterprise_search.mdx | 2 +-
api_docs/es_ui_shared.mdx | 2 +-
api_docs/event_annotation.mdx | 2 +-
api_docs/event_log.mdx | 2 +-
api_docs/exploratory_view.mdx | 2 +-
api_docs/expression_error.mdx | 2 +-
api_docs/expression_gauge.mdx | 2 +-
api_docs/expression_heatmap.mdx | 2 +-
api_docs/expression_image.mdx | 2 +-
api_docs/expression_legacy_metric_vis.mdx | 2 +-
api_docs/expression_metric.mdx | 2 +-
api_docs/expression_metric_vis.mdx | 2 +-
api_docs/expression_partition_vis.mdx | 2 +-
api_docs/expression_repeat_image.mdx | 2 +-
api_docs/expression_reveal_image.mdx | 2 +-
api_docs/expression_shape.mdx | 2 +-
api_docs/expression_tagcloud.mdx | 2 +-
api_docs/expression_x_y.mdx | 2 +-
api_docs/expressions.mdx | 2 +-
api_docs/features.mdx | 2 +-
api_docs/field_formats.mdx | 2 +-
api_docs/file_upload.mdx | 2 +-
api_docs/files.mdx | 2 +-
api_docs/files_management.mdx | 2 +-
api_docs/fleet.mdx | 2 +-
api_docs/global_search.mdx | 2 +-
api_docs/guided_onboarding.mdx | 2 +-
api_docs/home.mdx | 2 +-
api_docs/image_embeddable.mdx | 2 +-
api_docs/index_lifecycle_management.mdx | 2 +-
api_docs/index_management.mdx | 2 +-
api_docs/infra.mdx | 2 +-
api_docs/inspector.mdx | 2 +-
api_docs/interactive_setup.mdx | 2 +-
api_docs/kbn_ace.mdx | 2 +-
api_docs/kbn_aiops_components.mdx | 2 +-
api_docs/kbn_aiops_utils.mdx | 2 +-
api_docs/kbn_alerting_state_types.mdx | 2 +-
api_docs/kbn_alerts_as_data_utils.mdx | 2 +-
api_docs/kbn_alerts_ui_shared.mdx | 2 +-
api_docs/kbn_analytics.mdx | 2 +-
api_docs/kbn_analytics_client.mdx | 2 +-
..._analytics_shippers_elastic_v3_browser.mdx | 2 +-
...n_analytics_shippers_elastic_v3_common.mdx | 2 +-
...n_analytics_shippers_elastic_v3_server.mdx | 2 +-
api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +-
api_docs/kbn_analytics_shippers_gainsight.mdx | 2 +-
api_docs/kbn_apm_config_loader.mdx | 2 +-
api_docs/kbn_apm_synthtrace.mdx | 2 +-
api_docs/kbn_apm_synthtrace_client.mdx | 2 +-
api_docs/kbn_apm_utils.mdx | 2 +-
api_docs/kbn_axe_config.mdx | 2 +-
api_docs/kbn_cases_components.mdx | 2 +-
api_docs/kbn_cell_actions.mdx | 2 +-
api_docs/kbn_chart_expressions_common.mdx | 2 +-
api_docs/kbn_chart_icons.mdx | 2 +-
api_docs/kbn_ci_stats_core.mdx | 2 +-
api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +-
api_docs/kbn_ci_stats_reporter.mdx | 2 +-
api_docs/kbn_cli_dev_mode.mdx | 2 +-
api_docs/kbn_code_editor.mdx | 2 +-
api_docs/kbn_code_editor_mocks.mdx | 2 +-
api_docs/kbn_coloring.mdx | 2 +-
api_docs/kbn_config.mdx | 2 +-
api_docs/kbn_config_mocks.mdx | 2 +-
api_docs/kbn_config_schema.mdx | 2 +-
.../kbn_content_management_content_editor.mdx | 2 +-
...tent_management_tabbed_table_list_view.mdx | 2 +-
...kbn_content_management_table_list_view.mdx | 2 +-
...ntent_management_table_list_view_table.mdx | 2 +-
api_docs/kbn_content_management_utils.mdx | 2 +-
api_docs/kbn_core_analytics_browser.mdx | 2 +-
.../kbn_core_analytics_browser_internal.mdx | 2 +-
api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +-
api_docs/kbn_core_analytics_server.mdx | 2 +-
.../kbn_core_analytics_server_internal.mdx | 2 +-
api_docs/kbn_core_analytics_server_mocks.mdx | 2 +-
api_docs/kbn_core_application_browser.mdx | 2 +-
.../kbn_core_application_browser_internal.mdx | 2 +-
.../kbn_core_application_browser_mocks.mdx | 2 +-
api_docs/kbn_core_application_common.mdx | 2 +-
api_docs/kbn_core_apps_browser_internal.mdx | 2 +-
api_docs/kbn_core_apps_browser_mocks.mdx | 2 +-
api_docs/kbn_core_apps_server_internal.mdx | 2 +-
api_docs/kbn_core_base_browser_mocks.mdx | 2 +-
api_docs/kbn_core_base_common.mdx | 2 +-
api_docs/kbn_core_base_server_internal.mdx | 2 +-
api_docs/kbn_core_base_server_mocks.mdx | 2 +-
.../kbn_core_capabilities_browser_mocks.mdx | 2 +-
api_docs/kbn_core_capabilities_common.mdx | 2 +-
api_docs/kbn_core_capabilities_server.mdx | 2 +-
.../kbn_core_capabilities_server_mocks.mdx | 2 +-
api_docs/kbn_core_chrome_browser.mdx | 2 +-
api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +-
api_docs/kbn_core_config_server_internal.mdx | 2 +-
api_docs/kbn_core_custom_branding_browser.mdx | 2 +-
..._core_custom_branding_browser_internal.mdx | 2 +-
...kbn_core_custom_branding_browser_mocks.mdx | 2 +-
api_docs/kbn_core_custom_branding_common.mdx | 2 +-
api_docs/kbn_core_custom_branding_server.mdx | 2 +-
...n_core_custom_branding_server_internal.mdx | 2 +-
.../kbn_core_custom_branding_server_mocks.mdx | 2 +-
api_docs/kbn_core_deprecations_browser.mdx | 2 +-
...kbn_core_deprecations_browser_internal.mdx | 2 +-
.../kbn_core_deprecations_browser_mocks.mdx | 2 +-
api_docs/kbn_core_deprecations_common.mdx | 2 +-
api_docs/kbn_core_deprecations_server.mdx | 2 +-
.../kbn_core_deprecations_server_internal.mdx | 2 +-
.../kbn_core_deprecations_server_mocks.mdx | 2 +-
api_docs/kbn_core_doc_links_browser.mdx | 2 +-
api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +-
api_docs/kbn_core_doc_links_server.mdx | 2 +-
api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +-
...e_elasticsearch_client_server_internal.mdx | 2 +-
...core_elasticsearch_client_server_mocks.mdx | 2 +-
api_docs/kbn_core_elasticsearch_server.mdx | 2 +-
...kbn_core_elasticsearch_server_internal.mdx | 2 +-
.../kbn_core_elasticsearch_server_mocks.mdx | 2 +-
.../kbn_core_environment_server_internal.mdx | 2 +-
.../kbn_core_environment_server_mocks.mdx | 2 +-
.../kbn_core_execution_context_browser.mdx | 2 +-
...ore_execution_context_browser_internal.mdx | 2 +-
...n_core_execution_context_browser_mocks.mdx | 2 +-
.../kbn_core_execution_context_common.mdx | 2 +-
.../kbn_core_execution_context_server.mdx | 2 +-
...core_execution_context_server_internal.mdx | 2 +-
...bn_core_execution_context_server_mocks.mdx | 2 +-
api_docs/kbn_core_fatal_errors_browser.mdx | 2 +-
.../kbn_core_fatal_errors_browser_mocks.mdx | 2 +-
api_docs/kbn_core_http_browser.mdx | 2 +-
api_docs/kbn_core_http_browser_internal.mdx | 2 +-
api_docs/kbn_core_http_browser_mocks.mdx | 2 +-
api_docs/kbn_core_http_common.mdx | 2 +-
.../kbn_core_http_context_server_mocks.mdx | 2 +-
...re_http_request_handler_context_server.mdx | 2 +-
api_docs/kbn_core_http_resources_server.mdx | 2 +-
...bn_core_http_resources_server_internal.mdx | 2 +-
.../kbn_core_http_resources_server_mocks.mdx | 2 +-
.../kbn_core_http_router_server_internal.mdx | 2 +-
.../kbn_core_http_router_server_mocks.mdx | 2 +-
api_docs/kbn_core_http_server.devdocs.json | 92 ++++++++++---------
api_docs/kbn_core_http_server.mdx | 2 +-
api_docs/kbn_core_http_server_internal.mdx | 2 +-
api_docs/kbn_core_http_server_mocks.mdx | 2 +-
api_docs/kbn_core_i18n_browser.mdx | 2 +-
api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +-
api_docs/kbn_core_i18n_server.mdx | 2 +-
api_docs/kbn_core_i18n_server_internal.mdx | 2 +-
api_docs/kbn_core_i18n_server_mocks.mdx | 2 +-
...n_core_injected_metadata_browser_mocks.mdx | 2 +-
...kbn_core_integrations_browser_internal.mdx | 2 +-
.../kbn_core_integrations_browser_mocks.mdx | 2 +-
api_docs/kbn_core_lifecycle_browser.mdx | 2 +-
api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +-
api_docs/kbn_core_lifecycle_server.mdx | 2 +-
api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +-
api_docs/kbn_core_logging_browser_mocks.mdx | 2 +-
api_docs/kbn_core_logging_common_internal.mdx | 2 +-
api_docs/kbn_core_logging_server.mdx | 2 +-
api_docs/kbn_core_logging_server_internal.mdx | 2 +-
api_docs/kbn_core_logging_server_mocks.mdx | 2 +-
...ore_metrics_collectors_server_internal.mdx | 2 +-
...n_core_metrics_collectors_server_mocks.mdx | 2 +-
api_docs/kbn_core_metrics_server.mdx | 2 +-
api_docs/kbn_core_metrics_server_internal.mdx | 2 +-
api_docs/kbn_core_metrics_server_mocks.mdx | 2 +-
api_docs/kbn_core_mount_utils_browser.mdx | 2 +-
api_docs/kbn_core_node_server.mdx | 2 +-
api_docs/kbn_core_node_server_internal.mdx | 2 +-
api_docs/kbn_core_node_server_mocks.mdx | 2 +-
api_docs/kbn_core_notifications_browser.mdx | 2 +-
...bn_core_notifications_browser_internal.mdx | 2 +-
.../kbn_core_notifications_browser_mocks.mdx | 2 +-
api_docs/kbn_core_overlays_browser.mdx | 2 +-
.../kbn_core_overlays_browser_internal.mdx | 2 +-
api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +-
api_docs/kbn_core_plugins_browser.mdx | 2 +-
api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +-
api_docs/kbn_core_plugins_server.mdx | 2 +-
api_docs/kbn_core_plugins_server_mocks.mdx | 2 +-
api_docs/kbn_core_preboot_server.mdx | 2 +-
api_docs/kbn_core_preboot_server_mocks.mdx | 2 +-
api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +-
.../kbn_core_rendering_server_internal.mdx | 2 +-
api_docs/kbn_core_rendering_server_mocks.mdx | 2 +-
api_docs/kbn_core_root_server_internal.mdx | 2 +-
.../kbn_core_saved_objects_api_browser.mdx | 2 +-
.../kbn_core_saved_objects_api_server.mdx | 2 +-
...bn_core_saved_objects_api_server_mocks.mdx | 2 +-
...ore_saved_objects_base_server_internal.mdx | 2 +-
...n_core_saved_objects_base_server_mocks.mdx | 2 +-
api_docs/kbn_core_saved_objects_browser.mdx | 2 +-
...bn_core_saved_objects_browser_internal.mdx | 2 +-
.../kbn_core_saved_objects_browser_mocks.mdx | 2 +-
api_docs/kbn_core_saved_objects_common.mdx | 2 +-
..._objects_import_export_server_internal.mdx | 2 +-
...ved_objects_import_export_server_mocks.mdx | 2 +-
...aved_objects_migration_server_internal.mdx | 2 +-
...e_saved_objects_migration_server_mocks.mdx | 2 +-
api_docs/kbn_core_saved_objects_server.mdx | 2 +-
...kbn_core_saved_objects_server_internal.mdx | 2 +-
.../kbn_core_saved_objects_server_mocks.mdx | 2 +-
.../kbn_core_saved_objects_utils_server.mdx | 2 +-
api_docs/kbn_core_status_common.mdx | 2 +-
api_docs/kbn_core_status_common_internal.mdx | 2 +-
api_docs/kbn_core_status_server.mdx | 2 +-
api_docs/kbn_core_status_server_internal.mdx | 2 +-
api_docs/kbn_core_status_server_mocks.mdx | 2 +-
...core_test_helpers_deprecations_getters.mdx | 2 +-
...n_core_test_helpers_http_setup_browser.mdx | 2 +-
api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +-
...n_core_test_helpers_so_type_serializer.mdx | 2 +-
api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +-
api_docs/kbn_core_theme_browser.mdx | 2 +-
api_docs/kbn_core_theme_browser_mocks.mdx | 2 +-
api_docs/kbn_core_ui_settings_browser.mdx | 2 +-
.../kbn_core_ui_settings_browser_internal.mdx | 2 +-
.../kbn_core_ui_settings_browser_mocks.mdx | 2 +-
api_docs/kbn_core_ui_settings_common.mdx | 2 +-
api_docs/kbn_core_ui_settings_server.mdx | 2 +-
.../kbn_core_ui_settings_server_internal.mdx | 2 +-
.../kbn_core_ui_settings_server_mocks.mdx | 2 +-
api_docs/kbn_core_usage_data_server.mdx | 2 +-
.../kbn_core_usage_data_server_internal.mdx | 2 +-
api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +-
api_docs/kbn_core_user_settings_server.mdx | 2 +-
...kbn_core_user_settings_server_internal.mdx | 2 +-
.../kbn_core_user_settings_server_mocks.mdx | 2 +-
api_docs/kbn_crypto.mdx | 2 +-
api_docs/kbn_crypto_browser.mdx | 2 +-
api_docs/kbn_cypress_config.mdx | 2 +-
api_docs/kbn_data_service.mdx | 2 +-
api_docs/kbn_datemath.mdx | 2 +-
api_docs/kbn_deeplinks_analytics.mdx | 2 +-
api_docs/kbn_deeplinks_devtools.mdx | 2 +-
api_docs/kbn_deeplinks_management.mdx | 2 +-
api_docs/kbn_deeplinks_ml.mdx | 2 +-
api_docs/kbn_deeplinks_observability.mdx | 2 +-
api_docs/kbn_deeplinks_search.mdx | 2 +-
api_docs/kbn_default_nav_analytics.mdx | 2 +-
api_docs/kbn_default_nav_devtools.mdx | 2 +-
api_docs/kbn_default_nav_management.mdx | 2 +-
api_docs/kbn_default_nav_ml.mdx | 2 +-
api_docs/kbn_dev_cli_errors.mdx | 2 +-
api_docs/kbn_dev_cli_runner.mdx | 2 +-
api_docs/kbn_dev_proc_runner.mdx | 2 +-
api_docs/kbn_dev_utils.mdx | 2 +-
api_docs/kbn_discover_utils.mdx | 2 +-
api_docs/kbn_doc_links.mdx | 2 +-
api_docs/kbn_docs_utils.mdx | 2 +-
api_docs/kbn_dom_drag_drop.mdx | 2 +-
api_docs/kbn_ebt_tools.mdx | 2 +-
api_docs/kbn_ecs.mdx | 2 +-
api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +-
api_docs/kbn_elastic_assistant.mdx | 2 +-
api_docs/kbn_es.mdx | 2 +-
api_docs/kbn_es_archiver.mdx | 2 +-
api_docs/kbn_es_errors.mdx | 2 +-
api_docs/kbn_es_query.mdx | 2 +-
api_docs/kbn_es_types.mdx | 2 +-
api_docs/kbn_eslint_plugin_imports.mdx | 2 +-
api_docs/kbn_event_annotation_common.mdx | 2 +-
api_docs/kbn_event_annotation_components.mdx | 2 +-
api_docs/kbn_expandable_flyout.mdx | 2 +-
api_docs/kbn_field_types.mdx | 2 +-
api_docs/kbn_find_used_node_modules.mdx | 2 +-
.../kbn_ftr_common_functional_services.mdx | 2 +-
api_docs/kbn_generate.mdx | 2 +-
api_docs/kbn_generate_console_definitions.mdx | 2 +-
api_docs/kbn_generate_csv.mdx | 2 +-
api_docs/kbn_generate_csv_types.mdx | 2 +-
api_docs/kbn_guided_onboarding.mdx | 2 +-
api_docs/kbn_handlebars.mdx | 2 +-
api_docs/kbn_hapi_mocks.mdx | 2 +-
api_docs/kbn_health_gateway_server.mdx | 2 +-
api_docs/kbn_home_sample_data_card.mdx | 2 +-
api_docs/kbn_home_sample_data_tab.mdx | 2 +-
api_docs/kbn_i18n.mdx | 2 +-
api_docs/kbn_i18n_react.mdx | 2 +-
api_docs/kbn_import_resolver.mdx | 2 +-
api_docs/kbn_infra_forge.mdx | 2 +-
api_docs/kbn_interpreter.mdx | 2 +-
api_docs/kbn_io_ts_utils.mdx | 2 +-
api_docs/kbn_jest_serializers.mdx | 2 +-
api_docs/kbn_journeys.mdx | 2 +-
api_docs/kbn_json_ast.mdx | 2 +-
api_docs/kbn_kibana_manifest_schema.mdx | 2 +-
.../kbn_language_documentation_popover.mdx | 2 +-
api_docs/kbn_logging.mdx | 2 +-
api_docs/kbn_logging_mocks.mdx | 2 +-
api_docs/kbn_managed_vscode_config.mdx | 2 +-
api_docs/kbn_management_cards_navigation.mdx | 2 +-
api_docs/kbn_management_storybook_config.mdx | 2 +-
api_docs/kbn_mapbox_gl.mdx | 2 +-
api_docs/kbn_maps_vector_tile_utils.mdx | 2 +-
api_docs/kbn_ml_agg_utils.mdx | 2 +-
api_docs/kbn_ml_anomaly_utils.mdx | 2 +-
api_docs/kbn_ml_category_validator.mdx | 2 +-
.../kbn_ml_data_frame_analytics_utils.mdx | 2 +-
api_docs/kbn_ml_data_grid.mdx | 2 +-
api_docs/kbn_ml_date_picker.mdx | 2 +-
api_docs/kbn_ml_date_utils.mdx | 2 +-
api_docs/kbn_ml_error_utils.mdx | 2 +-
api_docs/kbn_ml_in_memory_table.mdx | 2 +-
api_docs/kbn_ml_is_defined.mdx | 2 +-
api_docs/kbn_ml_is_populated_object.mdx | 2 +-
api_docs/kbn_ml_kibana_theme.mdx | 2 +-
api_docs/kbn_ml_local_storage.mdx | 2 +-
api_docs/kbn_ml_nested_property.mdx | 2 +-
api_docs/kbn_ml_number_utils.mdx | 2 +-
api_docs/kbn_ml_query_utils.mdx | 2 +-
api_docs/kbn_ml_random_sampler_utils.mdx | 2 +-
api_docs/kbn_ml_route_utils.mdx | 2 +-
api_docs/kbn_ml_runtime_field_utils.mdx | 2 +-
api_docs/kbn_ml_string_hash.mdx | 2 +-
api_docs/kbn_ml_trained_models_utils.mdx | 2 +-
api_docs/kbn_ml_url_state.mdx | 2 +-
api_docs/kbn_monaco.mdx | 2 +-
api_docs/kbn_object_versioning.mdx | 2 +-
api_docs/kbn_observability_alert_details.mdx | 2 +-
api_docs/kbn_optimizer.mdx | 2 +-
api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +-
api_docs/kbn_osquery_io_ts_types.mdx | 2 +-
..._performance_testing_dataset_extractor.mdx | 2 +-
api_docs/kbn_plugin_generator.mdx | 2 +-
api_docs/kbn_plugin_helpers.mdx | 2 +-
api_docs/kbn_random_sampling.mdx | 2 +-
api_docs/kbn_react_field.mdx | 2 +-
api_docs/kbn_react_kibana_context_common.mdx | 2 +-
api_docs/kbn_react_kibana_context_render.mdx | 2 +-
api_docs/kbn_react_kibana_context_root.mdx | 2 +-
api_docs/kbn_react_kibana_context_styled.mdx | 2 +-
api_docs/kbn_react_kibana_context_theme.mdx | 2 +-
api_docs/kbn_react_kibana_mount.mdx | 2 +-
api_docs/kbn_repo_file_maps.mdx | 2 +-
api_docs/kbn_repo_linter.mdx | 2 +-
api_docs/kbn_repo_path.mdx | 2 +-
api_docs/kbn_repo_source_classifier.mdx | 2 +-
api_docs/kbn_reporting_common.mdx | 2 +-
api_docs/kbn_rison.mdx | 2 +-
api_docs/kbn_rrule.mdx | 2 +-
api_docs/kbn_rule_data_utils.mdx | 2 +-
api_docs/kbn_saved_objects_settings.mdx | 2 +-
api_docs/kbn_search_api_panels.mdx | 2 +-
api_docs/kbn_search_response_warnings.mdx | 2 +-
api_docs/kbn_security_solution_navigation.mdx | 2 +-
api_docs/kbn_security_solution_side_nav.mdx | 2 +-
...kbn_security_solution_storybook_config.mdx | 2 +-
.../kbn_securitysolution_autocomplete.mdx | 2 +-
api_docs/kbn_securitysolution_data_table.mdx | 2 +-
api_docs/kbn_securitysolution_ecs.mdx | 2 +-
api_docs/kbn_securitysolution_es_utils.mdx | 2 +-
...ritysolution_exception_list_components.mdx | 2 +-
api_docs/kbn_securitysolution_grouping.mdx | 2 +-
api_docs/kbn_securitysolution_hook_utils.mdx | 2 +-
..._securitysolution_io_ts_alerting_types.mdx | 2 +-
.../kbn_securitysolution_io_ts_list_types.mdx | 2 +-
api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +-
api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +-
api_docs/kbn_securitysolution_list_api.mdx | 2 +-
.../kbn_securitysolution_list_constants.mdx | 2 +-
api_docs/kbn_securitysolution_list_hooks.mdx | 2 +-
api_docs/kbn_securitysolution_list_utils.mdx | 2 +-
api_docs/kbn_securitysolution_rules.mdx | 2 +-
api_docs/kbn_securitysolution_t_grid.mdx | 2 +-
api_docs/kbn_securitysolution_utils.mdx | 2 +-
api_docs/kbn_server_http_tools.mdx | 2 +-
api_docs/kbn_server_route_repository.mdx | 2 +-
api_docs/kbn_serverless_project_switcher.mdx | 2 +-
api_docs/kbn_serverless_storybook_config.mdx | 2 +-
api_docs/kbn_shared_svg.mdx | 2 +-
api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +-
...ared_ux_avatar_user_profile_components.mdx | 2 +-
.../kbn_shared_ux_button_exit_full_screen.mdx | 2 +-
...hared_ux_button_exit_full_screen_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +-
api_docs/kbn_shared_ux_card_no_data.mdx | 2 +-
api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +-
api_docs/kbn_shared_ux_file_context.mdx | 2 +-
api_docs/kbn_shared_ux_file_image.mdx | 2 +-
api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_file_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_file_picker.mdx | 2 +-
api_docs/kbn_shared_ux_file_types.mdx | 2 +-
api_docs/kbn_shared_ux_file_upload.mdx | 2 +-
api_docs/kbn_shared_ux_file_util.mdx | 2 +-
api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +-
.../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_markdown.mdx | 2 +-
api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +-
.../kbn_shared_ux_page_analytics_no_data.mdx | 2 +-
...shared_ux_page_analytics_no_data_mocks.mdx | 2 +-
.../kbn_shared_ux_page_kibana_no_data.mdx | 2 +-
...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +-
.../kbn_shared_ux_page_kibana_template.mdx | 2 +-
...n_shared_ux_page_kibana_template_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_page_no_data.mdx | 2 +-
.../kbn_shared_ux_page_no_data_config.mdx | 2 +-
...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +-
.../kbn_shared_ux_prompt_no_data_views.mdx | 2 +-
...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +-
api_docs/kbn_shared_ux_router.mdx | 2 +-
api_docs/kbn_shared_ux_router_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_storybook_config.mdx | 2 +-
api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +-
api_docs/kbn_shared_ux_utility.mdx | 2 +-
api_docs/kbn_slo_schema.mdx | 2 +-
api_docs/kbn_some_dev_log.mdx | 2 +-
api_docs/kbn_std.mdx | 2 +-
api_docs/kbn_stdio_dev_helpers.mdx | 2 +-
api_docs/kbn_storybook.mdx | 2 +-
api_docs/kbn_telemetry_tools.mdx | 2 +-
api_docs/kbn_test.mdx | 2 +-
api_docs/kbn_test_jest_helpers.mdx | 2 +-
api_docs/kbn_test_subj_selector.mdx | 2 +-
api_docs/kbn_text_based_editor.mdx | 2 +-
api_docs/kbn_tooling_log.mdx | 2 +-
api_docs/kbn_ts_projects.mdx | 2 +-
api_docs/kbn_typed_react_router_config.mdx | 2 +-
api_docs/kbn_ui_actions_browser.mdx | 2 +-
api_docs/kbn_ui_shared_deps_src.mdx | 2 +-
api_docs/kbn_ui_theme.mdx | 2 +-
api_docs/kbn_unified_field_list.mdx | 2 +-
api_docs/kbn_url_state.mdx | 2 +-
api_docs/kbn_use_tracked_promise.mdx | 2 +-
api_docs/kbn_user_profile_components.mdx | 2 +-
api_docs/kbn_utility_types.mdx | 2 +-
api_docs/kbn_utility_types_jest.mdx | 2 +-
api_docs/kbn_utils.mdx | 2 +-
api_docs/kbn_visualization_ui_components.mdx | 2 +-
api_docs/kbn_yarn_lock_validator.mdx | 2 +-
api_docs/kibana_overview.mdx | 2 +-
api_docs/kibana_react.mdx | 2 +-
api_docs/kibana_utils.mdx | 2 +-
api_docs/kubernetes_security.mdx | 2 +-
api_docs/lens.mdx | 2 +-
api_docs/license_api_guard.mdx | 2 +-
api_docs/license_management.mdx | 2 +-
api_docs/licensing.mdx | 2 +-
api_docs/lists.mdx | 2 +-
api_docs/logs_shared.mdx | 2 +-
api_docs/management.mdx | 2 +-
api_docs/maps.mdx | 2 +-
api_docs/maps_ems.mdx | 2 +-
api_docs/ml.mdx | 2 +-
api_docs/monitoring.mdx | 2 +-
api_docs/monitoring_collection.mdx | 2 +-
api_docs/navigation.mdx | 2 +-
api_docs/newsfeed.mdx | 2 +-
api_docs/notifications.mdx | 2 +-
api_docs/observability.mdx | 2 +-
api_docs/observability_a_i_assistant.mdx | 2 +-
api_docs/observability_onboarding.mdx | 2 +-
api_docs/observability_shared.mdx | 2 +-
api_docs/osquery.mdx | 2 +-
api_docs/plugin_directory.mdx | 2 +-
api_docs/presentation_util.mdx | 2 +-
api_docs/profiling.mdx | 2 +-
api_docs/remote_clusters.mdx | 2 +-
api_docs/reporting.mdx | 2 +-
api_docs/rollup.mdx | 2 +-
api_docs/rule_registry.mdx | 2 +-
api_docs/runtime_fields.mdx | 2 +-
api_docs/saved_objects.mdx | 2 +-
api_docs/saved_objects_finder.mdx | 2 +-
api_docs/saved_objects_management.mdx | 2 +-
api_docs/saved_objects_tagging.mdx | 2 +-
api_docs/saved_objects_tagging_oss.mdx | 2 +-
api_docs/saved_search.mdx | 2 +-
api_docs/screenshot_mode.mdx | 2 +-
api_docs/screenshotting.mdx | 2 +-
api_docs/security.mdx | 2 +-
api_docs/security_solution.mdx | 2 +-
api_docs/security_solution_ess.mdx | 2 +-
api_docs/security_solution_serverless.mdx | 2 +-
api_docs/serverless.mdx | 2 +-
api_docs/serverless_observability.mdx | 2 +-
api_docs/serverless_search.mdx | 2 +-
api_docs/session_view.mdx | 2 +-
api_docs/share.mdx | 2 +-
api_docs/snapshot_restore.mdx | 2 +-
api_docs/spaces.mdx | 2 +-
api_docs/stack_alerts.mdx | 2 +-
api_docs/stack_connectors.mdx | 2 +-
api_docs/task_manager.mdx | 2 +-
api_docs/telemetry.mdx | 2 +-
api_docs/telemetry_collection_manager.mdx | 2 +-
api_docs/telemetry_collection_xpack.mdx | 2 +-
api_docs/telemetry_management_section.mdx | 2 +-
api_docs/text_based_languages.mdx | 2 +-
api_docs/threat_intelligence.mdx | 2 +-
api_docs/timelines.mdx | 2 +-
api_docs/transform.mdx | 2 +-
api_docs/triggers_actions_ui.mdx | 2 +-
api_docs/ui_actions.mdx | 2 +-
api_docs/ui_actions_enhanced.mdx | 2 +-
api_docs/unified_histogram.mdx | 2 +-
api_docs/unified_search.mdx | 2 +-
api_docs/unified_search_autocomplete.mdx | 2 +-
api_docs/uptime.mdx | 2 +-
api_docs/url_forwarding.mdx | 2 +-
api_docs/usage_collection.mdx | 2 +-
api_docs/ux.mdx | 2 +-
api_docs/vis_default_editor.mdx | 2 +-
api_docs/vis_type_gauge.mdx | 2 +-
api_docs/vis_type_heatmap.mdx | 2 +-
api_docs/vis_type_pie.mdx | 2 +-
api_docs/vis_type_table.mdx | 2 +-
api_docs/vis_type_timelion.mdx | 2 +-
api_docs/vis_type_timeseries.mdx | 2 +-
api_docs/vis_type_vega.mdx | 2 +-
api_docs/vis_type_vislib.mdx | 2 +-
api_docs/vis_type_xy.mdx | 2 +-
api_docs/visualizations.mdx | 2 +-
560 files changed, 607 insertions(+), 603 deletions(-)
diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx
index 17856ebe921cd..26e8e682046a6 100644
--- a/api_docs/actions.mdx
+++ b/api_docs/actions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions
title: "actions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the actions plugin
-date: 2023-08-12
+date: 2023-08-13
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 5032582caca6a..ebd9643146748 100644
--- a/api_docs/advanced_settings.mdx
+++ b/api_docs/advanced_settings.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings
title: "advancedSettings"
image: https://source.unsplash.com/400x175/?github
description: API docs for the advancedSettings plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings']
---
import advancedSettingsObj from './advanced_settings.devdocs.json';
diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx
index 3e307a5c7a1f4..e5cf40824b64e 100644
--- a/api_docs/aiops.mdx
+++ b/api_docs/aiops.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops
title: "aiops"
image: https://source.unsplash.com/400x175/?github
description: API docs for the aiops plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops']
---
import aiopsObj from './aiops.devdocs.json';
diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx
index 7b44781015b39..f7b8d7bc46fb4 100644
--- a/api_docs/alerting.mdx
+++ b/api_docs/alerting.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting
title: "alerting"
image: https://source.unsplash.com/400x175/?github
description: API docs for the alerting plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting']
---
import alertingObj from './alerting.devdocs.json';
diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx
index 32fe8b4984f10..8609545577928 100644
--- a/api_docs/apm.mdx
+++ b/api_docs/apm.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm
title: "apm"
image: https://source.unsplash.com/400x175/?github
description: API docs for the apm plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm']
---
import apmObj from './apm.devdocs.json';
diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx
index ca4cc2845e637..99ba27060a6a6 100644
--- a/api_docs/asset_manager.mdx
+++ b/api_docs/asset_manager.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager
title: "assetManager"
image: https://source.unsplash.com/400x175/?github
description: API docs for the assetManager plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager']
---
import assetManagerObj from './asset_manager.devdocs.json';
diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx
index 42e988d4de670..7a23d9e244495 100644
--- a/api_docs/banners.mdx
+++ b/api_docs/banners.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners
title: "banners"
image: https://source.unsplash.com/400x175/?github
description: API docs for the banners plugin
-date: 2023-08-12
+date: 2023-08-13
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 aece377112e84..b56e3294dc473 100644
--- a/api_docs/bfetch.mdx
+++ b/api_docs/bfetch.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch
title: "bfetch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the bfetch plugin
-date: 2023-08-12
+date: 2023-08-13
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 12ae58eb4b12d..dfcb47d21dc50 100644
--- a/api_docs/canvas.mdx
+++ b/api_docs/canvas.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas
title: "canvas"
image: https://source.unsplash.com/400x175/?github
description: API docs for the canvas plugin
-date: 2023-08-12
+date: 2023-08-13
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 061d05962563c..39c006f3535f5 100644
--- a/api_docs/cases.mdx
+++ b/api_docs/cases.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases
title: "cases"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cases plugin
-date: 2023-08-12
+date: 2023-08-13
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 dd16903b77d6a..82757f699d58d 100644
--- a/api_docs/charts.mdx
+++ b/api_docs/charts.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts
title: "charts"
image: https://source.unsplash.com/400x175/?github
description: API docs for the charts plugin
-date: 2023-08-12
+date: 2023-08-13
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 935235458477f..bccd180fb2c7e 100644
--- a/api_docs/cloud.mdx
+++ b/api_docs/cloud.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud
title: "cloud"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloud plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud']
---
import cloudObj from './cloud.devdocs.json';
diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx
index 27bf2097ee433..4cde568342c9e 100644
--- a/api_docs/cloud_chat.mdx
+++ b/api_docs/cloud_chat.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat
title: "cloudChat"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudChat plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat']
---
import cloudChatObj from './cloud_chat.devdocs.json';
diff --git a/api_docs/cloud_chat_provider.mdx b/api_docs/cloud_chat_provider.mdx
index e943a5f2d411d..93ae41255bf49 100644
--- a/api_docs/cloud_chat_provider.mdx
+++ b/api_docs/cloud_chat_provider.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChatProvider
title: "cloudChatProvider"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudChatProvider plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChatProvider']
---
import cloudChatProviderObj from './cloud_chat_provider.devdocs.json';
diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx
index a095b936a9bde..fb9598ac989ae 100644
--- a/api_docs/cloud_data_migration.mdx
+++ b/api_docs/cloud_data_migration.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration
title: "cloudDataMigration"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudDataMigration plugin
-date: 2023-08-12
+date: 2023-08-13
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 e353fcd50d85f..4859847f9dbf0 100644
--- a/api_docs/cloud_defend.mdx
+++ b/api_docs/cloud_defend.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend
title: "cloudDefend"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudDefend plugin
-date: 2023-08-12
+date: 2023-08-13
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 d18922ba004e3..6c942b1303b47 100644
--- a/api_docs/cloud_experiments.mdx
+++ b/api_docs/cloud_experiments.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments
title: "cloudExperiments"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudExperiments plugin
-date: 2023-08-12
+date: 2023-08-13
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 73ea5b27db599..1e94d1405f415 100644
--- a/api_docs/cloud_security_posture.mdx
+++ b/api_docs/cloud_security_posture.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture
title: "cloudSecurityPosture"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudSecurityPosture plugin
-date: 2023-08-12
+date: 2023-08-13
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 35c499f410b9e..df13e8e2df89c 100644
--- a/api_docs/console.mdx
+++ b/api_docs/console.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console
title: "console"
image: https://source.unsplash.com/400x175/?github
description: API docs for the console plugin
-date: 2023-08-12
+date: 2023-08-13
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 618ea86e4010e..f9afa04a4bc53 100644
--- a/api_docs/content_management.mdx
+++ b/api_docs/content_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement
title: "contentManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the contentManagement plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement']
---
import contentManagementObj from './content_management.devdocs.json';
diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx
index 66f9a10769162..d106f1eaf7418 100644
--- a/api_docs/controls.mdx
+++ b/api_docs/controls.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls
title: "controls"
image: https://source.unsplash.com/400x175/?github
description: API docs for the controls plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls']
---
import controlsObj from './controls.devdocs.json';
diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx
index de4999c537f01..c00bdbe02eb2d 100644
--- a/api_docs/custom_integrations.mdx
+++ b/api_docs/custom_integrations.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations
title: "customIntegrations"
image: https://source.unsplash.com/400x175/?github
description: API docs for the customIntegrations plugin
-date: 2023-08-12
+date: 2023-08-13
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 7d102ce93fa9e..b0e2771026996 100644
--- a/api_docs/dashboard.mdx
+++ b/api_docs/dashboard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard
title: "dashboard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dashboard plugin
-date: 2023-08-12
+date: 2023-08-13
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 8b7859d74fbf8..af4328ebf62a1 100644
--- a/api_docs/dashboard_enhanced.mdx
+++ b/api_docs/dashboard_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced
title: "dashboardEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dashboardEnhanced plugin
-date: 2023-08-12
+date: 2023-08-13
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 bfb4e9a5a1875..5152e501b6d45 100644
--- a/api_docs/data.mdx
+++ b/api_docs/data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data
title: "data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the data plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data']
---
import dataObj from './data.devdocs.json';
diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx
index 671324656d6fc..5b504a1259cc4 100644
--- a/api_docs/data_query.mdx
+++ b/api_docs/data_query.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query
title: "data.query"
image: https://source.unsplash.com/400x175/?github
description: API docs for the data.query plugin
-date: 2023-08-12
+date: 2023-08-13
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 654fefabaf5bb..0c2a8af2bcce2 100644
--- a/api_docs/data_search.mdx
+++ b/api_docs/data_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search
title: "data.search"
image: https://source.unsplash.com/400x175/?github
description: API docs for the data.search plugin
-date: 2023-08-12
+date: 2023-08-13
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 beb040322cfd0..9cd2b36ad6141 100644
--- a/api_docs/data_view_editor.mdx
+++ b/api_docs/data_view_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor
title: "dataViewEditor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViewEditor plugin
-date: 2023-08-12
+date: 2023-08-13
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 6088fe37aed0e..241d11f98c735 100644
--- a/api_docs/data_view_field_editor.mdx
+++ b/api_docs/data_view_field_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor
title: "dataViewFieldEditor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViewFieldEditor plugin
-date: 2023-08-12
+date: 2023-08-13
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 ab5d1a743ff5b..f7dff63fd25a6 100644
--- a/api_docs/data_view_management.mdx
+++ b/api_docs/data_view_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement
title: "dataViewManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViewManagement plugin
-date: 2023-08-12
+date: 2023-08-13
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 1474c557835f3..f482d121bd219 100644
--- a/api_docs/data_views.mdx
+++ b/api_docs/data_views.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews
title: "dataViews"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViews plugin
-date: 2023-08-12
+date: 2023-08-13
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 6aa4b630799e1..2d50489b6555a 100644
--- a/api_docs/data_visualizer.mdx
+++ b/api_docs/data_visualizer.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer
title: "dataVisualizer"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataVisualizer plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer']
---
import dataVisualizerObj from './data_visualizer.devdocs.json';
diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx
index 45c7bd7ea5fde..99c17090dd67f 100644
--- a/api_docs/deprecations_by_api.mdx
+++ b/api_docs/deprecations_by_api.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi
slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api
title: Deprecated API usage by API
description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by.
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx
index 812278521f302..48291e7fd327b 100644
--- a/api_docs/deprecations_by_plugin.mdx
+++ b/api_docs/deprecations_by_plugin.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin
slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin
title: Deprecated API usage by plugin
description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by.
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx
index a00e1bf100fc5..013a1a7f8204d 100644
--- a/api_docs/deprecations_by_team.mdx
+++ b/api_docs/deprecations_by_team.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam
slug: /kibana-dev-docs/api-meta/deprecations-due-by-team
title: Deprecated APIs due to be removed, by team
description: Lists the teams that are referencing deprecated APIs with a remove by date.
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx
index fc4d9d160dbd5..ee4d9d7aa8e98 100644
--- a/api_docs/dev_tools.mdx
+++ b/api_docs/dev_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools
title: "devTools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the devTools plugin
-date: 2023-08-12
+date: 2023-08-13
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 473a880b71dd4..449f759accd49 100644
--- a/api_docs/discover.mdx
+++ b/api_docs/discover.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover
title: "discover"
image: https://source.unsplash.com/400x175/?github
description: API docs for the discover plugin
-date: 2023-08-12
+date: 2023-08-13
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 4298c41aec262..daa9847841fc5 100644
--- a/api_docs/discover_enhanced.mdx
+++ b/api_docs/discover_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced
title: "discoverEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the discoverEnhanced plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced']
---
import discoverEnhancedObj from './discover_enhanced.devdocs.json';
diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx
index cd861c9a8984f..b8639e406f50b 100644
--- a/api_docs/ecs_data_quality_dashboard.mdx
+++ b/api_docs/ecs_data_quality_dashboard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard
title: "ecsDataQualityDashboard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ecsDataQualityDashboard plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard']
---
import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json';
diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx
index 2a5d801de5008..58e9fbf43e98a 100644
--- a/api_docs/embeddable.mdx
+++ b/api_docs/embeddable.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable
title: "embeddable"
image: https://source.unsplash.com/400x175/?github
description: API docs for the embeddable plugin
-date: 2023-08-12
+date: 2023-08-13
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 3f2308e1b1bc8..5b87c2fd8fd06 100644
--- a/api_docs/embeddable_enhanced.mdx
+++ b/api_docs/embeddable_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced
title: "embeddableEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the embeddableEnhanced plugin
-date: 2023-08-12
+date: 2023-08-13
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 2c66688d2fc10..7c42b7eefdbde 100644
--- a/api_docs/encrypted_saved_objects.mdx
+++ b/api_docs/encrypted_saved_objects.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects
title: "encryptedSavedObjects"
image: https://source.unsplash.com/400x175/?github
description: API docs for the encryptedSavedObjects plugin
-date: 2023-08-12
+date: 2023-08-13
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 7169f1079bb62..7203cde8fe847 100644
--- a/api_docs/enterprise_search.mdx
+++ b/api_docs/enterprise_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch
title: "enterpriseSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the enterpriseSearch plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch']
---
import enterpriseSearchObj from './enterprise_search.devdocs.json';
diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx
index 87a4a39be1212..1967eb2503838 100644
--- a/api_docs/es_ui_shared.mdx
+++ b/api_docs/es_ui_shared.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared
title: "esUiShared"
image: https://source.unsplash.com/400x175/?github
description: API docs for the esUiShared plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared']
---
import esUiSharedObj from './es_ui_shared.devdocs.json';
diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx
index 584412f527478..8aaf19c05c9ce 100644
--- a/api_docs/event_annotation.mdx
+++ b/api_docs/event_annotation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation
title: "eventAnnotation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the eventAnnotation plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation']
---
import eventAnnotationObj from './event_annotation.devdocs.json';
diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx
index 3170f7afd3a52..6530eea506932 100644
--- a/api_docs/event_log.mdx
+++ b/api_docs/event_log.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog
title: "eventLog"
image: https://source.unsplash.com/400x175/?github
description: API docs for the eventLog plugin
-date: 2023-08-12
+date: 2023-08-13
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 65be11f65e8e8..4ed811236d01a 100644
--- a/api_docs/exploratory_view.mdx
+++ b/api_docs/exploratory_view.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView
title: "exploratoryView"
image: https://source.unsplash.com/400x175/?github
description: API docs for the exploratoryView plugin
-date: 2023-08-12
+date: 2023-08-13
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 24f86c685e8e7..9f9bf21d26429 100644
--- a/api_docs/expression_error.mdx
+++ b/api_docs/expression_error.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError
title: "expressionError"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionError plugin
-date: 2023-08-12
+date: 2023-08-13
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 c5584c6f6ace0..e57a60b475ce4 100644
--- a/api_docs/expression_gauge.mdx
+++ b/api_docs/expression_gauge.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge
title: "expressionGauge"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionGauge plugin
-date: 2023-08-12
+date: 2023-08-13
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 b60d9e3816a47..234a99585ecd4 100644
--- a/api_docs/expression_heatmap.mdx
+++ b/api_docs/expression_heatmap.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap
title: "expressionHeatmap"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionHeatmap plugin
-date: 2023-08-12
+date: 2023-08-13
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 a4819616163a0..e3438894b9152 100644
--- a/api_docs/expression_image.mdx
+++ b/api_docs/expression_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage
title: "expressionImage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionImage plugin
-date: 2023-08-12
+date: 2023-08-13
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 ffe788d1ca262..887b0bbff6d86 100644
--- a/api_docs/expression_legacy_metric_vis.mdx
+++ b/api_docs/expression_legacy_metric_vis.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis
title: "expressionLegacyMetricVis"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionLegacyMetricVis plugin
-date: 2023-08-12
+date: 2023-08-13
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 93339efe91e9f..ec3c46f4b5e10 100644
--- a/api_docs/expression_metric.mdx
+++ b/api_docs/expression_metric.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric
title: "expressionMetric"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionMetric plugin
-date: 2023-08-12
+date: 2023-08-13
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 296e9d62d25a5..e986aad481157 100644
--- a/api_docs/expression_metric_vis.mdx
+++ b/api_docs/expression_metric_vis.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis
title: "expressionMetricVis"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionMetricVis plugin
-date: 2023-08-12
+date: 2023-08-13
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 dba1204f94bf0..88c8a71560cd4 100644
--- a/api_docs/expression_partition_vis.mdx
+++ b/api_docs/expression_partition_vis.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis
title: "expressionPartitionVis"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionPartitionVis plugin
-date: 2023-08-12
+date: 2023-08-13
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 7359fe28cc5b3..13db162d10595 100644
--- a/api_docs/expression_repeat_image.mdx
+++ b/api_docs/expression_repeat_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage
title: "expressionRepeatImage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionRepeatImage plugin
-date: 2023-08-12
+date: 2023-08-13
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 9bfaa0ac3ed65..02286a1b531b9 100644
--- a/api_docs/expression_reveal_image.mdx
+++ b/api_docs/expression_reveal_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage
title: "expressionRevealImage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionRevealImage plugin
-date: 2023-08-12
+date: 2023-08-13
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 ff3c56c425a87..b77e2109d4c8b 100644
--- a/api_docs/expression_shape.mdx
+++ b/api_docs/expression_shape.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape
title: "expressionShape"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionShape plugin
-date: 2023-08-12
+date: 2023-08-13
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 4c75c02c5e341..46394fbffe0d1 100644
--- a/api_docs/expression_tagcloud.mdx
+++ b/api_docs/expression_tagcloud.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud
title: "expressionTagcloud"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionTagcloud plugin
-date: 2023-08-12
+date: 2023-08-13
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 df06601e9f362..65d3fc9f429d1 100644
--- a/api_docs/expression_x_y.mdx
+++ b/api_docs/expression_x_y.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY
title: "expressionXY"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionXY plugin
-date: 2023-08-12
+date: 2023-08-13
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 3410183feb536..b543f38a6a379 100644
--- a/api_docs/expressions.mdx
+++ b/api_docs/expressions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions
title: "expressions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressions plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions']
---
import expressionsObj from './expressions.devdocs.json';
diff --git a/api_docs/features.mdx b/api_docs/features.mdx
index 758f4c495f268..9139e0ecffa15 100644
--- a/api_docs/features.mdx
+++ b/api_docs/features.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features
title: "features"
image: https://source.unsplash.com/400x175/?github
description: API docs for the features plugin
-date: 2023-08-12
+date: 2023-08-13
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 88695b71852a4..ce9b6bb09d84c 100644
--- a/api_docs/field_formats.mdx
+++ b/api_docs/field_formats.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats
title: "fieldFormats"
image: https://source.unsplash.com/400x175/?github
description: API docs for the fieldFormats plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats']
---
import fieldFormatsObj from './field_formats.devdocs.json';
diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx
index 7fc380dd74812..4b84d809d03d2 100644
--- a/api_docs/file_upload.mdx
+++ b/api_docs/file_upload.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload
title: "fileUpload"
image: https://source.unsplash.com/400x175/?github
description: API docs for the fileUpload plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload']
---
import fileUploadObj from './file_upload.devdocs.json';
diff --git a/api_docs/files.mdx b/api_docs/files.mdx
index b0084dcecd3f6..c6c2fe1c4cb53 100644
--- a/api_docs/files.mdx
+++ b/api_docs/files.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files
title: "files"
image: https://source.unsplash.com/400x175/?github
description: API docs for the files plugin
-date: 2023-08-12
+date: 2023-08-13
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 577b94c7a8bb2..d1fc1097eed6b 100644
--- a/api_docs/files_management.mdx
+++ b/api_docs/files_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement
title: "filesManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the filesManagement plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement']
---
import filesManagementObj from './files_management.devdocs.json';
diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx
index 16807b96e5927..2543fa6ba3161 100644
--- a/api_docs/fleet.mdx
+++ b/api_docs/fleet.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet
title: "fleet"
image: https://source.unsplash.com/400x175/?github
description: API docs for the fleet plugin
-date: 2023-08-12
+date: 2023-08-13
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 569b9a96e275a..449a7819af30d 100644
--- a/api_docs/global_search.mdx
+++ b/api_docs/global_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch
title: "globalSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the globalSearch plugin
-date: 2023-08-12
+date: 2023-08-13
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 e4138cb9e1b7a..0f9333b1e1789 100644
--- a/api_docs/guided_onboarding.mdx
+++ b/api_docs/guided_onboarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding
title: "guidedOnboarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the guidedOnboarding plugin
-date: 2023-08-12
+date: 2023-08-13
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 c1bbf9e757f55..60463d1dc114f 100644
--- a/api_docs/home.mdx
+++ b/api_docs/home.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home
title: "home"
image: https://source.unsplash.com/400x175/?github
description: API docs for the home plugin
-date: 2023-08-12
+date: 2023-08-13
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 f247c8b693566..d41b0b4f114d2 100644
--- a/api_docs/image_embeddable.mdx
+++ b/api_docs/image_embeddable.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable
title: "imageEmbeddable"
image: https://source.unsplash.com/400x175/?github
description: API docs for the imageEmbeddable plugin
-date: 2023-08-12
+date: 2023-08-13
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 93d3969ada2db..53091ec20dfde 100644
--- a/api_docs/index_lifecycle_management.mdx
+++ b/api_docs/index_lifecycle_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement
title: "indexLifecycleManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the indexLifecycleManagement plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement']
---
import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json';
diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx
index 0b018ec027eb5..368b33545f671 100644
--- a/api_docs/index_management.mdx
+++ b/api_docs/index_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement
title: "indexManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the indexManagement plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement']
---
import indexManagementObj from './index_management.devdocs.json';
diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx
index c8f983c27b11f..a884fa7f5de4c 100644
--- a/api_docs/infra.mdx
+++ b/api_docs/infra.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra
title: "infra"
image: https://source.unsplash.com/400x175/?github
description: API docs for the infra plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra']
---
import infraObj from './infra.devdocs.json';
diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx
index b9a1b2ee2047e..8a69a0936b1be 100644
--- a/api_docs/inspector.mdx
+++ b/api_docs/inspector.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector
title: "inspector"
image: https://source.unsplash.com/400x175/?github
description: API docs for the inspector plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector']
---
import inspectorObj from './inspector.devdocs.json';
diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx
index e529820ae43fd..7046e8fe3f3ba 100644
--- a/api_docs/interactive_setup.mdx
+++ b/api_docs/interactive_setup.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup
title: "interactiveSetup"
image: https://source.unsplash.com/400x175/?github
description: API docs for the interactiveSetup plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup']
---
import interactiveSetupObj from './interactive_setup.devdocs.json';
diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx
index 09279e9dbb2c6..0c153722241cf 100644
--- a/api_docs/kbn_ace.mdx
+++ b/api_docs/kbn_ace.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace
title: "@kbn/ace"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ace plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace']
---
import kbnAceObj from './kbn_ace.devdocs.json';
diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx
index 0109005a05701..cabab1635de69 100644
--- a/api_docs/kbn_aiops_components.mdx
+++ b/api_docs/kbn_aiops_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components
title: "@kbn/aiops-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/aiops-components plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components']
---
import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json';
diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx
index 03a193e12b874..aa3964ab1b96d 100644
--- a/api_docs/kbn_aiops_utils.mdx
+++ b/api_docs/kbn_aiops_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils
title: "@kbn/aiops-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/aiops-utils plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils']
---
import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json';
diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx
index cc967cc6c4580..4a8eb06ed198a 100644
--- a/api_docs/kbn_alerting_state_types.mdx
+++ b/api_docs/kbn_alerting_state_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types
title: "@kbn/alerting-state-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/alerting-state-types plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types']
---
import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json';
diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx
index 8b3ee6f788cff..576ef789698e1 100644
--- a/api_docs/kbn_alerts_as_data_utils.mdx
+++ b/api_docs/kbn_alerts_as_data_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils
title: "@kbn/alerts-as-data-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/alerts-as-data-utils plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils']
---
import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json';
diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx
index 101293525411c..670438f1f2bb2 100644
--- a/api_docs/kbn_alerts_ui_shared.mdx
+++ b/api_docs/kbn_alerts_ui_shared.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared
title: "@kbn/alerts-ui-shared"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/alerts-ui-shared plugin
-date: 2023-08-12
+date: 2023-08-13
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 47eb73ce0c742..7ae01a2c22954 100644
--- a/api_docs/kbn_analytics.mdx
+++ b/api_docs/kbn_analytics.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics
title: "@kbn/analytics"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics']
---
import kbnAnalyticsObj from './kbn_analytics.devdocs.json';
diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx
index 061fd0e470d1e..3f35a61d1fef4 100644
--- a/api_docs/kbn_analytics_client.mdx
+++ b/api_docs/kbn_analytics_client.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client
title: "@kbn/analytics-client"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-client plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client']
---
import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
index 742909bdbaba9..af15d7bccd9dc 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser
title: "@kbn/analytics-shippers-elastic-v3-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser']
---
import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
index af1dd325f1e6e..a2085593a5fe7 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common
title: "@kbn/analytics-shippers-elastic-v3-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common']
---
import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
index 1656a9ca990d7..09db011f3a6e9 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server
title: "@kbn/analytics-shippers-elastic-v3-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server']
---
import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx
index 7b206203c0c01..b8d115ee521d0 100644
--- a/api_docs/kbn_analytics_shippers_fullstory.mdx
+++ b/api_docs/kbn_analytics_shippers_fullstory.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory
title: "@kbn/analytics-shippers-fullstory"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-fullstory plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory']
---
import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx
index 82e0823d1b34d..9116ed0180465 100644
--- a/api_docs/kbn_analytics_shippers_gainsight.mdx
+++ b/api_docs/kbn_analytics_shippers_gainsight.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight
title: "@kbn/analytics-shippers-gainsight"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-gainsight plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight']
---
import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json';
diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx
index 05cb3b66b3b5a..b2390753e7b77 100644
--- a/api_docs/kbn_apm_config_loader.mdx
+++ b/api_docs/kbn_apm_config_loader.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader
title: "@kbn/apm-config-loader"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-config-loader plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader']
---
import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json';
diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx
index 46ed2af46f34c..133c5a40a23f2 100644
--- a/api_docs/kbn_apm_synthtrace.mdx
+++ b/api_docs/kbn_apm_synthtrace.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace
title: "@kbn/apm-synthtrace"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-synthtrace plugin
-date: 2023-08-12
+date: 2023-08-13
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 dcc3e638349d3..165eeef22b2a4 100644
--- a/api_docs/kbn_apm_synthtrace_client.mdx
+++ b/api_docs/kbn_apm_synthtrace_client.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client
title: "@kbn/apm-synthtrace-client"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-synthtrace-client plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client']
---
import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json';
diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx
index 436b728930bc2..96e4bef091b7a 100644
--- a/api_docs/kbn_apm_utils.mdx
+++ b/api_docs/kbn_apm_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils
title: "@kbn/apm-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-utils plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils']
---
import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json';
diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx
index d58522991879d..bd057afd63f5c 100644
--- a/api_docs/kbn_axe_config.mdx
+++ b/api_docs/kbn_axe_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config
title: "@kbn/axe-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/axe-config plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config']
---
import kbnAxeConfigObj from './kbn_axe_config.devdocs.json';
diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx
index 1bbc3245c9720..dccb8f7aa7efb 100644
--- a/api_docs/kbn_cases_components.mdx
+++ b/api_docs/kbn_cases_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components
title: "@kbn/cases-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cases-components plugin
-date: 2023-08-12
+date: 2023-08-13
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 18a49a033b6b2..a1178538914e7 100644
--- a/api_docs/kbn_cell_actions.mdx
+++ b/api_docs/kbn_cell_actions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions
title: "@kbn/cell-actions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cell-actions plugin
-date: 2023-08-12
+date: 2023-08-13
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 db2894512432a..c045eeb7efdca 100644
--- a/api_docs/kbn_chart_expressions_common.mdx
+++ b/api_docs/kbn_chart_expressions_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common
title: "@kbn/chart-expressions-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/chart-expressions-common plugin
-date: 2023-08-12
+date: 2023-08-13
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 08c61ce384b46..751b28c8b379a 100644
--- a/api_docs/kbn_chart_icons.mdx
+++ b/api_docs/kbn_chart_icons.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons
title: "@kbn/chart-icons"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/chart-icons plugin
-date: 2023-08-12
+date: 2023-08-13
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 17f54a02072b7..803f159d4c03f 100644
--- a/api_docs/kbn_ci_stats_core.mdx
+++ b/api_docs/kbn_ci_stats_core.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core
title: "@kbn/ci-stats-core"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ci-stats-core plugin
-date: 2023-08-12
+date: 2023-08-13
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 cf31ce6cb57df..337bec0d17813 100644
--- a/api_docs/kbn_ci_stats_performance_metrics.mdx
+++ b/api_docs/kbn_ci_stats_performance_metrics.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics
title: "@kbn/ci-stats-performance-metrics"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ci-stats-performance-metrics plugin
-date: 2023-08-12
+date: 2023-08-13
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 55b3ec9d6a996..1aa2cb2b13b6d 100644
--- a/api_docs/kbn_ci_stats_reporter.mdx
+++ b/api_docs/kbn_ci_stats_reporter.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter
title: "@kbn/ci-stats-reporter"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ci-stats-reporter plugin
-date: 2023-08-12
+date: 2023-08-13
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 564faae4630e3..8bd15bef2b91e 100644
--- a/api_docs/kbn_cli_dev_mode.mdx
+++ b/api_docs/kbn_cli_dev_mode.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode
title: "@kbn/cli-dev-mode"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cli-dev-mode plugin
-date: 2023-08-12
+date: 2023-08-13
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 44e7e9fa7f58e..4f51899985240 100644
--- a/api_docs/kbn_code_editor.mdx
+++ b/api_docs/kbn_code_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor
title: "@kbn/code-editor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/code-editor plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor']
---
import kbnCodeEditorObj from './kbn_code_editor.devdocs.json';
diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx
index 1c10d3c95e297..6369b03521c14 100644
--- a/api_docs/kbn_code_editor_mocks.mdx
+++ b/api_docs/kbn_code_editor_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks
title: "@kbn/code-editor-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/code-editor-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks']
---
import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json';
diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx
index 95b6d37c09b9c..e775cac3e38fd 100644
--- a/api_docs/kbn_coloring.mdx
+++ b/api_docs/kbn_coloring.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring
title: "@kbn/coloring"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/coloring plugin
-date: 2023-08-12
+date: 2023-08-13
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 9da19b8e5dd95..365ff65c140f1 100644
--- a/api_docs/kbn_config.mdx
+++ b/api_docs/kbn_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config
title: "@kbn/config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/config plugin
-date: 2023-08-12
+date: 2023-08-13
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 0dfdf39a1f34d..0506a84234943 100644
--- a/api_docs/kbn_config_mocks.mdx
+++ b/api_docs/kbn_config_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks
title: "@kbn/config-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/config-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks']
---
import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json';
diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx
index 02f6a8cc5f143..d69c834cc26c8 100644
--- a/api_docs/kbn_config_schema.mdx
+++ b/api_docs/kbn_config_schema.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema
title: "@kbn/config-schema"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/config-schema plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema']
---
import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json';
diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx
index d4f9d7b609c05..0d3d210653faa 100644
--- a/api_docs/kbn_content_management_content_editor.mdx
+++ b/api_docs/kbn_content_management_content_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor
title: "@kbn/content-management-content-editor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-content-editor plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor']
---
import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json';
diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx
index 17465bdcdda04..17b481f42e658 100644
--- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx
+++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view
title: "@kbn/content-management-tabbed-table-list-view"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-tabbed-table-list-view plugin
-date: 2023-08-12
+date: 2023-08-13
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 8dff7ba986683..3b60526d5e9de 100644
--- a/api_docs/kbn_content_management_table_list_view.mdx
+++ b/api_docs/kbn_content_management_table_list_view.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view
title: "@kbn/content-management-table-list-view"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-table-list-view plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view']
---
import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json';
diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx
index f514163d33a77..62125d8a9cf04 100644
--- a/api_docs/kbn_content_management_table_list_view_table.mdx
+++ b/api_docs/kbn_content_management_table_list_view_table.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table
title: "@kbn/content-management-table-list-view-table"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-table-list-view-table plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table']
---
import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json';
diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx
index f44fb2d78044e..65736cf0004c8 100644
--- a/api_docs/kbn_content_management_utils.mdx
+++ b/api_docs/kbn_content_management_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils
title: "@kbn/content-management-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-utils plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils']
---
import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx
index 35f72b85b52d9..7352e484eb784 100644
--- a/api_docs/kbn_core_analytics_browser.mdx
+++ b/api_docs/kbn_core_analytics_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser
title: "@kbn/core-analytics-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 d8be2e24e3b2f..33930dc1a4eda 100644
--- a/api_docs/kbn_core_analytics_browser_internal.mdx
+++ b/api_docs/kbn_core_analytics_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal
title: "@kbn/core-analytics-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-browser-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 9f66638e8cf89..47fd5322504e9 100644
--- a/api_docs/kbn_core_analytics_browser_mocks.mdx
+++ b/api_docs/kbn_core_analytics_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks
title: "@kbn/core-analytics-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks']
---
import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx
index 9007afcfd6164..e92d5fac5788b 100644
--- a/api_docs/kbn_core_analytics_server.mdx
+++ b/api_docs/kbn_core_analytics_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server
title: "@kbn/core-analytics-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 a432abf0b12cc..afa3529a28a24 100644
--- a/api_docs/kbn_core_analytics_server_internal.mdx
+++ b/api_docs/kbn_core_analytics_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal
title: "@kbn/core-analytics-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 9de7d4298ce70..a7c1612a0d1ab 100644
--- a/api_docs/kbn_core_analytics_server_mocks.mdx
+++ b/api_docs/kbn_core_analytics_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks
title: "@kbn/core-analytics-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 3fe748f825157..07bb7ef0dea3d 100644
--- a/api_docs/kbn_core_application_browser.mdx
+++ b/api_docs/kbn_core_application_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser
title: "@kbn/core-application-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 ade92a2a7a80a..99ec611fbfa05 100644
--- a/api_docs/kbn_core_application_browser_internal.mdx
+++ b/api_docs/kbn_core_application_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal
title: "@kbn/core-application-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-browser-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 4ce0c7e905d47..0d926286d2fd5 100644
--- a/api_docs/kbn_core_application_browser_mocks.mdx
+++ b/api_docs/kbn_core_application_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks
title: "@kbn/core-application-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 6a35c9d7e4731..58f9057e09540 100644
--- a/api_docs/kbn_core_application_common.mdx
+++ b/api_docs/kbn_core_application_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common
title: "@kbn/core-application-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-common plugin
-date: 2023-08-12
+date: 2023-08-13
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 4440f018cddb3..4f2114d833af8 100644
--- a/api_docs/kbn_core_apps_browser_internal.mdx
+++ b/api_docs/kbn_core_apps_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal
title: "@kbn/core-apps-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-apps-browser-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 c3d15a491b4e6..845d24e42ba7b 100644
--- a/api_docs/kbn_core_apps_browser_mocks.mdx
+++ b/api_docs/kbn_core_apps_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks
title: "@kbn/core-apps-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-apps-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 7fce8a0088de8..b954dea8c3488 100644
--- a/api_docs/kbn_core_apps_server_internal.mdx
+++ b/api_docs/kbn_core_apps_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal
title: "@kbn/core-apps-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-apps-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 71f8a0e491ec4..be5897c6a943c 100644
--- a/api_docs/kbn_core_base_browser_mocks.mdx
+++ b/api_docs/kbn_core_base_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks
title: "@kbn/core-base-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 337f3633b248d..7802681719fa2 100644
--- a/api_docs/kbn_core_base_common.mdx
+++ b/api_docs/kbn_core_base_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common
title: "@kbn/core-base-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-common plugin
-date: 2023-08-12
+date: 2023-08-13
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 90ef23a0d6d4b..5dff1433594d8 100644
--- a/api_docs/kbn_core_base_server_internal.mdx
+++ b/api_docs/kbn_core_base_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal
title: "@kbn/core-base-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 55ee6a5c63205..973ca2adc627d 100644
--- a/api_docs/kbn_core_base_server_mocks.mdx
+++ b/api_docs/kbn_core_base_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks
title: "@kbn/core-base-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 b07533dea93fb..b28d16a49b88c 100644
--- a/api_docs/kbn_core_capabilities_browser_mocks.mdx
+++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks
title: "@kbn/core-capabilities-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 f50fd488b4356..fda02f8c41745 100644
--- a/api_docs/kbn_core_capabilities_common.mdx
+++ b/api_docs/kbn_core_capabilities_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common
title: "@kbn/core-capabilities-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-common plugin
-date: 2023-08-12
+date: 2023-08-13
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 9e4f9cf1810bc..f76b22dea47a8 100644
--- a/api_docs/kbn_core_capabilities_server.mdx
+++ b/api_docs/kbn_core_capabilities_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server
title: "@kbn/core-capabilities-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 d95d3cccff421..2c575ccc89728 100644
--- a/api_docs/kbn_core_capabilities_server_mocks.mdx
+++ b/api_docs/kbn_core_capabilities_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks
title: "@kbn/core-capabilities-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 65707ca9a4216..c151dab5291f8 100644
--- a/api_docs/kbn_core_chrome_browser.mdx
+++ b/api_docs/kbn_core_chrome_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser
title: "@kbn/core-chrome-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-chrome-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 ee15a772068b3..81f7e7fc249b3 100644
--- a/api_docs/kbn_core_chrome_browser_mocks.mdx
+++ b/api_docs/kbn_core_chrome_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks
title: "@kbn/core-chrome-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-chrome-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 3762f3791d208..498341ea0b662 100644
--- a/api_docs/kbn_core_config_server_internal.mdx
+++ b/api_docs/kbn_core_config_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal
title: "@kbn/core-config-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-config-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 9d70ee20782bb..7bd6f13f05043 100644
--- a/api_docs/kbn_core_custom_branding_browser.mdx
+++ b/api_docs/kbn_core_custom_branding_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser
title: "@kbn/core-custom-branding-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 75b732176c0cb..53a898adb91cb 100644
--- a/api_docs/kbn_core_custom_branding_browser_internal.mdx
+++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal
title: "@kbn/core-custom-branding-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-browser-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 e59331ceb4713..21cb7b0db6b8d 100644
--- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx
+++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks
title: "@kbn/core-custom-branding-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 7690811c85c6b..8cb23fce3e749 100644
--- a/api_docs/kbn_core_custom_branding_common.mdx
+++ b/api_docs/kbn_core_custom_branding_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common
title: "@kbn/core-custom-branding-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-common plugin
-date: 2023-08-12
+date: 2023-08-13
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 461546b2ca3be..cef442996b1d3 100644
--- a/api_docs/kbn_core_custom_branding_server.mdx
+++ b/api_docs/kbn_core_custom_branding_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server
title: "@kbn/core-custom-branding-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 1c6d3cbebee40..10c0589c24bbb 100644
--- a/api_docs/kbn_core_custom_branding_server_internal.mdx
+++ b/api_docs/kbn_core_custom_branding_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal
title: "@kbn/core-custom-branding-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 0594f01762b5a..96321fb994363 100644
--- a/api_docs/kbn_core_custom_branding_server_mocks.mdx
+++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks
title: "@kbn/core-custom-branding-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 a382a7cc3ae9a..470f113455dbd 100644
--- a/api_docs/kbn_core_deprecations_browser.mdx
+++ b/api_docs/kbn_core_deprecations_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser
title: "@kbn/core-deprecations-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 2d2db2f9b459b..bfeaa7af7d08b 100644
--- a/api_docs/kbn_core_deprecations_browser_internal.mdx
+++ b/api_docs/kbn_core_deprecations_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal
title: "@kbn/core-deprecations-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-browser-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 d0a193f216b14..c3f3ad79859ee 100644
--- a/api_docs/kbn_core_deprecations_browser_mocks.mdx
+++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks
title: "@kbn/core-deprecations-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 0b54edd1a49dc..f389ba94ecb2d 100644
--- a/api_docs/kbn_core_deprecations_common.mdx
+++ b/api_docs/kbn_core_deprecations_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common
title: "@kbn/core-deprecations-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-common plugin
-date: 2023-08-12
+date: 2023-08-13
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 5672cd92879b3..74e822ca01dfb 100644
--- a/api_docs/kbn_core_deprecations_server.mdx
+++ b/api_docs/kbn_core_deprecations_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server
title: "@kbn/core-deprecations-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 92c0e600f936c..53f5f032340af 100644
--- a/api_docs/kbn_core_deprecations_server_internal.mdx
+++ b/api_docs/kbn_core_deprecations_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal
title: "@kbn/core-deprecations-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 8d3d56fab2b02..29f89221002fc 100644
--- a/api_docs/kbn_core_deprecations_server_mocks.mdx
+++ b/api_docs/kbn_core_deprecations_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks
title: "@kbn/core-deprecations-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 26b43dbceff04..07df8671f6d67 100644
--- a/api_docs/kbn_core_doc_links_browser.mdx
+++ b/api_docs/kbn_core_doc_links_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser
title: "@kbn/core-doc-links-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 4461e02dc104e..f368a2ab557e0 100644
--- a/api_docs/kbn_core_doc_links_browser_mocks.mdx
+++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks
title: "@kbn/core-doc-links-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 f9c907ec9d0fd..dd8229bc76ac3 100644
--- a/api_docs/kbn_core_doc_links_server.mdx
+++ b/api_docs/kbn_core_doc_links_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server
title: "@kbn/core-doc-links-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 558dd40e2190a..36029ae2542a5 100644
--- a/api_docs/kbn_core_doc_links_server_mocks.mdx
+++ b/api_docs/kbn_core_doc_links_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks
title: "@kbn/core-doc-links-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 e2b67d77dd8ac..c48034b0d0b86 100644
--- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx
+++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal
title: "@kbn/core-elasticsearch-client-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 10bb88f9a5ebe..cdae4b0968fda 100644
--- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx
+++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks
title: "@kbn/core-elasticsearch-client-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 8b63e2614e331..4df7ed5fc3bb7 100644
--- a/api_docs/kbn_core_elasticsearch_server.mdx
+++ b/api_docs/kbn_core_elasticsearch_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server
title: "@kbn/core-elasticsearch-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 422e2888a9d37..65b4c3ec0d331 100644
--- a/api_docs/kbn_core_elasticsearch_server_internal.mdx
+++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal
title: "@kbn/core-elasticsearch-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 0b0c79eb573dd..805e37203dd94 100644
--- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx
+++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks
title: "@kbn/core-elasticsearch-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 edfc68367229c..53b0caaf81c9f 100644
--- a/api_docs/kbn_core_environment_server_internal.mdx
+++ b/api_docs/kbn_core_environment_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal
title: "@kbn/core-environment-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-environment-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 326a0da6d8b74..7d06d768625ba 100644
--- a/api_docs/kbn_core_environment_server_mocks.mdx
+++ b/api_docs/kbn_core_environment_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks
title: "@kbn/core-environment-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-environment-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 19f07676c1949..429e43154b959 100644
--- a/api_docs/kbn_core_execution_context_browser.mdx
+++ b/api_docs/kbn_core_execution_context_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser
title: "@kbn/core-execution-context-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 f917ad8fbaf75..2b0d34856ce47 100644
--- a/api_docs/kbn_core_execution_context_browser_internal.mdx
+++ b/api_docs/kbn_core_execution_context_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal
title: "@kbn/core-execution-context-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-browser-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 60218900fe4a5..f0f0e8c24c3ff 100644
--- a/api_docs/kbn_core_execution_context_browser_mocks.mdx
+++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks
title: "@kbn/core-execution-context-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 15f9bd51dc2e3..f8e044af54fe8 100644
--- a/api_docs/kbn_core_execution_context_common.mdx
+++ b/api_docs/kbn_core_execution_context_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common
title: "@kbn/core-execution-context-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-common plugin
-date: 2023-08-12
+date: 2023-08-13
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 015ebf9a85509..51bd5f9fa3a72 100644
--- a/api_docs/kbn_core_execution_context_server.mdx
+++ b/api_docs/kbn_core_execution_context_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server
title: "@kbn/core-execution-context-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 963173fc60d22..e1a5d2741b4ce 100644
--- a/api_docs/kbn_core_execution_context_server_internal.mdx
+++ b/api_docs/kbn_core_execution_context_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal
title: "@kbn/core-execution-context-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 92b9ebcd28a79..18343f0882da8 100644
--- a/api_docs/kbn_core_execution_context_server_mocks.mdx
+++ b/api_docs/kbn_core_execution_context_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks
title: "@kbn/core-execution-context-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 4ec65ac9f9780..e74f25f471d29 100644
--- a/api_docs/kbn_core_fatal_errors_browser.mdx
+++ b/api_docs/kbn_core_fatal_errors_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser
title: "@kbn/core-fatal-errors-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-fatal-errors-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 53fc97ed66580..26dabfcf66bf4 100644
--- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx
+++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks
title: "@kbn/core-fatal-errors-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 114bada5218d9..1e616efbe2583 100644
--- a/api_docs/kbn_core_http_browser.mdx
+++ b/api_docs/kbn_core_http_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser
title: "@kbn/core-http-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 2adad87f6a9d6..8d9a6e19b4a10 100644
--- a/api_docs/kbn_core_http_browser_internal.mdx
+++ b/api_docs/kbn_core_http_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal
title: "@kbn/core-http-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-browser-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 b523ffe93c76c..0d32403bf679c 100644
--- a/api_docs/kbn_core_http_browser_mocks.mdx
+++ b/api_docs/kbn_core_http_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks
title: "@kbn/core-http-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 2f753ab5e71a8..ddf4f10972ff9 100644
--- a/api_docs/kbn_core_http_common.mdx
+++ b/api_docs/kbn_core_http_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common
title: "@kbn/core-http-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-common plugin
-date: 2023-08-12
+date: 2023-08-13
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 6fed32e553fd1..fa8ce7fb7b85e 100644
--- a/api_docs/kbn_core_http_context_server_mocks.mdx
+++ b/api_docs/kbn_core_http_context_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks
title: "@kbn/core-http-context-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-context-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 39af492f82274..52c09e0ded6d5 100644
--- a/api_docs/kbn_core_http_request_handler_context_server.mdx
+++ b/api_docs/kbn_core_http_request_handler_context_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server
title: "@kbn/core-http-request-handler-context-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-request-handler-context-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 a7af16e34ef14..6633d2e91aee4 100644
--- a/api_docs/kbn_core_http_resources_server.mdx
+++ b/api_docs/kbn_core_http_resources_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server
title: "@kbn/core-http-resources-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-resources-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 e8283cac35e85..346bba3c5d830 100644
--- a/api_docs/kbn_core_http_resources_server_internal.mdx
+++ b/api_docs/kbn_core_http_resources_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal
title: "@kbn/core-http-resources-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-resources-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 75e017c0dfd30..511f499e573d1 100644
--- a/api_docs/kbn_core_http_resources_server_mocks.mdx
+++ b/api_docs/kbn_core_http_resources_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks
title: "@kbn/core-http-resources-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-resources-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 18b430d6c8883..3a4d759c82d32 100644
--- a/api_docs/kbn_core_http_router_server_internal.mdx
+++ b/api_docs/kbn_core_http_router_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal
title: "@kbn/core-http-router-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-router-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 58d9bc7cb4ba9..639ea3763fd3c 100644
--- a/api_docs/kbn_core_http_router_server_mocks.mdx
+++ b/api_docs/kbn_core_http_router_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks
title: "@kbn/core-http-router-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-router-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 3c12a07c75c0d..1956213ebb84e 100644
--- a/api_docs/kbn_core_http_server.devdocs.json
+++ b/api_docs/kbn_core_http_server.devdocs.json
@@ -3647,14 +3647,6 @@
"plugin": "triggersActionsUi",
"path": "x-pack/plugins/triggers_actions_ui/server/routes/config.ts"
},
- {
- "plugin": "telemetry",
- "path": "src/plugins/telemetry/server/routes/telemetry_config.ts"
- },
- {
- "plugin": "telemetry",
- "path": "src/plugins/telemetry/server/routes/telemetry_last_reported.ts"
- },
{
"plugin": "savedObjectsTagging",
"path": "x-pack/plugins/saved_objects_tagging/server/routes/tags/get_all_tags.ts"
@@ -6485,18 +6477,6 @@
"plugin": "ml",
"path": "x-pack/plugins/ml/server/routes/job_service.ts"
},
- {
- "plugin": "telemetry",
- "path": "src/plugins/telemetry/server/routes/telemetry_opt_in_stats.ts"
- },
- {
- "plugin": "telemetry",
- "path": "src/plugins/telemetry/server/routes/telemetry_opt_in.ts"
- },
- {
- "plugin": "telemetry",
- "path": "src/plugins/telemetry/server/routes/telemetry_usage_stats.ts"
- },
{
"plugin": "savedObjectsTagging",
"path": "x-pack/plugins/saved_objects_tagging/server/routes/tags/create_tag.ts"
@@ -7449,22 +7429,6 @@
"plugin": "savedObjectsManagement",
"path": "src/plugins/saved_objects_management/server/routes/scroll_count.ts"
},
- {
- "plugin": "telemetry",
- "path": "src/plugins/telemetry/server/routes/telemetry_usage_stats.test.ts"
- },
- {
- "plugin": "telemetry",
- "path": "src/plugins/telemetry/server/routes/telemetry_usage_stats.test.ts"
- },
- {
- "plugin": "telemetry",
- "path": "src/plugins/telemetry/server/routes/telemetry_usage_stats.test.ts"
- },
- {
- "plugin": "telemetry",
- "path": "src/plugins/telemetry/server/routes/telemetry_usage_stats.test.ts"
- },
{
"plugin": "visTypeTimelion",
"path": "src/plugins/vis_types/timelion/server/routes/run.ts"
@@ -8623,14 +8587,6 @@
"plugin": "guidedOnboarding",
"path": "src/plugins/guided_onboarding/server/routes/plugin_state_routes.ts"
},
- {
- "plugin": "telemetry",
- "path": "src/plugins/telemetry/server/routes/telemetry_user_has_seen_notice.ts"
- },
- {
- "plugin": "telemetry",
- "path": "src/plugins/telemetry/server/routes/telemetry_last_reported.ts"
- },
{
"plugin": "fleet",
"path": "x-pack/plugins/fleet/server/services/security/fleet_router.ts"
@@ -14062,6 +14018,18 @@
"plugin": "ml",
"path": "x-pack/plugins/ml/server/routes/management.ts"
},
+ {
+ "plugin": "telemetry",
+ "path": "src/plugins/telemetry/server/routes/telemetry_config.ts"
+ },
+ {
+ "plugin": "telemetry",
+ "path": "src/plugins/telemetry/server/routes/telemetry_config.ts"
+ },
+ {
+ "plugin": "telemetry",
+ "path": "src/plugins/telemetry/server/routes/telemetry_last_reported.ts"
+ },
{
"plugin": "logsShared",
"path": "x-pack/plugins/logs_shared/server/lib/adapters/framework/kibana_framework_adapter.ts"
@@ -14590,6 +14558,14 @@
"plugin": "ml",
"path": "x-pack/plugins/ml/server/routes/trained_models.ts"
},
+ {
+ "plugin": "telemetry",
+ "path": "src/plugins/telemetry/server/routes/telemetry_user_has_seen_notice.ts"
+ },
+ {
+ "plugin": "telemetry",
+ "path": "src/plugins/telemetry/server/routes/telemetry_last_reported.ts"
+ },
{
"plugin": "logsShared",
"path": "x-pack/plugins/logs_shared/server/lib/adapters/framework/kibana_framework_adapter.ts"
@@ -15098,6 +15074,18 @@
"plugin": "ml",
"path": "x-pack/plugins/ml/server/routes/alerting.ts"
},
+ {
+ "plugin": "telemetry",
+ "path": "src/plugins/telemetry/server/routes/telemetry_opt_in_stats.ts"
+ },
+ {
+ "plugin": "telemetry",
+ "path": "src/plugins/telemetry/server/routes/telemetry_opt_in.ts"
+ },
+ {
+ "plugin": "telemetry",
+ "path": "src/plugins/telemetry/server/routes/telemetry_usage_stats.ts"
+ },
{
"plugin": "logsShared",
"path": "x-pack/plugins/logs_shared/server/lib/adapters/framework/kibana_framework_adapter.ts"
@@ -15250,6 +15238,22 @@
"plugin": "dataViewFieldEditor",
"path": "src/plugins/data_view_field_editor/server/routes/field_preview.ts"
},
+ {
+ "plugin": "telemetry",
+ "path": "src/plugins/telemetry/server/routes/telemetry_usage_stats.test.ts"
+ },
+ {
+ "plugin": "telemetry",
+ "path": "src/plugins/telemetry/server/routes/telemetry_usage_stats.test.ts"
+ },
+ {
+ "plugin": "telemetry",
+ "path": "src/plugins/telemetry/server/routes/telemetry_usage_stats.test.ts"
+ },
+ {
+ "plugin": "telemetry",
+ "path": "src/plugins/telemetry/server/routes/telemetry_usage_stats.test.ts"
+ },
{
"plugin": "@kbn/core-http-router-server-internal",
"path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_router.ts"
diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx
index 87ddf7b9f05ea..30604529ee256 100644
--- a/api_docs/kbn_core_http_server.mdx
+++ b/api_docs/kbn_core_http_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server
title: "@kbn/core-http-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 3269fff6c4883..c8e4ae451edd7 100644
--- a/api_docs/kbn_core_http_server_internal.mdx
+++ b/api_docs/kbn_core_http_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal
title: "@kbn/core-http-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 927c49eeb7e94..e2a387ab7e3ce 100644
--- a/api_docs/kbn_core_http_server_mocks.mdx
+++ b/api_docs/kbn_core_http_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks
title: "@kbn/core-http-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 684becef8f19a..e30080d9a515e 100644
--- a/api_docs/kbn_core_i18n_browser.mdx
+++ b/api_docs/kbn_core_i18n_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser
title: "@kbn/core-i18n-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 d962298a132c6..337db90717bfa 100644
--- a/api_docs/kbn_core_i18n_browser_mocks.mdx
+++ b/api_docs/kbn_core_i18n_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks
title: "@kbn/core-i18n-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 3d6865c233b79..273743e0f1cf4 100644
--- a/api_docs/kbn_core_i18n_server.mdx
+++ b/api_docs/kbn_core_i18n_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server
title: "@kbn/core-i18n-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 3a91deab4f03d..a39e869fb1597 100644
--- a/api_docs/kbn_core_i18n_server_internal.mdx
+++ b/api_docs/kbn_core_i18n_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal
title: "@kbn/core-i18n-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 c51008c35b7bb..bea2323b2d903 100644
--- a/api_docs/kbn_core_i18n_server_mocks.mdx
+++ b/api_docs/kbn_core_i18n_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks
title: "@kbn/core-i18n-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 0697de58f3995..18c8b3b91e339 100644
--- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx
+++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks
title: "@kbn/core-injected-metadata-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 1bd0ed1ae92e0..5f7562b549bbd 100644
--- a/api_docs/kbn_core_integrations_browser_internal.mdx
+++ b/api_docs/kbn_core_integrations_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal
title: "@kbn/core-integrations-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-integrations-browser-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 c06f074909745..b4584c870d9e6 100644
--- a/api_docs/kbn_core_integrations_browser_mocks.mdx
+++ b/api_docs/kbn_core_integrations_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks
title: "@kbn/core-integrations-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-integrations-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 5c2e0fa9427a1..d484afbf3af2d 100644
--- a/api_docs/kbn_core_lifecycle_browser.mdx
+++ b/api_docs/kbn_core_lifecycle_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser
title: "@kbn/core-lifecycle-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 d62b998ea0d39..947a0f9d924ef 100644
--- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx
+++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks
title: "@kbn/core-lifecycle-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 a40c53395f81f..c94148fe35263 100644
--- a/api_docs/kbn_core_lifecycle_server.mdx
+++ b/api_docs/kbn_core_lifecycle_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server
title: "@kbn/core-lifecycle-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 d47ad613f857e..9fa26b23976f1 100644
--- a/api_docs/kbn_core_lifecycle_server_mocks.mdx
+++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks
title: "@kbn/core-lifecycle-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 d45554d7ef99f..050d6a4ba670e 100644
--- a/api_docs/kbn_core_logging_browser_mocks.mdx
+++ b/api_docs/kbn_core_logging_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks
title: "@kbn/core-logging-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 ed7f98adfa822..eb8c7dc9619b7 100644
--- a/api_docs/kbn_core_logging_common_internal.mdx
+++ b/api_docs/kbn_core_logging_common_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal
title: "@kbn/core-logging-common-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-common-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 64dd3c47b1255..69c878e53d3bd 100644
--- a/api_docs/kbn_core_logging_server.mdx
+++ b/api_docs/kbn_core_logging_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server
title: "@kbn/core-logging-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 6d58641516e8e..00dd9178a90cb 100644
--- a/api_docs/kbn_core_logging_server_internal.mdx
+++ b/api_docs/kbn_core_logging_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal
title: "@kbn/core-logging-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 bb01fd51300a6..86ee49b79d160 100644
--- a/api_docs/kbn_core_logging_server_mocks.mdx
+++ b/api_docs/kbn_core_logging_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks
title: "@kbn/core-logging-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 b2986a00bb3d1..fdbd8c9d69956 100644
--- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx
+++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal
title: "@kbn/core-metrics-collectors-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-collectors-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 dab5267318029..416471d57a464 100644
--- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx
+++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks
title: "@kbn/core-metrics-collectors-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 0347cc4281da6..99adbc4d94660 100644
--- a/api_docs/kbn_core_metrics_server.mdx
+++ b/api_docs/kbn_core_metrics_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server
title: "@kbn/core-metrics-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 6a6c105386cb7..6c91ff5a8619a 100644
--- a/api_docs/kbn_core_metrics_server_internal.mdx
+++ b/api_docs/kbn_core_metrics_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal
title: "@kbn/core-metrics-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 11f47cc363247..c92e6d7de3a2d 100644
--- a/api_docs/kbn_core_metrics_server_mocks.mdx
+++ b/api_docs/kbn_core_metrics_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks
title: "@kbn/core-metrics-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 571797d837007..a37135397d005 100644
--- a/api_docs/kbn_core_mount_utils_browser.mdx
+++ b/api_docs/kbn_core_mount_utils_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser
title: "@kbn/core-mount-utils-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-mount-utils-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 ca031ac1a8403..4cfe7b6585b97 100644
--- a/api_docs/kbn_core_node_server.mdx
+++ b/api_docs/kbn_core_node_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server
title: "@kbn/core-node-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-node-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 f5199e55c13d2..201a2f074b33f 100644
--- a/api_docs/kbn_core_node_server_internal.mdx
+++ b/api_docs/kbn_core_node_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal
title: "@kbn/core-node-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-node-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 a92fa9f756627..1f8c782e442ab 100644
--- a/api_docs/kbn_core_node_server_mocks.mdx
+++ b/api_docs/kbn_core_node_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks
title: "@kbn/core-node-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-node-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 1284db03b72a7..fe8dc3230c26d 100644
--- a/api_docs/kbn_core_notifications_browser.mdx
+++ b/api_docs/kbn_core_notifications_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser
title: "@kbn/core-notifications-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-notifications-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 1e403aeaa86f7..dbe0eaf546061 100644
--- a/api_docs/kbn_core_notifications_browser_internal.mdx
+++ b/api_docs/kbn_core_notifications_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal
title: "@kbn/core-notifications-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-notifications-browser-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 acd30e7d99656..1c931ebe6f832 100644
--- a/api_docs/kbn_core_notifications_browser_mocks.mdx
+++ b/api_docs/kbn_core_notifications_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks
title: "@kbn/core-notifications-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-notifications-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 31b3118a07deb..0cab7aafca56a 100644
--- a/api_docs/kbn_core_overlays_browser.mdx
+++ b/api_docs/kbn_core_overlays_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser
title: "@kbn/core-overlays-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-overlays-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 645206b829466..fb1d8eaaff33b 100644
--- a/api_docs/kbn_core_overlays_browser_internal.mdx
+++ b/api_docs/kbn_core_overlays_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal
title: "@kbn/core-overlays-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-overlays-browser-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 aa6cca4a09149..8231feb371ce1 100644
--- a/api_docs/kbn_core_overlays_browser_mocks.mdx
+++ b/api_docs/kbn_core_overlays_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks
title: "@kbn/core-overlays-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-overlays-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 6d58a44d5ab99..8e2afc2b0f597 100644
--- a/api_docs/kbn_core_plugins_browser.mdx
+++ b/api_docs/kbn_core_plugins_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser
title: "@kbn/core-plugins-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 8218223682bbc..1abe6f8b93dc6 100644
--- a/api_docs/kbn_core_plugins_browser_mocks.mdx
+++ b/api_docs/kbn_core_plugins_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks
title: "@kbn/core-plugins-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks']
---
import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx
index f579419a807c0..8e36c2dceceda 100644
--- a/api_docs/kbn_core_plugins_server.mdx
+++ b/api_docs/kbn_core_plugins_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server
title: "@kbn/core-plugins-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 a1080cd3601b6..450281a4f2d9c 100644
--- a/api_docs/kbn_core_plugins_server_mocks.mdx
+++ b/api_docs/kbn_core_plugins_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks
title: "@kbn/core-plugins-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 e032dafbc2611..e15e3e98bba83 100644
--- a/api_docs/kbn_core_preboot_server.mdx
+++ b/api_docs/kbn_core_preboot_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server
title: "@kbn/core-preboot-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-preboot-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 179ad46abb372..107425ea8d046 100644
--- a/api_docs/kbn_core_preboot_server_mocks.mdx
+++ b/api_docs/kbn_core_preboot_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks
title: "@kbn/core-preboot-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-preboot-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 5dc0eae9b16ef..5712d838dcd15 100644
--- a/api_docs/kbn_core_rendering_browser_mocks.mdx
+++ b/api_docs/kbn_core_rendering_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks
title: "@kbn/core-rendering-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-rendering-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 fb620194937c6..6755da9cdeeab 100644
--- a/api_docs/kbn_core_rendering_server_internal.mdx
+++ b/api_docs/kbn_core_rendering_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal
title: "@kbn/core-rendering-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-rendering-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 27e640e900e3d..f46cedc17826e 100644
--- a/api_docs/kbn_core_rendering_server_mocks.mdx
+++ b/api_docs/kbn_core_rendering_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks
title: "@kbn/core-rendering-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-rendering-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 8c616cab4c1ba..b4c1cd24b38df 100644
--- a/api_docs/kbn_core_root_server_internal.mdx
+++ b/api_docs/kbn_core_root_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal
title: "@kbn/core-root-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-root-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 d88478ea53f57..9147fa74815e9 100644
--- a/api_docs/kbn_core_saved_objects_api_browser.mdx
+++ b/api_docs/kbn_core_saved_objects_api_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser
title: "@kbn/core-saved-objects-api-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 afdd85346ea48..17403bba3bd29 100644
--- a/api_docs/kbn_core_saved_objects_api_server.mdx
+++ b/api_docs/kbn_core_saved_objects_api_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server
title: "@kbn/core-saved-objects-api-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 e5d2e147497a8..2ca98ab7f12a4 100644
--- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks
title: "@kbn/core-saved-objects-api-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 815b82a5f0767..ca436ae170a16 100644
--- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal
title: "@kbn/core-saved-objects-base-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-base-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 288475eeb24f6..45e5c114c42ef 100644
--- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks
title: "@kbn/core-saved-objects-base-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 9b3f3180b96ce..df9dc11e979a3 100644
--- a/api_docs/kbn_core_saved_objects_browser.mdx
+++ b/api_docs/kbn_core_saved_objects_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser
title: "@kbn/core-saved-objects-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 2e45be7a67b65..6376c338eb7f8 100644
--- a/api_docs/kbn_core_saved_objects_browser_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal
title: "@kbn/core-saved-objects-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-browser-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 84d11fc78393d..a7ee32a61751b 100644
--- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks
title: "@kbn/core-saved-objects-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 cafac584953e8..6bee7b4c3bc83 100644
--- a/api_docs/kbn_core_saved_objects_common.mdx
+++ b/api_docs/kbn_core_saved_objects_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common
title: "@kbn/core-saved-objects-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-common plugin
-date: 2023-08-12
+date: 2023-08-13
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 05497ac9cd7e1..27a119ec27a98 100644
--- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal
title: "@kbn/core-saved-objects-import-export-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 509610b7162a8..f4648d837af6f 100644
--- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks
title: "@kbn/core-saved-objects-import-export-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 28f741bb006af..4ae40b47b7bb5 100644
--- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal
title: "@kbn/core-saved-objects-migration-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 8519d407edd23..3595a78035f32 100644
--- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks
title: "@kbn/core-saved-objects-migration-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 f3047469c9753..36137d1f5119f 100644
--- a/api_docs/kbn_core_saved_objects_server.mdx
+++ b/api_docs/kbn_core_saved_objects_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server
title: "@kbn/core-saved-objects-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 015346c712611..e97ee0fc44897 100644
--- a/api_docs/kbn_core_saved_objects_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal
title: "@kbn/core-saved-objects-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 f27c93a407e1b..10ed776604d22 100644
--- a/api_docs/kbn_core_saved_objects_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks
title: "@kbn/core-saved-objects-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 ae0961994d120..8ab9abb8bda5a 100644
--- a/api_docs/kbn_core_saved_objects_utils_server.mdx
+++ b/api_docs/kbn_core_saved_objects_utils_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server
title: "@kbn/core-saved-objects-utils-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-utils-server plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server']
---
import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json';
diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx
index 0e7ceecba6249..4b87a45dd5bae 100644
--- a/api_docs/kbn_core_status_common.mdx
+++ b/api_docs/kbn_core_status_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common
title: "@kbn/core-status-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-common plugin
-date: 2023-08-12
+date: 2023-08-13
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 e17d5c7f20a21..56a77898e28c0 100644
--- a/api_docs/kbn_core_status_common_internal.mdx
+++ b/api_docs/kbn_core_status_common_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal
title: "@kbn/core-status-common-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-common-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 b1942e1ed7da8..79e3cf2ada4e9 100644
--- a/api_docs/kbn_core_status_server.mdx
+++ b/api_docs/kbn_core_status_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server
title: "@kbn/core-status-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 31384e6b8e59b..c892ce9146cf0 100644
--- a/api_docs/kbn_core_status_server_internal.mdx
+++ b/api_docs/kbn_core_status_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal
title: "@kbn/core-status-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 05cb7a6e9fa32..b67079204fc9c 100644
--- a/api_docs/kbn_core_status_server_mocks.mdx
+++ b/api_docs/kbn_core_status_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks
title: "@kbn/core-status-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 631ce1325f85d..d6c01ac23a577 100644
--- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx
+++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters
title: "@kbn/core-test-helpers-deprecations-getters"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin
-date: 2023-08-12
+date: 2023-08-13
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 cf20d660fc15a..f8f77bf956eda 100644
--- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx
+++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser
title: "@kbn/core-test-helpers-http-setup-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 066a6a15cc5c3..25bf7e64e6943 100644
--- a/api_docs/kbn_core_test_helpers_kbn_server.mdx
+++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server
title: "@kbn/core-test-helpers-kbn-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-kbn-server plugin
-date: 2023-08-12
+date: 2023-08-13
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_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx
index 5f9c6af59b724..0a0454fa7e9eb 100644
--- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx
+++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer
title: "@kbn/core-test-helpers-so-type-serializer"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin
-date: 2023-08-12
+date: 2023-08-13
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 531f38d8005bd..7358e3589f8e1 100644
--- a/api_docs/kbn_core_test_helpers_test_utils.mdx
+++ b/api_docs/kbn_core_test_helpers_test_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils
title: "@kbn/core-test-helpers-test-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-test-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 8a37513657d85..af8e8caacc18d 100644
--- a/api_docs/kbn_core_theme_browser.mdx
+++ b/api_docs/kbn_core_theme_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser
title: "@kbn/core-theme-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-theme-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 9274dcda56a50..408f79e6930bb 100644
--- a/api_docs/kbn_core_theme_browser_mocks.mdx
+++ b/api_docs/kbn_core_theme_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks
title: "@kbn/core-theme-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-theme-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 3b469fa858df1..d9c0282097d9b 100644
--- a/api_docs/kbn_core_ui_settings_browser.mdx
+++ b/api_docs/kbn_core_ui_settings_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser
title: "@kbn/core-ui-settings-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 a9f4e4d035f2b..f92761be0aedb 100644
--- a/api_docs/kbn_core_ui_settings_browser_internal.mdx
+++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal
title: "@kbn/core-ui-settings-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-browser-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 9882269c6b6df..28ac5389f8dff 100644
--- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx
+++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks
title: "@kbn/core-ui-settings-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-browser-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 b0756b11b3290..72bab55e3ab60 100644
--- a/api_docs/kbn_core_ui_settings_common.mdx
+++ b/api_docs/kbn_core_ui_settings_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common
title: "@kbn/core-ui-settings-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-common plugin
-date: 2023-08-12
+date: 2023-08-13
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 159836b769b4c..e586aab83eca7 100644
--- a/api_docs/kbn_core_ui_settings_server.mdx
+++ b/api_docs/kbn_core_ui_settings_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server
title: "@kbn/core-ui-settings-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 881ebb05e5ba4..aade227571ec2 100644
--- a/api_docs/kbn_core_ui_settings_server_internal.mdx
+++ b/api_docs/kbn_core_ui_settings_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal
title: "@kbn/core-ui-settings-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 534f66c977788..782fe1b6203a2 100644
--- a/api_docs/kbn_core_ui_settings_server_mocks.mdx
+++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks
title: "@kbn/core-ui-settings-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 28244a3bf2182..d0a95463ae321 100644
--- a/api_docs/kbn_core_usage_data_server.mdx
+++ b/api_docs/kbn_core_usage_data_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server
title: "@kbn/core-usage-data-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-usage-data-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 91dae21151a0d..020a7dedcd6d3 100644
--- a/api_docs/kbn_core_usage_data_server_internal.mdx
+++ b/api_docs/kbn_core_usage_data_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal
title: "@kbn/core-usage-data-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-usage-data-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
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 645569275c379..d2694f33785b9 100644
--- a/api_docs/kbn_core_usage_data_server_mocks.mdx
+++ b/api_docs/kbn_core_usage_data_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks
title: "@kbn/core-usage-data-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-usage-data-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks']
---
import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx
index 19af638e8cc9d..6eb336f8f14b8 100644
--- a/api_docs/kbn_core_user_settings_server.mdx
+++ b/api_docs/kbn_core_user_settings_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server
title: "@kbn/core-user-settings-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-user-settings-server plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server']
---
import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json';
diff --git a/api_docs/kbn_core_user_settings_server_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx
index 3b54628f64827..81335f262794a 100644
--- a/api_docs/kbn_core_user_settings_server_internal.mdx
+++ b/api_docs/kbn_core_user_settings_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal
title: "@kbn/core-user-settings-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-user-settings-server-internal plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal']
---
import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx
index fba2633efd04d..aeccb6d1e5812 100644
--- a/api_docs/kbn_core_user_settings_server_mocks.mdx
+++ b/api_docs/kbn_core_user_settings_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks
title: "@kbn/core-user-settings-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-user-settings-server-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 9439b762dc5e4..7c845cb22aff8 100644
--- a/api_docs/kbn_crypto.mdx
+++ b/api_docs/kbn_crypto.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto
title: "@kbn/crypto"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/crypto plugin
-date: 2023-08-12
+date: 2023-08-13
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 59cc9a43d5d05..bc4d281a5d3f5 100644
--- a/api_docs/kbn_crypto_browser.mdx
+++ b/api_docs/kbn_crypto_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser
title: "@kbn/crypto-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/crypto-browser plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser']
---
import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json';
diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx
index 1462664911dfb..74b8d37da61dd 100644
--- a/api_docs/kbn_cypress_config.mdx
+++ b/api_docs/kbn_cypress_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config
title: "@kbn/cypress-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cypress-config plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config']
---
import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json';
diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx
index 57b41534f1660..7527086301de7 100644
--- a/api_docs/kbn_data_service.mdx
+++ b/api_docs/kbn_data_service.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service
title: "@kbn/data-service"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/data-service plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service']
---
import kbnDataServiceObj from './kbn_data_service.devdocs.json';
diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx
index 96ce00d3d86c0..ae904b66fbcd9 100644
--- a/api_docs/kbn_datemath.mdx
+++ b/api_docs/kbn_datemath.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath
title: "@kbn/datemath"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/datemath plugin
-date: 2023-08-12
+date: 2023-08-13
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 0fa8500c1172b..4f1254f871867 100644
--- a/api_docs/kbn_deeplinks_analytics.mdx
+++ b/api_docs/kbn_deeplinks_analytics.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics
title: "@kbn/deeplinks-analytics"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-analytics plugin
-date: 2023-08-12
+date: 2023-08-13
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 8abad4b25e23b..165b420c44502 100644
--- a/api_docs/kbn_deeplinks_devtools.mdx
+++ b/api_docs/kbn_deeplinks_devtools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools
title: "@kbn/deeplinks-devtools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-devtools plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools']
---
import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json';
diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx
index d26958aea28bb..d4b32c1bbf3f4 100644
--- a/api_docs/kbn_deeplinks_management.mdx
+++ b/api_docs/kbn_deeplinks_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management
title: "@kbn/deeplinks-management"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-management plugin
-date: 2023-08-12
+date: 2023-08-13
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 4355c4480baa8..b83ccdf1c8e1d 100644
--- a/api_docs/kbn_deeplinks_ml.mdx
+++ b/api_docs/kbn_deeplinks_ml.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml
title: "@kbn/deeplinks-ml"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-ml plugin
-date: 2023-08-12
+date: 2023-08-13
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 de2a21fed0eb4..f5b0e1fed274a 100644
--- a/api_docs/kbn_deeplinks_observability.mdx
+++ b/api_docs/kbn_deeplinks_observability.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability
title: "@kbn/deeplinks-observability"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-observability plugin
-date: 2023-08-12
+date: 2023-08-13
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 06b1cba156e8c..326435a6761f6 100644
--- a/api_docs/kbn_deeplinks_search.mdx
+++ b/api_docs/kbn_deeplinks_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search
title: "@kbn/deeplinks-search"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-search plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search']
---
import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json';
diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx
index a6aab74fc0408..157a1796b5c4b 100644
--- a/api_docs/kbn_default_nav_analytics.mdx
+++ b/api_docs/kbn_default_nav_analytics.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics
title: "@kbn/default-nav-analytics"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/default-nav-analytics plugin
-date: 2023-08-12
+date: 2023-08-13
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 b5fe3a5b18122..5f1a69df56b94 100644
--- a/api_docs/kbn_default_nav_devtools.mdx
+++ b/api_docs/kbn_default_nav_devtools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools
title: "@kbn/default-nav-devtools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/default-nav-devtools plugin
-date: 2023-08-12
+date: 2023-08-13
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 8c6c69243658e..78e7fca4177c0 100644
--- a/api_docs/kbn_default_nav_management.mdx
+++ b/api_docs/kbn_default_nav_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management
title: "@kbn/default-nav-management"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/default-nav-management plugin
-date: 2023-08-12
+date: 2023-08-13
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 d1d86bbb00576..ed04deae99f55 100644
--- a/api_docs/kbn_default_nav_ml.mdx
+++ b/api_docs/kbn_default_nav_ml.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml
title: "@kbn/default-nav-ml"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/default-nav-ml plugin
-date: 2023-08-12
+date: 2023-08-13
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 cfa277d89b11d..0d2efd32b4fa5 100644
--- a/api_docs/kbn_dev_cli_errors.mdx
+++ b/api_docs/kbn_dev_cli_errors.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors
title: "@kbn/dev-cli-errors"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-cli-errors plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors']
---
import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json';
diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx
index ce470a3ae3cc3..ac6a39d4d7cfb 100644
--- a/api_docs/kbn_dev_cli_runner.mdx
+++ b/api_docs/kbn_dev_cli_runner.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner
title: "@kbn/dev-cli-runner"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-cli-runner plugin
-date: 2023-08-12
+date: 2023-08-13
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 5f840361a6d80..b9ad52cb4f484 100644
--- a/api_docs/kbn_dev_proc_runner.mdx
+++ b/api_docs/kbn_dev_proc_runner.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner
title: "@kbn/dev-proc-runner"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-proc-runner plugin
-date: 2023-08-12
+date: 2023-08-13
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 26ec9c629aadd..ef9f979b2a2e5 100644
--- a/api_docs/kbn_dev_utils.mdx
+++ b/api_docs/kbn_dev_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils
title: "@kbn/dev-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 46441a6550dd4..b8c798fac8183 100644
--- a/api_docs/kbn_discover_utils.mdx
+++ b/api_docs/kbn_discover_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils
title: "@kbn/discover-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/discover-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 98a8fdc68794f..c2b9f02291432 100644
--- a/api_docs/kbn_doc_links.mdx
+++ b/api_docs/kbn_doc_links.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links
title: "@kbn/doc-links"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/doc-links plugin
-date: 2023-08-12
+date: 2023-08-13
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 4d59873f0c003..89d242ec9cf72 100644
--- a/api_docs/kbn_docs_utils.mdx
+++ b/api_docs/kbn_docs_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils
title: "@kbn/docs-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/docs-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 34d4f2d69311d..3a22f73c4fc58 100644
--- a/api_docs/kbn_dom_drag_drop.mdx
+++ b/api_docs/kbn_dom_drag_drop.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop
title: "@kbn/dom-drag-drop"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dom-drag-drop plugin
-date: 2023-08-12
+date: 2023-08-13
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 bacce4e4aa899..45fb37369969d 100644
--- a/api_docs/kbn_ebt_tools.mdx
+++ b/api_docs/kbn_ebt_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools
title: "@kbn/ebt-tools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ebt-tools plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools']
---
import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json';
diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx
index aae4d6efe614b..3073a945b3683 100644
--- a/api_docs/kbn_ecs.mdx
+++ b/api_docs/kbn_ecs.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs
title: "@kbn/ecs"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ecs plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs']
---
import kbnEcsObj from './kbn_ecs.devdocs.json';
diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx
index 11c538dc3ea42..5a31388d47fb4 100644
--- a/api_docs/kbn_ecs_data_quality_dashboard.mdx
+++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard
title: "@kbn/ecs-data-quality-dashboard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ecs-data-quality-dashboard plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard']
---
import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json';
diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx
index 6946b85c05e5e..de09f6d276944 100644
--- a/api_docs/kbn_elastic_assistant.mdx
+++ b/api_docs/kbn_elastic_assistant.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant
title: "@kbn/elastic-assistant"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/elastic-assistant plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant']
---
import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json';
diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx
index c93a428ec149a..dfc53bcda0913 100644
--- a/api_docs/kbn_es.mdx
+++ b/api_docs/kbn_es.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es
title: "@kbn/es"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es plugin
-date: 2023-08-12
+date: 2023-08-13
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 90575e4dbee58..230ff11d47e08 100644
--- a/api_docs/kbn_es_archiver.mdx
+++ b/api_docs/kbn_es_archiver.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver
title: "@kbn/es-archiver"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-archiver plugin
-date: 2023-08-12
+date: 2023-08-13
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 a181bd456e8b2..691c263d662ea 100644
--- a/api_docs/kbn_es_errors.mdx
+++ b/api_docs/kbn_es_errors.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors
title: "@kbn/es-errors"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-errors plugin
-date: 2023-08-12
+date: 2023-08-13
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 359b0b37ecffc..f35f6b8ad4d6f 100644
--- a/api_docs/kbn_es_query.mdx
+++ b/api_docs/kbn_es_query.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query
title: "@kbn/es-query"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-query plugin
-date: 2023-08-12
+date: 2023-08-13
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 80b21887194c6..621f711ba204f 100644
--- a/api_docs/kbn_es_types.mdx
+++ b/api_docs/kbn_es_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types
title: "@kbn/es-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-types plugin
-date: 2023-08-12
+date: 2023-08-13
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 f679a0c9f8496..007352a37310f 100644
--- a/api_docs/kbn_eslint_plugin_imports.mdx
+++ b/api_docs/kbn_eslint_plugin_imports.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports
title: "@kbn/eslint-plugin-imports"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/eslint-plugin-imports plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports']
---
import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json';
diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx
index df9132da9fafb..fb12f5f24f1b0 100644
--- a/api_docs/kbn_event_annotation_common.mdx
+++ b/api_docs/kbn_event_annotation_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common
title: "@kbn/event-annotation-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/event-annotation-common plugin
-date: 2023-08-12
+date: 2023-08-13
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 94406270c8d45..0325b5e066a45 100644
--- a/api_docs/kbn_event_annotation_components.mdx
+++ b/api_docs/kbn_event_annotation_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components
title: "@kbn/event-annotation-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/event-annotation-components plugin
-date: 2023-08-12
+date: 2023-08-13
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 296ac98182940..13db96a17f4eb 100644
--- a/api_docs/kbn_expandable_flyout.mdx
+++ b/api_docs/kbn_expandable_flyout.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout
title: "@kbn/expandable-flyout"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/expandable-flyout plugin
-date: 2023-08-12
+date: 2023-08-13
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 eb49eb03a70d0..96e5d797e199e 100644
--- a/api_docs/kbn_field_types.mdx
+++ b/api_docs/kbn_field_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types
title: "@kbn/field-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/field-types plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types']
---
import kbnFieldTypesObj from './kbn_field_types.devdocs.json';
diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx
index 15af292a890b8..7ec6d63ffb2d2 100644
--- a/api_docs/kbn_find_used_node_modules.mdx
+++ b/api_docs/kbn_find_used_node_modules.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules
title: "@kbn/find-used-node-modules"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/find-used-node-modules plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules']
---
import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json';
diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx
index 928632cb878aa..e1a092ee8a440 100644
--- a/api_docs/kbn_ftr_common_functional_services.mdx
+++ b/api_docs/kbn_ftr_common_functional_services.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services
title: "@kbn/ftr-common-functional-services"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ftr-common-functional-services plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services']
---
import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json';
diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx
index 1f7eae35f21ef..37e9c74f6619e 100644
--- a/api_docs/kbn_generate.mdx
+++ b/api_docs/kbn_generate.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate
title: "@kbn/generate"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/generate plugin
-date: 2023-08-12
+date: 2023-08-13
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 4a29f0109591c..03ada267f8eb6 100644
--- a/api_docs/kbn_generate_console_definitions.mdx
+++ b/api_docs/kbn_generate_console_definitions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions
title: "@kbn/generate-console-definitions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/generate-console-definitions plugin
-date: 2023-08-12
+date: 2023-08-13
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 0e5ccda75490e..3d45cee797bb1 100644
--- a/api_docs/kbn_generate_csv.mdx
+++ b/api_docs/kbn_generate_csv.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv
title: "@kbn/generate-csv"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/generate-csv plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv']
---
import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json';
diff --git a/api_docs/kbn_generate_csv_types.mdx b/api_docs/kbn_generate_csv_types.mdx
index 400bf04b0a3d7..f3a6a1aca2fc5 100644
--- a/api_docs/kbn_generate_csv_types.mdx
+++ b/api_docs/kbn_generate_csv_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv-types
title: "@kbn/generate-csv-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/generate-csv-types plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv-types']
---
import kbnGenerateCsvTypesObj from './kbn_generate_csv_types.devdocs.json';
diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx
index e5aa18a17345a..7ecc3dc6cb9ee 100644
--- a/api_docs/kbn_guided_onboarding.mdx
+++ b/api_docs/kbn_guided_onboarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding
title: "@kbn/guided-onboarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/guided-onboarding plugin
-date: 2023-08-12
+date: 2023-08-13
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 d842abd281d51..1c54d9d149730 100644
--- a/api_docs/kbn_handlebars.mdx
+++ b/api_docs/kbn_handlebars.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars
title: "@kbn/handlebars"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/handlebars plugin
-date: 2023-08-12
+date: 2023-08-13
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 d18832dd7332c..ae0f9baafa89f 100644
--- a/api_docs/kbn_hapi_mocks.mdx
+++ b/api_docs/kbn_hapi_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks
title: "@kbn/hapi-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/hapi-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 93e0acbd58fd8..d1c570775c8e0 100644
--- a/api_docs/kbn_health_gateway_server.mdx
+++ b/api_docs/kbn_health_gateway_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server
title: "@kbn/health-gateway-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/health-gateway-server plugin
-date: 2023-08-12
+date: 2023-08-13
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 2c6cec399f31e..6c752c3743d8b 100644
--- a/api_docs/kbn_home_sample_data_card.mdx
+++ b/api_docs/kbn_home_sample_data_card.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card
title: "@kbn/home-sample-data-card"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/home-sample-data-card plugin
-date: 2023-08-12
+date: 2023-08-13
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 ac23f7f682057..fbbdcd98ad5a5 100644
--- a/api_docs/kbn_home_sample_data_tab.mdx
+++ b/api_docs/kbn_home_sample_data_tab.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab
title: "@kbn/home-sample-data-tab"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/home-sample-data-tab plugin
-date: 2023-08-12
+date: 2023-08-13
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 b561a53e816bf..df589abc4b430 100644
--- a/api_docs/kbn_i18n.mdx
+++ b/api_docs/kbn_i18n.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n
title: "@kbn/i18n"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/i18n plugin
-date: 2023-08-12
+date: 2023-08-13
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 24499d3b368c3..30d81491f78c9 100644
--- a/api_docs/kbn_i18n_react.mdx
+++ b/api_docs/kbn_i18n_react.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react
title: "@kbn/i18n-react"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/i18n-react plugin
-date: 2023-08-12
+date: 2023-08-13
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 20004dab6cf5b..c3be0fd52743b 100644
--- a/api_docs/kbn_import_resolver.mdx
+++ b/api_docs/kbn_import_resolver.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver
title: "@kbn/import-resolver"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/import-resolver plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver']
---
import kbnImportResolverObj from './kbn_import_resolver.devdocs.json';
diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx
index 9c58de040580a..a76c893b3f0db 100644
--- a/api_docs/kbn_infra_forge.mdx
+++ b/api_docs/kbn_infra_forge.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge
title: "@kbn/infra-forge"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/infra-forge plugin
-date: 2023-08-12
+date: 2023-08-13
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 141a0d39c1a79..925392ce2243f 100644
--- a/api_docs/kbn_interpreter.mdx
+++ b/api_docs/kbn_interpreter.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter
title: "@kbn/interpreter"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/interpreter plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter']
---
import kbnInterpreterObj from './kbn_interpreter.devdocs.json';
diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx
index 5bcfeefe95b22..2a7eb84924e75 100644
--- a/api_docs/kbn_io_ts_utils.mdx
+++ b/api_docs/kbn_io_ts_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils
title: "@kbn/io-ts-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/io-ts-utils plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils']
---
import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json';
diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx
index 008ce0d0cf1d8..d52b8abbb72e1 100644
--- a/api_docs/kbn_jest_serializers.mdx
+++ b/api_docs/kbn_jest_serializers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers
title: "@kbn/jest-serializers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/jest-serializers plugin
-date: 2023-08-12
+date: 2023-08-13
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 f92472d9188a0..27e4c2906da0e 100644
--- a/api_docs/kbn_journeys.mdx
+++ b/api_docs/kbn_journeys.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys
title: "@kbn/journeys"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/journeys plugin
-date: 2023-08-12
+date: 2023-08-13
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 ab412c1ac5bda..82a8e83603c37 100644
--- a/api_docs/kbn_json_ast.mdx
+++ b/api_docs/kbn_json_ast.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast
title: "@kbn/json-ast"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/json-ast plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast']
---
import kbnJsonAstObj from './kbn_json_ast.devdocs.json';
diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx
index da24f435a9fd0..a38fb2ce3b710 100644
--- a/api_docs/kbn_kibana_manifest_schema.mdx
+++ b/api_docs/kbn_kibana_manifest_schema.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema
title: "@kbn/kibana-manifest-schema"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/kibana-manifest-schema plugin
-date: 2023-08-12
+date: 2023-08-13
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 ed2f9d7473f11..0e8c5f5063ea6 100644
--- a/api_docs/kbn_language_documentation_popover.mdx
+++ b/api_docs/kbn_language_documentation_popover.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover
title: "@kbn/language-documentation-popover"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/language-documentation-popover plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover']
---
import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json';
diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx
index dca360967a970..5148f18e59c17 100644
--- a/api_docs/kbn_logging.mdx
+++ b/api_docs/kbn_logging.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging
title: "@kbn/logging"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/logging plugin
-date: 2023-08-12
+date: 2023-08-13
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 5fb0759520928..b7e212487223f 100644
--- a/api_docs/kbn_logging_mocks.mdx
+++ b/api_docs/kbn_logging_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks
title: "@kbn/logging-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/logging-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks']
---
import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json';
diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx
index 1d2587a2be6f2..c810a2432ee44 100644
--- a/api_docs/kbn_managed_vscode_config.mdx
+++ b/api_docs/kbn_managed_vscode_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config
title: "@kbn/managed-vscode-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/managed-vscode-config plugin
-date: 2023-08-12
+date: 2023-08-13
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 831cfa33d9bcc..0335415de9f88 100644
--- a/api_docs/kbn_management_cards_navigation.mdx
+++ b/api_docs/kbn_management_cards_navigation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation
title: "@kbn/management-cards-navigation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/management-cards-navigation plugin
-date: 2023-08-12
+date: 2023-08-13
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_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx
index f25539fc6274f..93cb0b6803134 100644
--- a/api_docs/kbn_management_storybook_config.mdx
+++ b/api_docs/kbn_management_storybook_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config
title: "@kbn/management-storybook-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/management-storybook-config plugin
-date: 2023-08-12
+date: 2023-08-13
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 f3f364312d27a..9eaa93247cba0 100644
--- a/api_docs/kbn_mapbox_gl.mdx
+++ b/api_docs/kbn_mapbox_gl.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl
title: "@kbn/mapbox-gl"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/mapbox-gl plugin
-date: 2023-08-12
+date: 2023-08-13
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 a31298c42a51d..7c3748d58cab7 100644
--- a/api_docs/kbn_maps_vector_tile_utils.mdx
+++ b/api_docs/kbn_maps_vector_tile_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils
title: "@kbn/maps-vector-tile-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/maps-vector-tile-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 2270f2ba5e5b7..edda74905024b 100644
--- a/api_docs/kbn_ml_agg_utils.mdx
+++ b/api_docs/kbn_ml_agg_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils
title: "@kbn/ml-agg-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-agg-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 74973b1f74b29..9c73d02ffb4bf 100644
--- a/api_docs/kbn_ml_anomaly_utils.mdx
+++ b/api_docs/kbn_ml_anomaly_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils
title: "@kbn/ml-anomaly-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-anomaly-utils plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils']
---
import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx
index 1ea58ce81827f..5cc05b72438f7 100644
--- a/api_docs/kbn_ml_category_validator.mdx
+++ b/api_docs/kbn_ml_category_validator.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator
title: "@kbn/ml-category-validator"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-category-validator plugin
-date: 2023-08-12
+date: 2023-08-13
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_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx
index 64c5bb6569f17..274b4a5d5ed39 100644
--- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx
+++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils
title: "@kbn/ml-data-frame-analytics-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-data-frame-analytics-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 e382cdd019f63..72f93b7a10301 100644
--- a/api_docs/kbn_ml_data_grid.mdx
+++ b/api_docs/kbn_ml_data_grid.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid
title: "@kbn/ml-data-grid"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-data-grid plugin
-date: 2023-08-12
+date: 2023-08-13
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 4c715d0b221b3..8fd88a81352c8 100644
--- a/api_docs/kbn_ml_date_picker.mdx
+++ b/api_docs/kbn_ml_date_picker.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker
title: "@kbn/ml-date-picker"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-date-picker plugin
-date: 2023-08-12
+date: 2023-08-13
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 2361228e8fb4b..216a1bcefe96b 100644
--- a/api_docs/kbn_ml_date_utils.mdx
+++ b/api_docs/kbn_ml_date_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils
title: "@kbn/ml-date-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-date-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 0fcd443023b8b..34a658d635104 100644
--- a/api_docs/kbn_ml_error_utils.mdx
+++ b/api_docs/kbn_ml_error_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils
title: "@kbn/ml-error-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-error-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 be489b790cdb9..7c57251c16898 100644
--- a/api_docs/kbn_ml_in_memory_table.mdx
+++ b/api_docs/kbn_ml_in_memory_table.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table
title: "@kbn/ml-in-memory-table"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-in-memory-table plugin
-date: 2023-08-12
+date: 2023-08-13
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 095a2a81e982c..ad90dfb68f10a 100644
--- a/api_docs/kbn_ml_is_defined.mdx
+++ b/api_docs/kbn_ml_is_defined.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined
title: "@kbn/ml-is-defined"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-is-defined plugin
-date: 2023-08-12
+date: 2023-08-13
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 bf87b5a80309f..e02220fba017e 100644
--- a/api_docs/kbn_ml_is_populated_object.mdx
+++ b/api_docs/kbn_ml_is_populated_object.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object
title: "@kbn/ml-is-populated-object"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-is-populated-object plugin
-date: 2023-08-12
+date: 2023-08-13
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 d21fb0e679015..be8a7bd0b8591 100644
--- a/api_docs/kbn_ml_kibana_theme.mdx
+++ b/api_docs/kbn_ml_kibana_theme.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme
title: "@kbn/ml-kibana-theme"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-kibana-theme plugin
-date: 2023-08-12
+date: 2023-08-13
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 c70713615f86a..78f022def7989 100644
--- a/api_docs/kbn_ml_local_storage.mdx
+++ b/api_docs/kbn_ml_local_storage.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage
title: "@kbn/ml-local-storage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-local-storage plugin
-date: 2023-08-12
+date: 2023-08-13
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 7ba03cc18dbcc..3eff824401223 100644
--- a/api_docs/kbn_ml_nested_property.mdx
+++ b/api_docs/kbn_ml_nested_property.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property
title: "@kbn/ml-nested-property"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-nested-property plugin
-date: 2023-08-12
+date: 2023-08-13
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 82f677421a4ea..011ff0e1fa0cd 100644
--- a/api_docs/kbn_ml_number_utils.mdx
+++ b/api_docs/kbn_ml_number_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils
title: "@kbn/ml-number-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-number-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 9dd53783ab020..61751273a4fc0 100644
--- a/api_docs/kbn_ml_query_utils.mdx
+++ b/api_docs/kbn_ml_query_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils
title: "@kbn/ml-query-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-query-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 c36618590308a..af319ad3ecd57 100644
--- a/api_docs/kbn_ml_random_sampler_utils.mdx
+++ b/api_docs/kbn_ml_random_sampler_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils
title: "@kbn/ml-random-sampler-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-random-sampler-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 3cce1d841b23f..2f8b4df103d15 100644
--- a/api_docs/kbn_ml_route_utils.mdx
+++ b/api_docs/kbn_ml_route_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils
title: "@kbn/ml-route-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-route-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 580e0c944a1f1..ec19554807f8e 100644
--- a/api_docs/kbn_ml_runtime_field_utils.mdx
+++ b/api_docs/kbn_ml_runtime_field_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils
title: "@kbn/ml-runtime-field-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-runtime-field-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 19ea1bf7caeba..7d5e69a2d12e0 100644
--- a/api_docs/kbn_ml_string_hash.mdx
+++ b/api_docs/kbn_ml_string_hash.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash
title: "@kbn/ml-string-hash"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-string-hash plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash']
---
import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json';
diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx
index 021c32900062c..48348dda43c81 100644
--- a/api_docs/kbn_ml_trained_models_utils.mdx
+++ b/api_docs/kbn_ml_trained_models_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils
title: "@kbn/ml-trained-models-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-trained-models-utils plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils']
---
import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx
index 3d10e0ecd7667..33664ea73effe 100644
--- a/api_docs/kbn_ml_url_state.mdx
+++ b/api_docs/kbn_ml_url_state.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state
title: "@kbn/ml-url-state"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-url-state plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state']
---
import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json';
diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx
index 3a40e1a265a93..37ccbdb076450 100644
--- a/api_docs/kbn_monaco.mdx
+++ b/api_docs/kbn_monaco.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco
title: "@kbn/monaco"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/monaco plugin
-date: 2023-08-12
+date: 2023-08-13
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 e1234b566a9d8..cbf78376b2a0f 100644
--- a/api_docs/kbn_object_versioning.mdx
+++ b/api_docs/kbn_object_versioning.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning
title: "@kbn/object-versioning"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/object-versioning plugin
-date: 2023-08-12
+date: 2023-08-13
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 0cb3997ce4539..629cfc2bd2ea6 100644
--- a/api_docs/kbn_observability_alert_details.mdx
+++ b/api_docs/kbn_observability_alert_details.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details
title: "@kbn/observability-alert-details"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/observability-alert-details plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details']
---
import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json';
diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx
index 52e39d606420b..59337025648a7 100644
--- a/api_docs/kbn_optimizer.mdx
+++ b/api_docs/kbn_optimizer.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer
title: "@kbn/optimizer"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/optimizer plugin
-date: 2023-08-12
+date: 2023-08-13
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 8fb7704e601ce..553065b328cd0 100644
--- a/api_docs/kbn_optimizer_webpack_helpers.mdx
+++ b/api_docs/kbn_optimizer_webpack_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers
title: "@kbn/optimizer-webpack-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/optimizer-webpack-helpers plugin
-date: 2023-08-12
+date: 2023-08-13
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 fd1e29f5fc412..bd41be3d7ddbd 100644
--- a/api_docs/kbn_osquery_io_ts_types.mdx
+++ b/api_docs/kbn_osquery_io_ts_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types
title: "@kbn/osquery-io-ts-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/osquery-io-ts-types plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types']
---
import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json';
diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx
index 0624cc1f38a3a..5b0f58afaf277 100644
--- a/api_docs/kbn_performance_testing_dataset_extractor.mdx
+++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor
title: "@kbn/performance-testing-dataset-extractor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/performance-testing-dataset-extractor plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor']
---
import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json';
diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx
index 1ba311ff22362..c1184986a7813 100644
--- a/api_docs/kbn_plugin_generator.mdx
+++ b/api_docs/kbn_plugin_generator.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator
title: "@kbn/plugin-generator"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/plugin-generator plugin
-date: 2023-08-12
+date: 2023-08-13
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 4e432fee673b8..6ed675a59df9f 100644
--- a/api_docs/kbn_plugin_helpers.mdx
+++ b/api_docs/kbn_plugin_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers
title: "@kbn/plugin-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/plugin-helpers plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers']
---
import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json';
diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx
index d788cc6f96f2d..3f5308c141bf7 100644
--- a/api_docs/kbn_random_sampling.mdx
+++ b/api_docs/kbn_random_sampling.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling
title: "@kbn/random-sampling"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/random-sampling plugin
-date: 2023-08-12
+date: 2023-08-13
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 0ee58600ebacf..d02c68beeb375 100644
--- a/api_docs/kbn_react_field.mdx
+++ b/api_docs/kbn_react_field.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field
title: "@kbn/react-field"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-field plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field']
---
import kbnReactFieldObj from './kbn_react_field.devdocs.json';
diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx
index 5dcebd2660a0f..ba7c9b34c6723 100644
--- a/api_docs/kbn_react_kibana_context_common.mdx
+++ b/api_docs/kbn_react_kibana_context_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common
title: "@kbn/react-kibana-context-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-context-common plugin
-date: 2023-08-12
+date: 2023-08-13
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 839b9b793070b..0983dc0cd59b7 100644
--- a/api_docs/kbn_react_kibana_context_render.mdx
+++ b/api_docs/kbn_react_kibana_context_render.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render
title: "@kbn/react-kibana-context-render"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-context-render plugin
-date: 2023-08-12
+date: 2023-08-13
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 c0aa64c497db9..9f38b3d87e0ce 100644
--- a/api_docs/kbn_react_kibana_context_root.mdx
+++ b/api_docs/kbn_react_kibana_context_root.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root
title: "@kbn/react-kibana-context-root"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-context-root plugin
-date: 2023-08-12
+date: 2023-08-13
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 bc940a17cf64d..7327fb026b1f8 100644
--- a/api_docs/kbn_react_kibana_context_styled.mdx
+++ b/api_docs/kbn_react_kibana_context_styled.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled
title: "@kbn/react-kibana-context-styled"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-context-styled plugin
-date: 2023-08-12
+date: 2023-08-13
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 244b7833d7a60..b4ab7bd926be9 100644
--- a/api_docs/kbn_react_kibana_context_theme.mdx
+++ b/api_docs/kbn_react_kibana_context_theme.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme
title: "@kbn/react-kibana-context-theme"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-context-theme plugin
-date: 2023-08-12
+date: 2023-08-13
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 5d1d23ff52ef0..d9ccfff292758 100644
--- a/api_docs/kbn_react_kibana_mount.mdx
+++ b/api_docs/kbn_react_kibana_mount.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount
title: "@kbn/react-kibana-mount"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-mount plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount']
---
import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json';
diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx
index 6d46fa3caf65e..a1b73dd6f6721 100644
--- a/api_docs/kbn_repo_file_maps.mdx
+++ b/api_docs/kbn_repo_file_maps.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps
title: "@kbn/repo-file-maps"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-file-maps plugin
-date: 2023-08-12
+date: 2023-08-13
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 e94c41fd5189c..58e914f2ddd0f 100644
--- a/api_docs/kbn_repo_linter.mdx
+++ b/api_docs/kbn_repo_linter.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter
title: "@kbn/repo-linter"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-linter plugin
-date: 2023-08-12
+date: 2023-08-13
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 b9b73d110e240..bb6dfbf3e9c8b 100644
--- a/api_docs/kbn_repo_path.mdx
+++ b/api_docs/kbn_repo_path.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path
title: "@kbn/repo-path"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-path plugin
-date: 2023-08-12
+date: 2023-08-13
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 5c611caf228d3..b2dae5d6ede44 100644
--- a/api_docs/kbn_repo_source_classifier.mdx
+++ b/api_docs/kbn_repo_source_classifier.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier
title: "@kbn/repo-source-classifier"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-source-classifier plugin
-date: 2023-08-12
+date: 2023-08-13
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 2fc77a1d099d1..ecf042762d3f9 100644
--- a/api_docs/kbn_reporting_common.mdx
+++ b/api_docs/kbn_reporting_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common
title: "@kbn/reporting-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/reporting-common plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common']
---
import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json';
diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx
index 535bc14ec140e..f14a36ef0c579 100644
--- a/api_docs/kbn_rison.mdx
+++ b/api_docs/kbn_rison.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison
title: "@kbn/rison"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/rison plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison']
---
import kbnRisonObj from './kbn_rison.devdocs.json';
diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx
index 685f36e697c9d..060c31cb75521 100644
--- a/api_docs/kbn_rrule.mdx
+++ b/api_docs/kbn_rrule.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule
title: "@kbn/rrule"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/rrule plugin
-date: 2023-08-12
+date: 2023-08-13
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 ff5a9f70d77b7..46354e5f526e5 100644
--- a/api_docs/kbn_rule_data_utils.mdx
+++ b/api_docs/kbn_rule_data_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils
title: "@kbn/rule-data-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/rule-data-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 c20277af20093..7d9e3b3c88e0c 100644
--- a/api_docs/kbn_saved_objects_settings.mdx
+++ b/api_docs/kbn_saved_objects_settings.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings
title: "@kbn/saved-objects-settings"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/saved-objects-settings plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings']
---
import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json';
diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx
index 5a80374d2c731..d8cd0d9c4db50 100644
--- a/api_docs/kbn_search_api_panels.mdx
+++ b/api_docs/kbn_search_api_panels.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels
title: "@kbn/search-api-panels"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/search-api-panels plugin
-date: 2023-08-12
+date: 2023-08-13
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_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx
index 3e87b3f8c6050..1fb92ffcda199 100644
--- a/api_docs/kbn_search_response_warnings.mdx
+++ b/api_docs/kbn_search_response_warnings.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings
title: "@kbn/search-response-warnings"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/search-response-warnings plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings']
---
import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json';
diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx
index f26cfb956a788..2c73df27f7e4c 100644
--- a/api_docs/kbn_security_solution_navigation.mdx
+++ b/api_docs/kbn_security_solution_navigation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation
title: "@kbn/security-solution-navigation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/security-solution-navigation plugin
-date: 2023-08-12
+date: 2023-08-13
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 0e1e2e985f6da..c52e7c9fc421c 100644
--- a/api_docs/kbn_security_solution_side_nav.mdx
+++ b/api_docs/kbn_security_solution_side_nav.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav
title: "@kbn/security-solution-side-nav"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/security-solution-side-nav plugin
-date: 2023-08-12
+date: 2023-08-13
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 732102e12c3ca..68ce6854a699e 100644
--- a/api_docs/kbn_security_solution_storybook_config.mdx
+++ b/api_docs/kbn_security_solution_storybook_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config
title: "@kbn/security-solution-storybook-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/security-solution-storybook-config plugin
-date: 2023-08-12
+date: 2023-08-13
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 72e9dd7eea385..76d240d16239d 100644
--- a/api_docs/kbn_securitysolution_autocomplete.mdx
+++ b/api_docs/kbn_securitysolution_autocomplete.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete
title: "@kbn/securitysolution-autocomplete"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-autocomplete plugin
-date: 2023-08-12
+date: 2023-08-13
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 5f53c5d68af4d..c37057816ed75 100644
--- a/api_docs/kbn_securitysolution_data_table.mdx
+++ b/api_docs/kbn_securitysolution_data_table.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table
title: "@kbn/securitysolution-data-table"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-data-table plugin
-date: 2023-08-12
+date: 2023-08-13
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 75d8f2ed61706..b0d15a649ec45 100644
--- a/api_docs/kbn_securitysolution_ecs.mdx
+++ b/api_docs/kbn_securitysolution_ecs.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs
title: "@kbn/securitysolution-ecs"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-ecs plugin
-date: 2023-08-12
+date: 2023-08-13
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 bee1e5ea71008..26c76a2b75be7 100644
--- a/api_docs/kbn_securitysolution_es_utils.mdx
+++ b/api_docs/kbn_securitysolution_es_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils
title: "@kbn/securitysolution-es-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-es-utils plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils']
---
import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx
index 505068d8f0ea0..f584de968e6ac 100644
--- a/api_docs/kbn_securitysolution_exception_list_components.mdx
+++ b/api_docs/kbn_securitysolution_exception_list_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components
title: "@kbn/securitysolution-exception-list-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-exception-list-components plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components']
---
import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx
index b99993e1733a1..8e75d9709ed31 100644
--- a/api_docs/kbn_securitysolution_grouping.mdx
+++ b/api_docs/kbn_securitysolution_grouping.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping
title: "@kbn/securitysolution-grouping"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-grouping plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping']
---
import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx
index d7b18fa65d0e7..7c224cd268ab8 100644
--- a/api_docs/kbn_securitysolution_hook_utils.mdx
+++ b/api_docs/kbn_securitysolution_hook_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils
title: "@kbn/securitysolution-hook-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-hook-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 ecff7330420c0..72433f76e687b 100644
--- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types
title: "@kbn/securitysolution-io-ts-alerting-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin
-date: 2023-08-12
+date: 2023-08-13
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 634387f421f82..ef8b1cbbfc5e6 100644
--- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types
title: "@kbn/securitysolution-io-ts-list-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-list-types plugin
-date: 2023-08-12
+date: 2023-08-13
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 10b1efea3a74a..4f535184ddb08 100644
--- a/api_docs/kbn_securitysolution_io_ts_types.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types
title: "@kbn/securitysolution-io-ts-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-types plugin
-date: 2023-08-12
+date: 2023-08-13
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 d233160a0805b..4648d7b7c8d7c 100644
--- a/api_docs/kbn_securitysolution_io_ts_utils.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils
title: "@kbn/securitysolution-io-ts-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 bb1e234f57577..22239d123bc47 100644
--- a/api_docs/kbn_securitysolution_list_api.mdx
+++ b/api_docs/kbn_securitysolution_list_api.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api
title: "@kbn/securitysolution-list-api"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-api plugin
-date: 2023-08-12
+date: 2023-08-13
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 0bcfd6c36d981..77261f718d88b 100644
--- a/api_docs/kbn_securitysolution_list_constants.mdx
+++ b/api_docs/kbn_securitysolution_list_constants.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants
title: "@kbn/securitysolution-list-constants"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-constants plugin
-date: 2023-08-12
+date: 2023-08-13
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 83f801a1d48ee..341870d9a9bcf 100644
--- a/api_docs/kbn_securitysolution_list_hooks.mdx
+++ b/api_docs/kbn_securitysolution_list_hooks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks
title: "@kbn/securitysolution-list-hooks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-hooks plugin
-date: 2023-08-12
+date: 2023-08-13
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 c82afd82c1f04..f310d9c939015 100644
--- a/api_docs/kbn_securitysolution_list_utils.mdx
+++ b/api_docs/kbn_securitysolution_list_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils
title: "@kbn/securitysolution-list-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 0885bd24e42cd..da9a5f4900345 100644
--- a/api_docs/kbn_securitysolution_rules.mdx
+++ b/api_docs/kbn_securitysolution_rules.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules
title: "@kbn/securitysolution-rules"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-rules plugin
-date: 2023-08-12
+date: 2023-08-13
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 524f9babfb2c3..57c2bf5844162 100644
--- a/api_docs/kbn_securitysolution_t_grid.mdx
+++ b/api_docs/kbn_securitysolution_t_grid.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid
title: "@kbn/securitysolution-t-grid"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-t-grid plugin
-date: 2023-08-12
+date: 2023-08-13
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 6973238c08cff..af42672353f75 100644
--- a/api_docs/kbn_securitysolution_utils.mdx
+++ b/api_docs/kbn_securitysolution_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils
title: "@kbn/securitysolution-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 d52f48a25a3c1..fcbe6cecbc497 100644
--- a/api_docs/kbn_server_http_tools.mdx
+++ b/api_docs/kbn_server_http_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools
title: "@kbn/server-http-tools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/server-http-tools plugin
-date: 2023-08-12
+date: 2023-08-13
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 8f22bc013e03b..d5700162d0e80 100644
--- a/api_docs/kbn_server_route_repository.mdx
+++ b/api_docs/kbn_server_route_repository.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository
title: "@kbn/server-route-repository"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/server-route-repository plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository']
---
import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json';
diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx
index 7dae9d8f8e24e..c03a9bbb211ad 100644
--- a/api_docs/kbn_serverless_project_switcher.mdx
+++ b/api_docs/kbn_serverless_project_switcher.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher
title: "@kbn/serverless-project-switcher"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/serverless-project-switcher plugin
-date: 2023-08-12
+date: 2023-08-13
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_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx
index d43313bea10f0..51295a57ee335 100644
--- a/api_docs/kbn_serverless_storybook_config.mdx
+++ b/api_docs/kbn_serverless_storybook_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config
title: "@kbn/serverless-storybook-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/serverless-storybook-config plugin
-date: 2023-08-12
+date: 2023-08-13
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 d3418391ac576..654a2b42b2738 100644
--- a/api_docs/kbn_shared_svg.mdx
+++ b/api_docs/kbn_shared_svg.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg
title: "@kbn/shared-svg"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-svg plugin
-date: 2023-08-12
+date: 2023-08-13
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 4ed09053a2834..f32229f937b42 100644
--- a/api_docs/kbn_shared_ux_avatar_solution.mdx
+++ b/api_docs/kbn_shared_ux_avatar_solution.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution
title: "@kbn/shared-ux-avatar-solution"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-avatar-solution plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution']
---
import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx
index b31a275f9b7c5..ff782d771e305 100644
--- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx
+++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components
title: "@kbn/shared-ux-avatar-user-profile-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components']
---
import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx
index f06f1cf8aea8a..0eed7f5d7c94a 100644
--- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx
+++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen
title: "@kbn/shared-ux-button-exit-full-screen"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen']
---
import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx
index 916c3348d3afd..01e6522d0dd8e 100644
--- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx
+++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks
title: "@kbn/shared-ux-button-exit-full-screen-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks']
---
import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx
index 0b4788125472c..277ae400e914b 100644
--- a/api_docs/kbn_shared_ux_button_toolbar.mdx
+++ b/api_docs/kbn_shared_ux_button_toolbar.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar
title: "@kbn/shared-ux-button-toolbar"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-button-toolbar plugin
-date: 2023-08-12
+date: 2023-08-13
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 c481463a1ba57..e6b2acf1a60c6 100644
--- a/api_docs/kbn_shared_ux_card_no_data.mdx
+++ b/api_docs/kbn_shared_ux_card_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data
title: "@kbn/shared-ux-card-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-card-no-data plugin
-date: 2023-08-12
+date: 2023-08-13
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 b4418ddd30184..7823faa0f0078 100644
--- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks
title: "@kbn/shared-ux-card-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 8c4ac33b8097f..45dcbd0bd1bc7 100644
--- a/api_docs/kbn_shared_ux_chrome_navigation.mdx
+++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation
title: "@kbn/shared-ux-chrome-navigation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-chrome-navigation plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation']
---
import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx
index 7be2ee9fd2ac4..64da0b6cba7ac 100644
--- a/api_docs/kbn_shared_ux_file_context.mdx
+++ b/api_docs/kbn_shared_ux_file_context.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context
title: "@kbn/shared-ux-file-context"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-context plugin
-date: 2023-08-12
+date: 2023-08-13
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 d08f0b4a25a0a..5a569c185e37b 100644
--- a/api_docs/kbn_shared_ux_file_image.mdx
+++ b/api_docs/kbn_shared_ux_file_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image
title: "@kbn/shared-ux-file-image"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-image plugin
-date: 2023-08-12
+date: 2023-08-13
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 e21163967b9c4..b0fabb7db6b2e 100644
--- a/api_docs/kbn_shared_ux_file_image_mocks.mdx
+++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks
title: "@kbn/shared-ux-file-image-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-image-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 6014c2a7a3f57..75aee629af4bb 100644
--- a/api_docs/kbn_shared_ux_file_mocks.mdx
+++ b/api_docs/kbn_shared_ux_file_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks
title: "@kbn/shared-ux-file-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 cc38dfdd15660..67d047ca4244d 100644
--- a/api_docs/kbn_shared_ux_file_picker.mdx
+++ b/api_docs/kbn_shared_ux_file_picker.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker
title: "@kbn/shared-ux-file-picker"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-picker plugin
-date: 2023-08-12
+date: 2023-08-13
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 90aee2b629d87..606962357d214 100644
--- a/api_docs/kbn_shared_ux_file_types.mdx
+++ b/api_docs/kbn_shared_ux_file_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types
title: "@kbn/shared-ux-file-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-types plugin
-date: 2023-08-12
+date: 2023-08-13
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 19b6d30e92f40..db7691f499258 100644
--- a/api_docs/kbn_shared_ux_file_upload.mdx
+++ b/api_docs/kbn_shared_ux_file_upload.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload
title: "@kbn/shared-ux-file-upload"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-upload plugin
-date: 2023-08-12
+date: 2023-08-13
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 855065b3c546c..9d0cd7b253ed2 100644
--- a/api_docs/kbn_shared_ux_file_util.mdx
+++ b/api_docs/kbn_shared_ux_file_util.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util
title: "@kbn/shared-ux-file-util"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-util plugin
-date: 2023-08-12
+date: 2023-08-13
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 051325f027687..d138bf8ec7fde 100644
--- a/api_docs/kbn_shared_ux_link_redirect_app.mdx
+++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app
title: "@kbn/shared-ux-link-redirect-app"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-link-redirect-app plugin
-date: 2023-08-12
+date: 2023-08-13
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 68a5fd50b22e6..4bb2af6515d9d 100644
--- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx
+++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks
title: "@kbn/shared-ux-link-redirect-app-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 57584d8c45566..222869904c431 100644
--- a/api_docs/kbn_shared_ux_markdown.mdx
+++ b/api_docs/kbn_shared_ux_markdown.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown
title: "@kbn/shared-ux-markdown"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-markdown plugin
-date: 2023-08-12
+date: 2023-08-13
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 1d59c1e39b230..c945977f4526b 100644
--- a/api_docs/kbn_shared_ux_markdown_mocks.mdx
+++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks
title: "@kbn/shared-ux-markdown-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-markdown-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 4262068d5b73a..dac9c554d613d 100644
--- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx
+++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data
title: "@kbn/shared-ux-page-analytics-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin
-date: 2023-08-12
+date: 2023-08-13
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 043ef33f5a2ec..13b364fab2c1d 100644
--- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks
title: "@kbn/shared-ux-page-analytics-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 29c9ebd74c535..6119fec66d598 100644
--- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data
title: "@kbn/shared-ux-page-kibana-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin
-date: 2023-08-12
+date: 2023-08-13
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 edd3f6fdd3d44..d5ffdbf9b4718 100644
--- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks
title: "@kbn/shared-ux-page-kibana-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 e5e51fbee1950..aa776fb625be1 100644
--- a/api_docs/kbn_shared_ux_page_kibana_template.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template
title: "@kbn/shared-ux-page-kibana-template"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-template plugin
-date: 2023-08-12
+date: 2023-08-13
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 6762621912c61..7d182e2155b07 100644
--- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks
title: "@kbn/shared-ux-page-kibana-template-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 0b5e962bada2a..a803bef6d18ab 100644
--- a/api_docs/kbn_shared_ux_page_no_data.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data
title: "@kbn/shared-ux-page-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data plugin
-date: 2023-08-12
+date: 2023-08-13
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 6463b8fa6ce51..227a1008db502 100644
--- a/api_docs/kbn_shared_ux_page_no_data_config.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config
title: "@kbn/shared-ux-page-no-data-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data-config plugin
-date: 2023-08-12
+date: 2023-08-13
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 20f1c8ce298bb..82f7ed3c289c6 100644
--- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks
title: "@kbn/shared-ux-page-no-data-config-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 6fcb266233c22..2b4c21df9bd53 100644
--- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks
title: "@kbn/shared-ux-page-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 1911d4f89855e..b23522802264e 100644
--- a/api_docs/kbn_shared_ux_page_solution_nav.mdx
+++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav
title: "@kbn/shared-ux-page-solution-nav"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-solution-nav plugin
-date: 2023-08-12
+date: 2023-08-13
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 ff0c0ae5488b2..6716096285820 100644
--- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx
+++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views
title: "@kbn/shared-ux-prompt-no-data-views"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin
-date: 2023-08-12
+date: 2023-08-13
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 a1ed4c6e62bdb..2da2c07de67e7 100644
--- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx
+++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks
title: "@kbn/shared-ux-prompt-no-data-views-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 1b66a7762f1e1..70f92d0ca8e2a 100644
--- a/api_docs/kbn_shared_ux_prompt_not_found.mdx
+++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found
title: "@kbn/shared-ux-prompt-not-found"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-prompt-not-found plugin
-date: 2023-08-12
+date: 2023-08-13
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 90c0bd813ee90..96b5e0c89ddd4 100644
--- a/api_docs/kbn_shared_ux_router.mdx
+++ b/api_docs/kbn_shared_ux_router.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router
title: "@kbn/shared-ux-router"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-router plugin
-date: 2023-08-12
+date: 2023-08-13
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 9b3864d0b1974..0f3942a18e1ac 100644
--- a/api_docs/kbn_shared_ux_router_mocks.mdx
+++ b/api_docs/kbn_shared_ux_router_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks
title: "@kbn/shared-ux-router-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-router-mocks plugin
-date: 2023-08-12
+date: 2023-08-13
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 0521e491833c3..a8554b0822cd3 100644
--- a/api_docs/kbn_shared_ux_storybook_config.mdx
+++ b/api_docs/kbn_shared_ux_storybook_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config
title: "@kbn/shared-ux-storybook-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-storybook-config plugin
-date: 2023-08-12
+date: 2023-08-13
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 3a5deaa6d6302..7f5b38d73c2da 100644
--- a/api_docs/kbn_shared_ux_storybook_mock.mdx
+++ b/api_docs/kbn_shared_ux_storybook_mock.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock
title: "@kbn/shared-ux-storybook-mock"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-storybook-mock plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock']
---
import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx
index 8ae99f3350337..e40f2262b2fa5 100644
--- a/api_docs/kbn_shared_ux_utility.mdx
+++ b/api_docs/kbn_shared_ux_utility.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility
title: "@kbn/shared-ux-utility"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-utility plugin
-date: 2023-08-12
+date: 2023-08-13
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 5227688a1b219..912970743290a 100644
--- a/api_docs/kbn_slo_schema.mdx
+++ b/api_docs/kbn_slo_schema.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema
title: "@kbn/slo-schema"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/slo-schema plugin
-date: 2023-08-12
+date: 2023-08-13
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 542e2bfc42646..1ebd0552bbd45 100644
--- a/api_docs/kbn_some_dev_log.mdx
+++ b/api_docs/kbn_some_dev_log.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log
title: "@kbn/some-dev-log"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/some-dev-log plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log']
---
import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json';
diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx
index b83de87b09723..f41c956658d9a 100644
--- a/api_docs/kbn_std.mdx
+++ b/api_docs/kbn_std.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std
title: "@kbn/std"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/std plugin
-date: 2023-08-12
+date: 2023-08-13
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 78ebbecd6c50b..5f847c6f6ab06 100644
--- a/api_docs/kbn_stdio_dev_helpers.mdx
+++ b/api_docs/kbn_stdio_dev_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers
title: "@kbn/stdio-dev-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/stdio-dev-helpers plugin
-date: 2023-08-12
+date: 2023-08-13
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 b46c0e4857dc2..b4cfb934b98cc 100644
--- a/api_docs/kbn_storybook.mdx
+++ b/api_docs/kbn_storybook.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook
title: "@kbn/storybook"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/storybook plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook']
---
import kbnStorybookObj from './kbn_storybook.devdocs.json';
diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx
index 90def865fc161..cb8850c5ac1fb 100644
--- a/api_docs/kbn_telemetry_tools.mdx
+++ b/api_docs/kbn_telemetry_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools
title: "@kbn/telemetry-tools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/telemetry-tools plugin
-date: 2023-08-12
+date: 2023-08-13
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 028abd82260c6..e9b384ab38cd8 100644
--- a/api_docs/kbn_test.mdx
+++ b/api_docs/kbn_test.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test
title: "@kbn/test"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/test plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test']
---
import kbnTestObj from './kbn_test.devdocs.json';
diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx
index bf0fc9365e74c..6b468d8b239a3 100644
--- a/api_docs/kbn_test_jest_helpers.mdx
+++ b/api_docs/kbn_test_jest_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers
title: "@kbn/test-jest-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/test-jest-helpers plugin
-date: 2023-08-12
+date: 2023-08-13
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 3ab3d78f20971..e5bb8621d4cf4 100644
--- a/api_docs/kbn_test_subj_selector.mdx
+++ b/api_docs/kbn_test_subj_selector.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector
title: "@kbn/test-subj-selector"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/test-subj-selector plugin
-date: 2023-08-12
+date: 2023-08-13
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 81b7a63e83157..2470c81c2124a 100644
--- a/api_docs/kbn_text_based_editor.mdx
+++ b/api_docs/kbn_text_based_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor
title: "@kbn/text-based-editor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/text-based-editor plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor']
---
import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json';
diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx
index 80f234ca1c8f2..01efb97084a49 100644
--- a/api_docs/kbn_tooling_log.mdx
+++ b/api_docs/kbn_tooling_log.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log
title: "@kbn/tooling-log"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/tooling-log plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log']
---
import kbnToolingLogObj from './kbn_tooling_log.devdocs.json';
diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx
index d57898e4aa344..715a01ff90de0 100644
--- a/api_docs/kbn_ts_projects.mdx
+++ b/api_docs/kbn_ts_projects.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects
title: "@kbn/ts-projects"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ts-projects plugin
-date: 2023-08-12
+date: 2023-08-13
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 28245d750fd83..8e48ce2630320 100644
--- a/api_docs/kbn_typed_react_router_config.mdx
+++ b/api_docs/kbn_typed_react_router_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config
title: "@kbn/typed-react-router-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/typed-react-router-config plugin
-date: 2023-08-12
+date: 2023-08-13
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 fde85b93a9a94..4f25d7f913486 100644
--- a/api_docs/kbn_ui_actions_browser.mdx
+++ b/api_docs/kbn_ui_actions_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser
title: "@kbn/ui-actions-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ui-actions-browser plugin
-date: 2023-08-12
+date: 2023-08-13
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 9d563bfa419df..f1654b30b9dd0 100644
--- a/api_docs/kbn_ui_shared_deps_src.mdx
+++ b/api_docs/kbn_ui_shared_deps_src.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src
title: "@kbn/ui-shared-deps-src"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ui-shared-deps-src plugin
-date: 2023-08-12
+date: 2023-08-13
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 d4b173ade27b9..812b6e5c2a40c 100644
--- a/api_docs/kbn_ui_theme.mdx
+++ b/api_docs/kbn_ui_theme.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme
title: "@kbn/ui-theme"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ui-theme plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme']
---
import kbnUiThemeObj from './kbn_ui_theme.devdocs.json';
diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx
index 68c4ef006ab9e..43b64c4ef368e 100644
--- a/api_docs/kbn_unified_field_list.mdx
+++ b/api_docs/kbn_unified_field_list.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list
title: "@kbn/unified-field-list"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/unified-field-list plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list']
---
import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json';
diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx
index 4c8fc6d92e09a..757287f0ae265 100644
--- a/api_docs/kbn_url_state.mdx
+++ b/api_docs/kbn_url_state.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-url-state
title: "@kbn/url-state"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/url-state plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/url-state']
---
import kbnUrlStateObj from './kbn_url_state.devdocs.json';
diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx
index 587249dc4c3c1..1fd06033dfb05 100644
--- a/api_docs/kbn_use_tracked_promise.mdx
+++ b/api_docs/kbn_use_tracked_promise.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise
title: "@kbn/use-tracked-promise"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/use-tracked-promise plugin
-date: 2023-08-12
+date: 2023-08-13
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 79eb8d26dc5c0..af8f1cd087fcf 100644
--- a/api_docs/kbn_user_profile_components.mdx
+++ b/api_docs/kbn_user_profile_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components
title: "@kbn/user-profile-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/user-profile-components plugin
-date: 2023-08-12
+date: 2023-08-13
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 5ee0f493e1d9c..2582de4d0946b 100644
--- a/api_docs/kbn_utility_types.mdx
+++ b/api_docs/kbn_utility_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types
title: "@kbn/utility-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/utility-types plugin
-date: 2023-08-12
+date: 2023-08-13
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 2e3d903f1254a..4935cd1a7d2c6 100644
--- a/api_docs/kbn_utility_types_jest.mdx
+++ b/api_docs/kbn_utility_types_jest.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest
title: "@kbn/utility-types-jest"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/utility-types-jest plugin
-date: 2023-08-12
+date: 2023-08-13
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 02945911ac7fb..b2887c06ac830 100644
--- a/api_docs/kbn_utils.mdx
+++ b/api_docs/kbn_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils
title: "@kbn/utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/utils plugin
-date: 2023-08-12
+date: 2023-08-13
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 58d4e95e6750b..a8c939a4f18d2 100644
--- a/api_docs/kbn_visualization_ui_components.mdx
+++ b/api_docs/kbn_visualization_ui_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components
title: "@kbn/visualization-ui-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/visualization-ui-components plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components']
---
import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json';
diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx
index 28031effa0e0f..bc8814a14f1ad 100644
--- a/api_docs/kbn_yarn_lock_validator.mdx
+++ b/api_docs/kbn_yarn_lock_validator.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator
title: "@kbn/yarn-lock-validator"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/yarn-lock-validator plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator']
---
import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json';
diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx
index 4abbb1aa1f065..e7f00ec93fe19 100644
--- a/api_docs/kibana_overview.mdx
+++ b/api_docs/kibana_overview.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview
title: "kibanaOverview"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kibanaOverview plugin
-date: 2023-08-12
+date: 2023-08-13
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 48cf58efc1528..9ba59e2577fa5 100644
--- a/api_docs/kibana_react.mdx
+++ b/api_docs/kibana_react.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact
title: "kibanaReact"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kibanaReact plugin
-date: 2023-08-12
+date: 2023-08-13
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 d149fc980b32b..25f19318b77c2 100644
--- a/api_docs/kibana_utils.mdx
+++ b/api_docs/kibana_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils
title: "kibanaUtils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kibanaUtils plugin
-date: 2023-08-12
+date: 2023-08-13
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 a5a65bf452426..ba6afe0facd96 100644
--- a/api_docs/kubernetes_security.mdx
+++ b/api_docs/kubernetes_security.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity
title: "kubernetesSecurity"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kubernetesSecurity plugin
-date: 2023-08-12
+date: 2023-08-13
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 ed7af268d748f..cb1291fa2946e 100644
--- a/api_docs/lens.mdx
+++ b/api_docs/lens.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens
title: "lens"
image: https://source.unsplash.com/400x175/?github
description: API docs for the lens plugin
-date: 2023-08-12
+date: 2023-08-13
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 319f0c9ee4d81..e8a40676a4304 100644
--- a/api_docs/license_api_guard.mdx
+++ b/api_docs/license_api_guard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard
title: "licenseApiGuard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the licenseApiGuard plugin
-date: 2023-08-12
+date: 2023-08-13
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 6f1546b039e99..c9d7c0ed40b4c 100644
--- a/api_docs/license_management.mdx
+++ b/api_docs/license_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement
title: "licenseManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the licenseManagement plugin
-date: 2023-08-12
+date: 2023-08-13
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 0a42158074c29..effd3f4ee78e2 100644
--- a/api_docs/licensing.mdx
+++ b/api_docs/licensing.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing
title: "licensing"
image: https://source.unsplash.com/400x175/?github
description: API docs for the licensing plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing']
---
import licensingObj from './licensing.devdocs.json';
diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx
index 114b87eb14089..41593ab62ab68 100644
--- a/api_docs/lists.mdx
+++ b/api_docs/lists.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists
title: "lists"
image: https://source.unsplash.com/400x175/?github
description: API docs for the lists plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists']
---
import listsObj from './lists.devdocs.json';
diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx
index e8ca736ab4e65..bd06d8c7d73dd 100644
--- a/api_docs/logs_shared.mdx
+++ b/api_docs/logs_shared.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared
title: "logsShared"
image: https://source.unsplash.com/400x175/?github
description: API docs for the logsShared plugin
-date: 2023-08-12
+date: 2023-08-13
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 875b81df9ba76..3acbfa98ad041 100644
--- a/api_docs/management.mdx
+++ b/api_docs/management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management
title: "management"
image: https://source.unsplash.com/400x175/?github
description: API docs for the management plugin
-date: 2023-08-12
+date: 2023-08-13
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 64a97f2b21158..55becdd64b049 100644
--- a/api_docs/maps.mdx
+++ b/api_docs/maps.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps
title: "maps"
image: https://source.unsplash.com/400x175/?github
description: API docs for the maps plugin
-date: 2023-08-12
+date: 2023-08-13
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 d38b693d82fda..1b241b092b068 100644
--- a/api_docs/maps_ems.mdx
+++ b/api_docs/maps_ems.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms
title: "mapsEms"
image: https://source.unsplash.com/400x175/?github
description: API docs for the mapsEms plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms']
---
import mapsEmsObj from './maps_ems.devdocs.json';
diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx
index 68353d63b98f9..fc724a34471e8 100644
--- a/api_docs/ml.mdx
+++ b/api_docs/ml.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml
title: "ml"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ml plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml']
---
import mlObj from './ml.devdocs.json';
diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx
index 4e7fc7b6b3d78..3150082fbec3d 100644
--- a/api_docs/monitoring.mdx
+++ b/api_docs/monitoring.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring
title: "monitoring"
image: https://source.unsplash.com/400x175/?github
description: API docs for the monitoring plugin
-date: 2023-08-12
+date: 2023-08-13
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 b313dd4272c2e..85a9ebebe1422 100644
--- a/api_docs/monitoring_collection.mdx
+++ b/api_docs/monitoring_collection.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection
title: "monitoringCollection"
image: https://source.unsplash.com/400x175/?github
description: API docs for the monitoringCollection plugin
-date: 2023-08-12
+date: 2023-08-13
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 6b2fb1f932e7a..412af1979e4f3 100644
--- a/api_docs/navigation.mdx
+++ b/api_docs/navigation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation
title: "navigation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the navigation plugin
-date: 2023-08-12
+date: 2023-08-13
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 6a814080026c1..3855ed00b7a4a 100644
--- a/api_docs/newsfeed.mdx
+++ b/api_docs/newsfeed.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed
title: "newsfeed"
image: https://source.unsplash.com/400x175/?github
description: API docs for the newsfeed plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed']
---
import newsfeedObj from './newsfeed.devdocs.json';
diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx
index e7f46df933026..9577cb5b0bf87 100644
--- a/api_docs/notifications.mdx
+++ b/api_docs/notifications.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications
title: "notifications"
image: https://source.unsplash.com/400x175/?github
description: API docs for the notifications plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications']
---
import notificationsObj from './notifications.devdocs.json';
diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx
index b98a4c87c1f75..0f1eb39607477 100644
--- a/api_docs/observability.mdx
+++ b/api_docs/observability.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability
title: "observability"
image: https://source.unsplash.com/400x175/?github
description: API docs for the observability plugin
-date: 2023-08-12
+date: 2023-08-13
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 cce6161dff982..67d7606e739f0 100644
--- a/api_docs/observability_a_i_assistant.mdx
+++ b/api_docs/observability_a_i_assistant.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant
title: "observabilityAIAssistant"
image: https://source.unsplash.com/400x175/?github
description: API docs for the observabilityAIAssistant plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant']
---
import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json';
diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx
index 4286b7108c9bb..a48ba1df9f251 100644
--- a/api_docs/observability_onboarding.mdx
+++ b/api_docs/observability_onboarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding
title: "observabilityOnboarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the observabilityOnboarding plugin
-date: 2023-08-12
+date: 2023-08-13
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 381f6d110b7b6..6077f68996f70 100644
--- a/api_docs/observability_shared.mdx
+++ b/api_docs/observability_shared.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared
title: "observabilityShared"
image: https://source.unsplash.com/400x175/?github
description: API docs for the observabilityShared plugin
-date: 2023-08-12
+date: 2023-08-13
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 7d8d56d68474a..179380f974326 100644
--- a/api_docs/osquery.mdx
+++ b/api_docs/osquery.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery
title: "osquery"
image: https://source.unsplash.com/400x175/?github
description: API docs for the osquery plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery']
---
import osqueryObj from './osquery.devdocs.json';
diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx
index e03859252f5de..18d6bfc5c906d 100644
--- a/api_docs/plugin_directory.mdx
+++ b/api_docs/plugin_directory.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory
slug: /kibana-dev-docs/api-meta/plugin-api-directory
title: Directory
description: Directory of public APIs available through plugins or packages.
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx
index 56e2d05ddfbcb..44dfd5a138f47 100644
--- a/api_docs/presentation_util.mdx
+++ b/api_docs/presentation_util.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil
title: "presentationUtil"
image: https://source.unsplash.com/400x175/?github
description: API docs for the presentationUtil plugin
-date: 2023-08-12
+date: 2023-08-13
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 6aa37196c1e50..6824724dae8c2 100644
--- a/api_docs/profiling.mdx
+++ b/api_docs/profiling.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling
title: "profiling"
image: https://source.unsplash.com/400x175/?github
description: API docs for the profiling plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling']
---
import profilingObj from './profiling.devdocs.json';
diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx
index 70477c95e2605..f4d3b3f4d76f8 100644
--- a/api_docs/remote_clusters.mdx
+++ b/api_docs/remote_clusters.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters
title: "remoteClusters"
image: https://source.unsplash.com/400x175/?github
description: API docs for the remoteClusters plugin
-date: 2023-08-12
+date: 2023-08-13
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 a36fe1b1ff6e7..90417c8861d7f 100644
--- a/api_docs/reporting.mdx
+++ b/api_docs/reporting.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting
title: "reporting"
image: https://source.unsplash.com/400x175/?github
description: API docs for the reporting plugin
-date: 2023-08-12
+date: 2023-08-13
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 d1a18117b3ddb..cde875538dca5 100644
--- a/api_docs/rollup.mdx
+++ b/api_docs/rollup.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup
title: "rollup"
image: https://source.unsplash.com/400x175/?github
description: API docs for the rollup plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup']
---
import rollupObj from './rollup.devdocs.json';
diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx
index a34a7054fffee..b9e1f60220177 100644
--- a/api_docs/rule_registry.mdx
+++ b/api_docs/rule_registry.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry
title: "ruleRegistry"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ruleRegistry plugin
-date: 2023-08-12
+date: 2023-08-13
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 561a3cfcac513..fa9334db93611 100644
--- a/api_docs/runtime_fields.mdx
+++ b/api_docs/runtime_fields.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields
title: "runtimeFields"
image: https://source.unsplash.com/400x175/?github
description: API docs for the runtimeFields plugin
-date: 2023-08-12
+date: 2023-08-13
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 834e600d941e3..407636dc98da0 100644
--- a/api_docs/saved_objects.mdx
+++ b/api_docs/saved_objects.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects
title: "savedObjects"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjects plugin
-date: 2023-08-12
+date: 2023-08-13
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 5aac2032cf1b4..ba9d44e0b763d 100644
--- a/api_docs/saved_objects_finder.mdx
+++ b/api_docs/saved_objects_finder.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder
title: "savedObjectsFinder"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsFinder plugin
-date: 2023-08-12
+date: 2023-08-13
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 4d5e18bd7f2f0..2c001fafba8f4 100644
--- a/api_docs/saved_objects_management.mdx
+++ b/api_docs/saved_objects_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement
title: "savedObjectsManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsManagement plugin
-date: 2023-08-12
+date: 2023-08-13
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 b56f2119c4fdf..34973b65c37ef 100644
--- a/api_docs/saved_objects_tagging.mdx
+++ b/api_docs/saved_objects_tagging.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging
title: "savedObjectsTagging"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsTagging plugin
-date: 2023-08-12
+date: 2023-08-13
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 7ce540a3fb368..1ce6d29cf0b2a 100644
--- a/api_docs/saved_objects_tagging_oss.mdx
+++ b/api_docs/saved_objects_tagging_oss.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss
title: "savedObjectsTaggingOss"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsTaggingOss plugin
-date: 2023-08-12
+date: 2023-08-13
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 aa239b2d362d0..f7376d4a3b666 100644
--- a/api_docs/saved_search.mdx
+++ b/api_docs/saved_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch
title: "savedSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedSearch plugin
-date: 2023-08-12
+date: 2023-08-13
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 9a296d6c63361..ca1cf5a7dacf8 100644
--- a/api_docs/screenshot_mode.mdx
+++ b/api_docs/screenshot_mode.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode
title: "screenshotMode"
image: https://source.unsplash.com/400x175/?github
description: API docs for the screenshotMode plugin
-date: 2023-08-12
+date: 2023-08-13
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 460273a832ebd..afc9a38103249 100644
--- a/api_docs/screenshotting.mdx
+++ b/api_docs/screenshotting.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting
title: "screenshotting"
image: https://source.unsplash.com/400x175/?github
description: API docs for the screenshotting plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting']
---
import screenshottingObj from './screenshotting.devdocs.json';
diff --git a/api_docs/security.mdx b/api_docs/security.mdx
index bac9c542fdaf7..c85cca792c05f 100644
--- a/api_docs/security.mdx
+++ b/api_docs/security.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security
title: "security"
image: https://source.unsplash.com/400x175/?github
description: API docs for the security plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security']
---
import securityObj from './security.devdocs.json';
diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx
index 16dcff99cca2d..02c1e3712b4aa 100644
--- a/api_docs/security_solution.mdx
+++ b/api_docs/security_solution.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution
title: "securitySolution"
image: https://source.unsplash.com/400x175/?github
description: API docs for the securitySolution plugin
-date: 2023-08-12
+date: 2023-08-13
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 a398c92d10edc..39900b1347072 100644
--- a/api_docs/security_solution_ess.mdx
+++ b/api_docs/security_solution_ess.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss
title: "securitySolutionEss"
image: https://source.unsplash.com/400x175/?github
description: API docs for the securitySolutionEss plugin
-date: 2023-08-12
+date: 2023-08-13
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 9bacec2e90ca6..a1fb51f0a927c 100644
--- a/api_docs/security_solution_serverless.mdx
+++ b/api_docs/security_solution_serverless.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless
title: "securitySolutionServerless"
image: https://source.unsplash.com/400x175/?github
description: API docs for the securitySolutionServerless plugin
-date: 2023-08-12
+date: 2023-08-13
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 02dcf82a899f3..bedd3dc339205 100644
--- a/api_docs/serverless.mdx
+++ b/api_docs/serverless.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless
title: "serverless"
image: https://source.unsplash.com/400x175/?github
description: API docs for the serverless plugin
-date: 2023-08-12
+date: 2023-08-13
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 bd37d46f955a3..e41348c524d6d 100644
--- a/api_docs/serverless_observability.mdx
+++ b/api_docs/serverless_observability.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability
title: "serverlessObservability"
image: https://source.unsplash.com/400x175/?github
description: API docs for the serverlessObservability plugin
-date: 2023-08-12
+date: 2023-08-13
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 d2da6cd5b6d8d..e37090a8ac9cc 100644
--- a/api_docs/serverless_search.mdx
+++ b/api_docs/serverless_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch
title: "serverlessSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the serverlessSearch plugin
-date: 2023-08-12
+date: 2023-08-13
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 1a32abd1ebe55..537f5c70f104e 100644
--- a/api_docs/session_view.mdx
+++ b/api_docs/session_view.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView
title: "sessionView"
image: https://source.unsplash.com/400x175/?github
description: API docs for the sessionView plugin
-date: 2023-08-12
+date: 2023-08-13
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 bd11864c17b8d..4e238b0b2a90b 100644
--- a/api_docs/share.mdx
+++ b/api_docs/share.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share
title: "share"
image: https://source.unsplash.com/400x175/?github
description: API docs for the share plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share']
---
import shareObj from './share.devdocs.json';
diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx
index 88777d813d6da..baf53fa543738 100644
--- a/api_docs/snapshot_restore.mdx
+++ b/api_docs/snapshot_restore.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore
title: "snapshotRestore"
image: https://source.unsplash.com/400x175/?github
description: API docs for the snapshotRestore plugin
-date: 2023-08-12
+date: 2023-08-13
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 14719df673333..5ad8576afa341 100644
--- a/api_docs/spaces.mdx
+++ b/api_docs/spaces.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces
title: "spaces"
image: https://source.unsplash.com/400x175/?github
description: API docs for the spaces plugin
-date: 2023-08-12
+date: 2023-08-13
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 ec5a098414f94..6e2bb18807a83 100644
--- a/api_docs/stack_alerts.mdx
+++ b/api_docs/stack_alerts.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts
title: "stackAlerts"
image: https://source.unsplash.com/400x175/?github
description: API docs for the stackAlerts plugin
-date: 2023-08-12
+date: 2023-08-13
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 64df7d4c05c4b..8a3f5bd84ea1a 100644
--- a/api_docs/stack_connectors.mdx
+++ b/api_docs/stack_connectors.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors
title: "stackConnectors"
image: https://source.unsplash.com/400x175/?github
description: API docs for the stackConnectors plugin
-date: 2023-08-12
+date: 2023-08-13
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 fcad5738a3b92..00465fe98cbab 100644
--- a/api_docs/task_manager.mdx
+++ b/api_docs/task_manager.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager
title: "taskManager"
image: https://source.unsplash.com/400x175/?github
description: API docs for the taskManager plugin
-date: 2023-08-12
+date: 2023-08-13
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 268e918ce7520..e56450a21d459 100644
--- a/api_docs/telemetry.mdx
+++ b/api_docs/telemetry.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry
title: "telemetry"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetry plugin
-date: 2023-08-12
+date: 2023-08-13
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 48bbb281ad7af..053051f7c6929 100644
--- a/api_docs/telemetry_collection_manager.mdx
+++ b/api_docs/telemetry_collection_manager.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager
title: "telemetryCollectionManager"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryCollectionManager plugin
-date: 2023-08-12
+date: 2023-08-13
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 0a7e0b53b0c5e..0c98fac73e7b2 100644
--- a/api_docs/telemetry_collection_xpack.mdx
+++ b/api_docs/telemetry_collection_xpack.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack
title: "telemetryCollectionXpack"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryCollectionXpack plugin
-date: 2023-08-12
+date: 2023-08-13
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 d7a3030407eb4..d897308e2390e 100644
--- a/api_docs/telemetry_management_section.mdx
+++ b/api_docs/telemetry_management_section.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection
title: "telemetryManagementSection"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryManagementSection plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection']
---
import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json';
diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx
index e5432c9d9a12e..6dc152693c18a 100644
--- a/api_docs/text_based_languages.mdx
+++ b/api_docs/text_based_languages.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages
title: "textBasedLanguages"
image: https://source.unsplash.com/400x175/?github
description: API docs for the textBasedLanguages plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages']
---
import textBasedLanguagesObj from './text_based_languages.devdocs.json';
diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx
index 33ee0ba6a4671..2f35fb1be01b3 100644
--- a/api_docs/threat_intelligence.mdx
+++ b/api_docs/threat_intelligence.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence
title: "threatIntelligence"
image: https://source.unsplash.com/400x175/?github
description: API docs for the threatIntelligence plugin
-date: 2023-08-12
+date: 2023-08-13
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 4d1f066beb0ce..9ba865b96210a 100644
--- a/api_docs/timelines.mdx
+++ b/api_docs/timelines.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines
title: "timelines"
image: https://source.unsplash.com/400x175/?github
description: API docs for the timelines plugin
-date: 2023-08-12
+date: 2023-08-13
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 4221621669584..6bf4eb760c2db 100644
--- a/api_docs/transform.mdx
+++ b/api_docs/transform.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform
title: "transform"
image: https://source.unsplash.com/400x175/?github
description: API docs for the transform plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform']
---
import transformObj from './transform.devdocs.json';
diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx
index a5d35ba5329b7..46efd91e5c2c2 100644
--- a/api_docs/triggers_actions_ui.mdx
+++ b/api_docs/triggers_actions_ui.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi
title: "triggersActionsUi"
image: https://source.unsplash.com/400x175/?github
description: API docs for the triggersActionsUi plugin
-date: 2023-08-12
+date: 2023-08-13
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 9a89aed99fe94..cf36a1a0ee3f4 100644
--- a/api_docs/ui_actions.mdx
+++ b/api_docs/ui_actions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions
title: "uiActions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the uiActions plugin
-date: 2023-08-12
+date: 2023-08-13
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 3f5a001e174ae..4292f4ddd3675 100644
--- a/api_docs/ui_actions_enhanced.mdx
+++ b/api_docs/ui_actions_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced
title: "uiActionsEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the uiActionsEnhanced plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced']
---
import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json';
diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx
index 2e32a14c65da3..d473425911519 100644
--- a/api_docs/unified_histogram.mdx
+++ b/api_docs/unified_histogram.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram
title: "unifiedHistogram"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedHistogram plugin
-date: 2023-08-12
+date: 2023-08-13
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 f276ec785f7d0..404dea96f5559 100644
--- a/api_docs/unified_search.mdx
+++ b/api_docs/unified_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch
title: "unifiedSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedSearch plugin
-date: 2023-08-12
+date: 2023-08-13
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 afa78ca2e124c..e2ab7fc621110 100644
--- a/api_docs/unified_search_autocomplete.mdx
+++ b/api_docs/unified_search_autocomplete.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete
title: "unifiedSearch.autocomplete"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedSearch.autocomplete plugin
-date: 2023-08-12
+date: 2023-08-13
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 8640ecf53acc8..a6b5dfbcb0061 100644
--- a/api_docs/uptime.mdx
+++ b/api_docs/uptime.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime
title: "uptime"
image: https://source.unsplash.com/400x175/?github
description: API docs for the uptime plugin
-date: 2023-08-12
+date: 2023-08-13
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 cbf5b24609fd9..a29f473a97c70 100644
--- a/api_docs/url_forwarding.mdx
+++ b/api_docs/url_forwarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding
title: "urlForwarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the urlForwarding plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding']
---
import urlForwardingObj from './url_forwarding.devdocs.json';
diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx
index c665caa41a09e..fe5b039ce89b2 100644
--- a/api_docs/usage_collection.mdx
+++ b/api_docs/usage_collection.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection
title: "usageCollection"
image: https://source.unsplash.com/400x175/?github
description: API docs for the usageCollection plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection']
---
import usageCollectionObj from './usage_collection.devdocs.json';
diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx
index 19311cde93314..f8cc738b46b88 100644
--- a/api_docs/ux.mdx
+++ b/api_docs/ux.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux
title: "ux"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ux plugin
-date: 2023-08-12
+date: 2023-08-13
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 45f279ce2052c..94c75a3a7481b 100644
--- a/api_docs/vis_default_editor.mdx
+++ b/api_docs/vis_default_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor
title: "visDefaultEditor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visDefaultEditor plugin
-date: 2023-08-12
+date: 2023-08-13
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 bfdeb2e5a8248..e8ca2d3472e88 100644
--- a/api_docs/vis_type_gauge.mdx
+++ b/api_docs/vis_type_gauge.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge
title: "visTypeGauge"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeGauge plugin
-date: 2023-08-12
+date: 2023-08-13
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 a8829ddf2c375..c0f927de3013d 100644
--- a/api_docs/vis_type_heatmap.mdx
+++ b/api_docs/vis_type_heatmap.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap
title: "visTypeHeatmap"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeHeatmap plugin
-date: 2023-08-12
+date: 2023-08-13
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 fac483ca951b7..2e83d7c9149a4 100644
--- a/api_docs/vis_type_pie.mdx
+++ b/api_docs/vis_type_pie.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie
title: "visTypePie"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypePie plugin
-date: 2023-08-12
+date: 2023-08-13
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 da99c5ff8d640..386aa3b151685 100644
--- a/api_docs/vis_type_table.mdx
+++ b/api_docs/vis_type_table.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable
title: "visTypeTable"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeTable plugin
-date: 2023-08-12
+date: 2023-08-13
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 b43575795ec37..efc2bf42c629c 100644
--- a/api_docs/vis_type_timelion.mdx
+++ b/api_docs/vis_type_timelion.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion
title: "visTypeTimelion"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeTimelion plugin
-date: 2023-08-12
+date: 2023-08-13
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 4b15e8b11a966..6e91ad6cdf228 100644
--- a/api_docs/vis_type_timeseries.mdx
+++ b/api_docs/vis_type_timeseries.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries
title: "visTypeTimeseries"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeTimeseries plugin
-date: 2023-08-12
+date: 2023-08-13
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 abbac2be135be..41172a5f0fd57 100644
--- a/api_docs/vis_type_vega.mdx
+++ b/api_docs/vis_type_vega.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega
title: "visTypeVega"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeVega plugin
-date: 2023-08-12
+date: 2023-08-13
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 6cc6519a7709d..d41bc7b65a0ce 100644
--- a/api_docs/vis_type_vislib.mdx
+++ b/api_docs/vis_type_vislib.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib
title: "visTypeVislib"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeVislib plugin
-date: 2023-08-12
+date: 2023-08-13
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 4d9ede267f8e8..04dcf11054516 100644
--- a/api_docs/vis_type_xy.mdx
+++ b/api_docs/vis_type_xy.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy
title: "visTypeXy"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeXy plugin
-date: 2023-08-12
+date: 2023-08-13
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 13d63e1387885..5db66b08eb2f2 100644
--- a/api_docs/visualizations.mdx
+++ b/api_docs/visualizations.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations
title: "visualizations"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visualizations plugin
-date: 2023-08-12
+date: 2023-08-13
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations']
---
import visualizationsObj from './visualizations.devdocs.json';
From 384a1f16c0b54acf6b501ac084024cf84b9abb5a Mon Sep 17 00:00:00 2001
From: Dario Gieselaar
Date: Sun, 13 Aug 2023 11:01:41 +0200
Subject: [PATCH 43/46] [Observability AI Assistant] Update README.md (#163769)
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Coen Warmer
---
docs/developer/plugin-list.asciidoc | 2 +-
.../observability_ai_assistant/README.md | 74 ++++++++++++++++++-
2 files changed, 73 insertions(+), 3 deletions(-)
diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc
index 923496d123682..57e5ed40571ea 100644
--- a/docs/developer/plugin-list.asciidoc
+++ b/docs/developer/plugin-list.asciidoc
@@ -654,7 +654,7 @@ Elastic.
|{kib-repo}blob/{branch}/x-pack/plugins/observability_ai_assistant/README.md[observabilityAIAssistant]
-|This plugin provides the Observability AI Assistant service and UI components.
+|This document gives an overview of the features of the Observability AI Assistant at the time of writing, and how to use them. At a high level, the Observability AI Assistant offers contextual insights, and a chat functionality that we enrich with function calling, allowing the LLM to hook into the user's data. We also allow the LLM to store things it considers new information as embeddings into Elasticsearch, and query this knowledge base when it decides it needs more information, using ELSER.
|{kib-repo}blob/{branch}/x-pack/plugins/observability_onboarding/README.md[observabilityOnboarding]
diff --git a/x-pack/plugins/observability_ai_assistant/README.md b/x-pack/plugins/observability_ai_assistant/README.md
index 1e2a19618825e..8487cbf13ba10 100644
--- a/x-pack/plugins/observability_ai_assistant/README.md
+++ b/x-pack/plugins/observability_ai_assistant/README.md
@@ -1,3 +1,73 @@
-# Observability AI Assistant plugin
+### **1. Observability AI Assistant Overview**
-This plugin provides the Observability AI Assistant service and UI components.
+#### **1.1. Introduction**
+
+This document gives an overview of the features of the Observability AI Assistant at the time of writing, and how to use them. At a high level, the Observability AI Assistant offers contextual insights, and a chat functionality that we enrich with function calling, allowing the LLM to hook into the user's data. We also allow the LLM to store things it considers new information as embeddings into Elasticsearch, and query this knowledge base when it decides it needs more information, using ELSER.
+
+#### **1.1. Configuration**
+
+Users can connect to an LLM using [connectors](https://www.elastic.co/guide/en/kibana/current/action-types.html) - specifically the [Generative AI connector](https://www.elastic.co/guide/en/kibana/current/gen-ai-action-type.html), which currently supports both OpenAI and Azure OpenAI as providers. The connector is Enterprise-only. Users can also leverage [preconfigured connectors](https://www.elastic.co/guide/en/kibana/current/pre-configured-connectors.html), in which case the following should be added to `kibana.yml`:
+
+```yaml
+xpack.actions.preconfigured:
+ open-ai:
+ actionTypeId: .gen-ai
+ name: OpenAI
+ config:
+ apiUrl: https://api.openai.com/v1/chat/completions
+ apiProvider: OpenAI
+ secrets:
+ apiKey:
+ azure-open-ai:
+ actionTypeId: .gen-ai
+ name: Azure OpenAI
+ config:
+ apiUrl: https://.openai.azure.com/openai/deployments//chat/completions?api-version=
+ apiProvider: Azure OpenAI
+ secrets:
+ apiKey:
+```
+
+**Note**: The configured deployed model should support [function calling](https://platform.openai.com/docs/guides/gpt/function-calling). For OpenAI, this is usually the case. For Azure, the minimum `apiVersion` is `2023-07-01-preview`. We also recommend a model with a pretty sizable token context length.
+
+#### **1.2. Feature controls**
+
+Access to the Observability AI Assistant and its APIs is managed through [Kibana privileges](https://www.elastic.co/guide/en/kibana/current/kibana-privileges.html).
+
+The feature privilege is only available to those with an Enterprise licene.
+
+#### **1.2. Access Points**
+
+- **1.2.1. Contextual insights**
+
+In several places in the Observability apps, the AI Assistant can generate content that helps users understand what they are looking at. We call these contextual insights. Some examples:
+
+- In Profiling, the AI Assistant explains a displayed function and suggests optimisation opportunities
+- In APM, it explains the meaning of a specific error or exception and offers common causes and possible impact
+- In Alerting, the AI Assistant takes the results of the log spike analysis, and tries to find a root cause for the spike
+
+The user can then also continue the conversation in a flyout by clicking "Start chat".
+
+- **1.2.2. Action Menu Button**
+
+All Observability apps also have a button in the top action menu, to open the AI Assistant and start a conversation.
+
+- **1.2.3. Standalone page**
+
+Users can also access existing conversations and create a new one by navigating to `/app/observabilityAIAssistant/conversations/new`. They can also find this link in the search bar.
+
+#### **1.3. Chat**
+
+Conversations with the AI Assistant are powered by three foundational components: the LLM (currently only OpenAI flavors), the knowledge base, and function calling.
+
+The LLM essentially sits between the product and the user. Its purpose is to interpret both the messages from the user and the response from the functions called, and offer its conclusions and suggest next steps. It can suggest functions on its own, and it has read and write access to the knowledge base.
+
+The knowledge base is an Elasticsearch index, with an inference processor powered by ELSER. Kibana developers can preload embeddings into this index, and users can access them too, via plain Elasticsearch APIs or specific Kibana APIs. Additionally, the LLM can query the knowledge base for additional context and store things it has learned from a conversation.
+
+Both the user and the LLM are able to suggest functions, that are executed on behalf (and with the privileges of) the user. Functions allow both the user and the LLM to include relevant context into the conversation. This context can be text, data, or a visual component, like a timeseries graph. Some of the functions that are available are:
+
+- `recall` and `summarise`: these functions query (with a semantic search) or write to (with a summarisation) the knowledge database. This allows the LLM to create a (partly) user-specific working memory, and access predefined embeddings that help improve its understanding of the Elastic platform.
+- `lens`: a function that can be used to create Lens visualisations using Formulas.
+- `get_apm_timeseries`, `get_apm_service_summary`, `get_apm_downstream_dependencies` and `get_apm_error_document`: a set of APM functions, some with visual components, that are helpful in performing root cause analysis.
+
+Function calling is completely transparent to the user - they can edit function suggestions from the LLM, or inspect a function response (but not edit it), or they can request a function themselves.
From 4802b0dbfe293be05d345aa1c0e65a9564b3ffce Mon Sep 17 00:00:00 2001
From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Date: Mon, 14 Aug 2023 00:57:09 -0400
Subject: [PATCH 44/46] [api-docs] 2023-08-14 Daily api_docs build (#163775)
Generated by
https://buildkite.com/elastic/kibana-api-docs-daily/builds/429
---
api_docs/actions.mdx | 2 +-
api_docs/advanced_settings.mdx | 2 +-
api_docs/aiops.mdx | 2 +-
api_docs/alerting.mdx | 2 +-
api_docs/apm.mdx | 2 +-
api_docs/asset_manager.mdx | 2 +-
api_docs/banners.mdx | 2 +-
api_docs/bfetch.mdx | 2 +-
api_docs/canvas.mdx | 2 +-
api_docs/cases.mdx | 2 +-
api_docs/charts.mdx | 2 +-
api_docs/cloud.mdx | 2 +-
api_docs/cloud_chat.mdx | 2 +-
api_docs/cloud_chat_provider.mdx | 2 +-
api_docs/cloud_data_migration.mdx | 2 +-
api_docs/cloud_defend.mdx | 2 +-
api_docs/cloud_experiments.mdx | 2 +-
api_docs/cloud_security_posture.mdx | 2 +-
api_docs/console.mdx | 2 +-
api_docs/content_management.mdx | 2 +-
api_docs/controls.mdx | 2 +-
api_docs/custom_integrations.mdx | 2 +-
api_docs/dashboard.mdx | 2 +-
api_docs/dashboard_enhanced.mdx | 2 +-
api_docs/data.mdx | 2 +-
api_docs/data_query.mdx | 2 +-
api_docs/data_search.mdx | 2 +-
api_docs/data_view_editor.mdx | 2 +-
api_docs/data_view_field_editor.mdx | 2 +-
api_docs/data_view_management.mdx | 2 +-
api_docs/data_views.mdx | 2 +-
api_docs/data_visualizer.mdx | 2 +-
api_docs/deprecations_by_api.mdx | 2 +-
api_docs/deprecations_by_plugin.mdx | 2 +-
api_docs/deprecations_by_team.mdx | 2 +-
api_docs/dev_tools.mdx | 2 +-
api_docs/discover.mdx | 2 +-
api_docs/discover_enhanced.mdx | 2 +-
api_docs/ecs_data_quality_dashboard.mdx | 2 +-
api_docs/embeddable.mdx | 2 +-
api_docs/embeddable_enhanced.mdx | 2 +-
api_docs/encrypted_saved_objects.mdx | 2 +-
api_docs/enterprise_search.mdx | 2 +-
api_docs/es_ui_shared.mdx | 2 +-
api_docs/event_annotation.mdx | 2 +-
api_docs/event_log.mdx | 2 +-
api_docs/exploratory_view.mdx | 2 +-
api_docs/expression_error.mdx | 2 +-
api_docs/expression_gauge.mdx | 2 +-
api_docs/expression_heatmap.mdx | 2 +-
api_docs/expression_image.mdx | 2 +-
api_docs/expression_legacy_metric_vis.mdx | 2 +-
api_docs/expression_metric.mdx | 2 +-
api_docs/expression_metric_vis.mdx | 2 +-
api_docs/expression_partition_vis.mdx | 2 +-
api_docs/expression_repeat_image.mdx | 2 +-
api_docs/expression_reveal_image.mdx | 2 +-
api_docs/expression_shape.mdx | 2 +-
api_docs/expression_tagcloud.mdx | 2 +-
api_docs/expression_x_y.mdx | 2 +-
api_docs/expressions.mdx | 2 +-
api_docs/features.mdx | 2 +-
api_docs/field_formats.mdx | 2 +-
api_docs/file_upload.mdx | 2 +-
api_docs/files.mdx | 2 +-
api_docs/files_management.mdx | 2 +-
api_docs/fleet.mdx | 2 +-
api_docs/global_search.mdx | 2 +-
api_docs/guided_onboarding.mdx | 2 +-
api_docs/home.mdx | 2 +-
api_docs/image_embeddable.mdx | 2 +-
api_docs/index_lifecycle_management.mdx | 2 +-
api_docs/index_management.mdx | 2 +-
api_docs/infra.mdx | 2 +-
api_docs/inspector.mdx | 2 +-
api_docs/interactive_setup.mdx | 2 +-
api_docs/kbn_ace.mdx | 2 +-
api_docs/kbn_aiops_components.mdx | 2 +-
api_docs/kbn_aiops_utils.mdx | 2 +-
api_docs/kbn_alerting_state_types.mdx | 2 +-
api_docs/kbn_alerts_as_data_utils.mdx | 2 +-
api_docs/kbn_alerts_ui_shared.mdx | 2 +-
api_docs/kbn_analytics.mdx | 2 +-
api_docs/kbn_analytics_client.mdx | 2 +-
api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx | 2 +-
api_docs/kbn_analytics_shippers_elastic_v3_common.mdx | 2 +-
api_docs/kbn_analytics_shippers_elastic_v3_server.mdx | 2 +-
api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +-
api_docs/kbn_analytics_shippers_gainsight.mdx | 2 +-
api_docs/kbn_apm_config_loader.mdx | 2 +-
api_docs/kbn_apm_synthtrace.mdx | 2 +-
api_docs/kbn_apm_synthtrace_client.mdx | 2 +-
api_docs/kbn_apm_utils.mdx | 2 +-
api_docs/kbn_axe_config.mdx | 2 +-
api_docs/kbn_cases_components.mdx | 2 +-
api_docs/kbn_cell_actions.mdx | 2 +-
api_docs/kbn_chart_expressions_common.mdx | 2 +-
api_docs/kbn_chart_icons.mdx | 2 +-
api_docs/kbn_ci_stats_core.mdx | 2 +-
api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +-
api_docs/kbn_ci_stats_reporter.mdx | 2 +-
api_docs/kbn_cli_dev_mode.mdx | 2 +-
api_docs/kbn_code_editor.mdx | 2 +-
api_docs/kbn_code_editor_mocks.mdx | 2 +-
api_docs/kbn_coloring.mdx | 2 +-
api_docs/kbn_config.mdx | 2 +-
api_docs/kbn_config_mocks.mdx | 2 +-
api_docs/kbn_config_schema.mdx | 2 +-
api_docs/kbn_content_management_content_editor.mdx | 2 +-
api_docs/kbn_content_management_tabbed_table_list_view.mdx | 2 +-
api_docs/kbn_content_management_table_list_view.mdx | 2 +-
api_docs/kbn_content_management_table_list_view_table.mdx | 2 +-
api_docs/kbn_content_management_utils.mdx | 2 +-
api_docs/kbn_core_analytics_browser.mdx | 2 +-
api_docs/kbn_core_analytics_browser_internal.mdx | 2 +-
api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +-
api_docs/kbn_core_analytics_server.mdx | 2 +-
api_docs/kbn_core_analytics_server_internal.mdx | 2 +-
api_docs/kbn_core_analytics_server_mocks.mdx | 2 +-
api_docs/kbn_core_application_browser.mdx | 2 +-
api_docs/kbn_core_application_browser_internal.mdx | 2 +-
api_docs/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 +-
api_docs/kbn_core_capabilities_browser_mocks.mdx | 2 +-
api_docs/kbn_core_capabilities_common.mdx | 2 +-
api_docs/kbn_core_capabilities_server.mdx | 2 +-
api_docs/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 +-
api_docs/kbn_core_custom_branding_browser_internal.mdx | 2 +-
api_docs/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 +-
api_docs/kbn_core_custom_branding_server_internal.mdx | 2 +-
api_docs/kbn_core_custom_branding_server_mocks.mdx | 2 +-
api_docs/kbn_core_deprecations_browser.mdx | 2 +-
api_docs/kbn_core_deprecations_browser_internal.mdx | 2 +-
api_docs/kbn_core_deprecations_browser_mocks.mdx | 2 +-
api_docs/kbn_core_deprecations_common.mdx | 2 +-
api_docs/kbn_core_deprecations_server.mdx | 2 +-
api_docs/kbn_core_deprecations_server_internal.mdx | 2 +-
api_docs/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 +-
api_docs/kbn_core_elasticsearch_client_server_internal.mdx | 2 +-
api_docs/kbn_core_elasticsearch_client_server_mocks.mdx | 2 +-
api_docs/kbn_core_elasticsearch_server.mdx | 2 +-
api_docs/kbn_core_elasticsearch_server_internal.mdx | 2 +-
api_docs/kbn_core_elasticsearch_server_mocks.mdx | 2 +-
api_docs/kbn_core_environment_server_internal.mdx | 2 +-
api_docs/kbn_core_environment_server_mocks.mdx | 2 +-
api_docs/kbn_core_execution_context_browser.mdx | 2 +-
api_docs/kbn_core_execution_context_browser_internal.mdx | 2 +-
api_docs/kbn_core_execution_context_browser_mocks.mdx | 2 +-
api_docs/kbn_core_execution_context_common.mdx | 2 +-
api_docs/kbn_core_execution_context_server.mdx | 2 +-
api_docs/kbn_core_execution_context_server_internal.mdx | 2 +-
api_docs/kbn_core_execution_context_server_mocks.mdx | 2 +-
api_docs/kbn_core_fatal_errors_browser.mdx | 2 +-
api_docs/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 +-
api_docs/kbn_core_http_context_server_mocks.mdx | 2 +-
api_docs/kbn_core_http_request_handler_context_server.mdx | 2 +-
api_docs/kbn_core_http_resources_server.mdx | 2 +-
api_docs/kbn_core_http_resources_server_internal.mdx | 2 +-
api_docs/kbn_core_http_resources_server_mocks.mdx | 2 +-
api_docs/kbn_core_http_router_server_internal.mdx | 2 +-
api_docs/kbn_core_http_router_server_mocks.mdx | 2 +-
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 +-
api_docs/kbn_core_injected_metadata_browser_mocks.mdx | 2 +-
api_docs/kbn_core_integrations_browser_internal.mdx | 2 +-
api_docs/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 +-
api_docs/kbn_core_metrics_collectors_server_internal.mdx | 2 +-
api_docs/kbn_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 +-
api_docs/kbn_core_notifications_browser_internal.mdx | 2 +-
api_docs/kbn_core_notifications_browser_mocks.mdx | 2 +-
api_docs/kbn_core_overlays_browser.mdx | 2 +-
api_docs/kbn_core_overlays_browser_internal.mdx | 2 +-
api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +-
api_docs/kbn_core_plugins_browser.mdx | 2 +-
api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +-
api_docs/kbn_core_plugins_server.mdx | 2 +-
api_docs/kbn_core_plugins_server_mocks.mdx | 2 +-
api_docs/kbn_core_preboot_server.mdx | 2 +-
api_docs/kbn_core_preboot_server_mocks.mdx | 2 +-
api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +-
api_docs/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 +-
api_docs/kbn_core_saved_objects_api_browser.mdx | 2 +-
api_docs/kbn_core_saved_objects_api_server.mdx | 2 +-
api_docs/kbn_core_saved_objects_api_server_mocks.mdx | 2 +-
api_docs/kbn_core_saved_objects_base_server_internal.mdx | 2 +-
api_docs/kbn_core_saved_objects_base_server_mocks.mdx | 2 +-
api_docs/kbn_core_saved_objects_browser.mdx | 2 +-
api_docs/kbn_core_saved_objects_browser_internal.mdx | 2 +-
api_docs/kbn_core_saved_objects_browser_mocks.mdx | 2 +-
api_docs/kbn_core_saved_objects_common.mdx | 2 +-
.../kbn_core_saved_objects_import_export_server_internal.mdx | 2 +-
api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx | 2 +-
api_docs/kbn_core_saved_objects_migration_server_internal.mdx | 2 +-
api_docs/kbn_core_saved_objects_migration_server_mocks.mdx | 2 +-
api_docs/kbn_core_saved_objects_server.mdx | 2 +-
api_docs/kbn_core_saved_objects_server_internal.mdx | 2 +-
api_docs/kbn_core_saved_objects_server_mocks.mdx | 2 +-
api_docs/kbn_core_saved_objects_utils_server.mdx | 2 +-
api_docs/kbn_core_status_common.mdx | 2 +-
api_docs/kbn_core_status_common_internal.mdx | 2 +-
api_docs/kbn_core_status_server.mdx | 2 +-
api_docs/kbn_core_status_server_internal.mdx | 2 +-
api_docs/kbn_core_status_server_mocks.mdx | 2 +-
api_docs/kbn_core_test_helpers_deprecations_getters.mdx | 2 +-
api_docs/kbn_core_test_helpers_http_setup_browser.mdx | 2 +-
api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +-
api_docs/kbn_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 +-
api_docs/kbn_core_ui_settings_browser_internal.mdx | 2 +-
api_docs/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 +-
api_docs/kbn_core_ui_settings_server_internal.mdx | 2 +-
api_docs/kbn_core_ui_settings_server_mocks.mdx | 2 +-
api_docs/kbn_core_usage_data_server.mdx | 2 +-
api_docs/kbn_core_usage_data_server_internal.mdx | 2 +-
api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +-
api_docs/kbn_core_user_settings_server.mdx | 2 +-
api_docs/kbn_core_user_settings_server_internal.mdx | 2 +-
api_docs/kbn_core_user_settings_server_mocks.mdx | 2 +-
api_docs/kbn_crypto.mdx | 2 +-
api_docs/kbn_crypto_browser.mdx | 2 +-
api_docs/kbn_cypress_config.mdx | 2 +-
api_docs/kbn_data_service.mdx | 2 +-
api_docs/kbn_datemath.mdx | 2 +-
api_docs/kbn_deeplinks_analytics.mdx | 2 +-
api_docs/kbn_deeplinks_devtools.mdx | 2 +-
api_docs/kbn_deeplinks_management.mdx | 2 +-
api_docs/kbn_deeplinks_ml.mdx | 2 +-
api_docs/kbn_deeplinks_observability.mdx | 2 +-
api_docs/kbn_deeplinks_search.mdx | 2 +-
api_docs/kbn_default_nav_analytics.mdx | 2 +-
api_docs/kbn_default_nav_devtools.mdx | 2 +-
api_docs/kbn_default_nav_management.mdx | 2 +-
api_docs/kbn_default_nav_ml.mdx | 2 +-
api_docs/kbn_dev_cli_errors.mdx | 2 +-
api_docs/kbn_dev_cli_runner.mdx | 2 +-
api_docs/kbn_dev_proc_runner.mdx | 2 +-
api_docs/kbn_dev_utils.mdx | 2 +-
api_docs/kbn_discover_utils.mdx | 2 +-
api_docs/kbn_doc_links.mdx | 2 +-
api_docs/kbn_docs_utils.mdx | 2 +-
api_docs/kbn_dom_drag_drop.mdx | 2 +-
api_docs/kbn_ebt_tools.mdx | 2 +-
api_docs/kbn_ecs.mdx | 2 +-
api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +-
api_docs/kbn_elastic_assistant.mdx | 2 +-
api_docs/kbn_es.mdx | 2 +-
api_docs/kbn_es_archiver.mdx | 2 +-
api_docs/kbn_es_errors.mdx | 2 +-
api_docs/kbn_es_query.mdx | 2 +-
api_docs/kbn_es_types.mdx | 2 +-
api_docs/kbn_eslint_plugin_imports.mdx | 2 +-
api_docs/kbn_event_annotation_common.mdx | 2 +-
api_docs/kbn_event_annotation_components.mdx | 2 +-
api_docs/kbn_expandable_flyout.mdx | 2 +-
api_docs/kbn_field_types.mdx | 2 +-
api_docs/kbn_find_used_node_modules.mdx | 2 +-
api_docs/kbn_ftr_common_functional_services.mdx | 2 +-
api_docs/kbn_generate.mdx | 2 +-
api_docs/kbn_generate_console_definitions.mdx | 2 +-
api_docs/kbn_generate_csv.mdx | 2 +-
api_docs/kbn_generate_csv_types.mdx | 2 +-
api_docs/kbn_guided_onboarding.mdx | 2 +-
api_docs/kbn_handlebars.mdx | 2 +-
api_docs/kbn_hapi_mocks.mdx | 2 +-
api_docs/kbn_health_gateway_server.mdx | 2 +-
api_docs/kbn_home_sample_data_card.mdx | 2 +-
api_docs/kbn_home_sample_data_tab.mdx | 2 +-
api_docs/kbn_i18n.mdx | 2 +-
api_docs/kbn_i18n_react.mdx | 2 +-
api_docs/kbn_import_resolver.mdx | 2 +-
api_docs/kbn_infra_forge.mdx | 2 +-
api_docs/kbn_interpreter.mdx | 2 +-
api_docs/kbn_io_ts_utils.mdx | 2 +-
api_docs/kbn_jest_serializers.mdx | 2 +-
api_docs/kbn_journeys.mdx | 2 +-
api_docs/kbn_json_ast.mdx | 2 +-
api_docs/kbn_kibana_manifest_schema.mdx | 2 +-
api_docs/kbn_language_documentation_popover.mdx | 2 +-
api_docs/kbn_logging.mdx | 2 +-
api_docs/kbn_logging_mocks.mdx | 2 +-
api_docs/kbn_managed_vscode_config.mdx | 2 +-
api_docs/kbn_management_cards_navigation.mdx | 2 +-
api_docs/kbn_management_storybook_config.mdx | 2 +-
api_docs/kbn_mapbox_gl.mdx | 2 +-
api_docs/kbn_maps_vector_tile_utils.mdx | 2 +-
api_docs/kbn_ml_agg_utils.mdx | 2 +-
api_docs/kbn_ml_anomaly_utils.mdx | 2 +-
api_docs/kbn_ml_category_validator.mdx | 2 +-
api_docs/kbn_ml_data_frame_analytics_utils.mdx | 2 +-
api_docs/kbn_ml_data_grid.mdx | 2 +-
api_docs/kbn_ml_date_picker.mdx | 2 +-
api_docs/kbn_ml_date_utils.mdx | 2 +-
api_docs/kbn_ml_error_utils.mdx | 2 +-
api_docs/kbn_ml_in_memory_table.mdx | 2 +-
api_docs/kbn_ml_is_defined.mdx | 2 +-
api_docs/kbn_ml_is_populated_object.mdx | 2 +-
api_docs/kbn_ml_kibana_theme.mdx | 2 +-
api_docs/kbn_ml_local_storage.mdx | 2 +-
api_docs/kbn_ml_nested_property.mdx | 2 +-
api_docs/kbn_ml_number_utils.mdx | 2 +-
api_docs/kbn_ml_query_utils.mdx | 2 +-
api_docs/kbn_ml_random_sampler_utils.mdx | 2 +-
api_docs/kbn_ml_route_utils.mdx | 2 +-
api_docs/kbn_ml_runtime_field_utils.mdx | 2 +-
api_docs/kbn_ml_string_hash.mdx | 2 +-
api_docs/kbn_ml_trained_models_utils.mdx | 2 +-
api_docs/kbn_ml_url_state.mdx | 2 +-
api_docs/kbn_monaco.mdx | 2 +-
api_docs/kbn_object_versioning.mdx | 2 +-
api_docs/kbn_observability_alert_details.mdx | 2 +-
api_docs/kbn_optimizer.mdx | 2 +-
api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +-
api_docs/kbn_osquery_io_ts_types.mdx | 2 +-
api_docs/kbn_performance_testing_dataset_extractor.mdx | 2 +-
api_docs/kbn_plugin_generator.mdx | 2 +-
api_docs/kbn_plugin_helpers.mdx | 2 +-
api_docs/kbn_random_sampling.mdx | 2 +-
api_docs/kbn_react_field.mdx | 2 +-
api_docs/kbn_react_kibana_context_common.mdx | 2 +-
api_docs/kbn_react_kibana_context_render.mdx | 2 +-
api_docs/kbn_react_kibana_context_root.mdx | 2 +-
api_docs/kbn_react_kibana_context_styled.mdx | 2 +-
api_docs/kbn_react_kibana_context_theme.mdx | 2 +-
api_docs/kbn_react_kibana_mount.mdx | 2 +-
api_docs/kbn_repo_file_maps.mdx | 2 +-
api_docs/kbn_repo_linter.mdx | 2 +-
api_docs/kbn_repo_path.mdx | 2 +-
api_docs/kbn_repo_source_classifier.mdx | 2 +-
api_docs/kbn_reporting_common.mdx | 2 +-
api_docs/kbn_rison.mdx | 2 +-
api_docs/kbn_rrule.mdx | 2 +-
api_docs/kbn_rule_data_utils.mdx | 2 +-
api_docs/kbn_saved_objects_settings.mdx | 2 +-
api_docs/kbn_search_api_panels.mdx | 2 +-
api_docs/kbn_search_response_warnings.mdx | 2 +-
api_docs/kbn_security_solution_navigation.mdx | 2 +-
api_docs/kbn_security_solution_side_nav.mdx | 2 +-
api_docs/kbn_security_solution_storybook_config.mdx | 2 +-
api_docs/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 +-
api_docs/kbn_securitysolution_exception_list_components.mdx | 2 +-
api_docs/kbn_securitysolution_grouping.mdx | 2 +-
api_docs/kbn_securitysolution_hook_utils.mdx | 2 +-
api_docs/kbn_securitysolution_io_ts_alerting_types.mdx | 2 +-
api_docs/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 +-
api_docs/kbn_securitysolution_list_constants.mdx | 2 +-
api_docs/kbn_securitysolution_list_hooks.mdx | 2 +-
api_docs/kbn_securitysolution_list_utils.mdx | 2 +-
api_docs/kbn_securitysolution_rules.mdx | 2 +-
api_docs/kbn_securitysolution_t_grid.mdx | 2 +-
api_docs/kbn_securitysolution_utils.mdx | 2 +-
api_docs/kbn_server_http_tools.mdx | 2 +-
api_docs/kbn_server_route_repository.mdx | 2 +-
api_docs/kbn_serverless_project_switcher.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 +-
api_docs/kbn_shared_ux_avatar_user_profile_components.mdx | 2 +-
api_docs/kbn_shared_ux_button_exit_full_screen.mdx | 2 +-
api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +-
api_docs/kbn_shared_ux_card_no_data.mdx | 2 +-
api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +-
api_docs/kbn_shared_ux_file_context.mdx | 2 +-
api_docs/kbn_shared_ux_file_image.mdx | 2 +-
api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_file_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_file_picker.mdx | 2 +-
api_docs/kbn_shared_ux_file_types.mdx | 2 +-
api_docs/kbn_shared_ux_file_upload.mdx | 2 +-
api_docs/kbn_shared_ux_file_util.mdx | 2 +-
api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +-
api_docs/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 +-
api_docs/kbn_shared_ux_page_analytics_no_data.mdx | 2 +-
api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_page_kibana_no_data.mdx | 2 +-
api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_page_kibana_template.mdx | 2 +-
api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_page_no_data.mdx | 2 +-
api_docs/kbn_shared_ux_page_no_data_config.mdx | 2 +-
api_docs/kbn_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 +-
api_docs/kbn_shared_ux_prompt_no_data_views.mdx | 2 +-
api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +-
api_docs/kbn_shared_ux_router.mdx | 2 +-
api_docs/kbn_shared_ux_router_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_storybook_config.mdx | 2 +-
api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +-
api_docs/kbn_shared_ux_utility.mdx | 2 +-
api_docs/kbn_slo_schema.mdx | 2 +-
api_docs/kbn_some_dev_log.mdx | 2 +-
api_docs/kbn_std.mdx | 2 +-
api_docs/kbn_stdio_dev_helpers.mdx | 2 +-
api_docs/kbn_storybook.mdx | 2 +-
api_docs/kbn_telemetry_tools.mdx | 2 +-
api_docs/kbn_test.mdx | 2 +-
api_docs/kbn_test_jest_helpers.mdx | 2 +-
api_docs/kbn_test_subj_selector.mdx | 2 +-
api_docs/kbn_text_based_editor.mdx | 2 +-
api_docs/kbn_tooling_log.mdx | 2 +-
api_docs/kbn_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_field_list.mdx | 2 +-
api_docs/kbn_url_state.mdx | 2 +-
api_docs/kbn_use_tracked_promise.mdx | 2 +-
api_docs/kbn_user_profile_components.mdx | 2 +-
api_docs/kbn_utility_types.mdx | 2 +-
api_docs/kbn_utility_types_jest.mdx | 2 +-
api_docs/kbn_utils.mdx | 2 +-
api_docs/kbn_visualization_ui_components.mdx | 2 +-
api_docs/kbn_yarn_lock_validator.mdx | 2 +-
api_docs/kibana_overview.mdx | 2 +-
api_docs/kibana_react.mdx | 2 +-
api_docs/kibana_utils.mdx | 2 +-
api_docs/kubernetes_security.mdx | 2 +-
api_docs/lens.mdx | 2 +-
api_docs/license_api_guard.mdx | 2 +-
api_docs/license_management.mdx | 2 +-
api_docs/licensing.mdx | 2 +-
api_docs/lists.mdx | 2 +-
api_docs/logs_shared.mdx | 2 +-
api_docs/management.mdx | 2 +-
api_docs/maps.mdx | 2 +-
api_docs/maps_ems.mdx | 2 +-
api_docs/ml.mdx | 2 +-
api_docs/monitoring.mdx | 2 +-
api_docs/monitoring_collection.mdx | 2 +-
api_docs/navigation.mdx | 2 +-
api_docs/newsfeed.mdx | 2 +-
api_docs/notifications.mdx | 2 +-
api_docs/observability.mdx | 2 +-
api_docs/observability_a_i_assistant.mdx | 2 +-
api_docs/observability_onboarding.mdx | 2 +-
api_docs/observability_shared.mdx | 2 +-
api_docs/osquery.mdx | 2 +-
api_docs/plugin_directory.mdx | 2 +-
api_docs/presentation_util.mdx | 2 +-
api_docs/profiling.mdx | 2 +-
api_docs/remote_clusters.mdx | 2 +-
api_docs/reporting.mdx | 2 +-
api_docs/rollup.mdx | 2 +-
api_docs/rule_registry.mdx | 2 +-
api_docs/runtime_fields.mdx | 2 +-
api_docs/saved_objects.mdx | 2 +-
api_docs/saved_objects_finder.mdx | 2 +-
api_docs/saved_objects_management.mdx | 2 +-
api_docs/saved_objects_tagging.mdx | 2 +-
api_docs/saved_objects_tagging_oss.mdx | 2 +-
api_docs/saved_search.mdx | 2 +-
api_docs/screenshot_mode.mdx | 2 +-
api_docs/screenshotting.mdx | 2 +-
api_docs/security.mdx | 2 +-
api_docs/security_solution.mdx | 2 +-
api_docs/security_solution_ess.mdx | 2 +-
api_docs/security_solution_serverless.mdx | 2 +-
api_docs/serverless.mdx | 2 +-
api_docs/serverless_observability.mdx | 2 +-
api_docs/serverless_search.mdx | 2 +-
api_docs/session_view.mdx | 2 +-
api_docs/share.mdx | 2 +-
api_docs/snapshot_restore.mdx | 2 +-
api_docs/spaces.mdx | 2 +-
api_docs/stack_alerts.mdx | 2 +-
api_docs/stack_connectors.mdx | 2 +-
api_docs/task_manager.mdx | 2 +-
api_docs/telemetry.mdx | 2 +-
api_docs/telemetry_collection_manager.mdx | 2 +-
api_docs/telemetry_collection_xpack.mdx | 2 +-
api_docs/telemetry_management_section.mdx | 2 +-
api_docs/text_based_languages.mdx | 2 +-
api_docs/threat_intelligence.mdx | 2 +-
api_docs/timelines.mdx | 2 +-
api_docs/transform.mdx | 2 +-
api_docs/triggers_actions_ui.mdx | 2 +-
api_docs/ui_actions.mdx | 2 +-
api_docs/ui_actions_enhanced.mdx | 2 +-
api_docs/unified_histogram.mdx | 2 +-
api_docs/unified_search.mdx | 2 +-
api_docs/unified_search_autocomplete.mdx | 2 +-
api_docs/uptime.mdx | 2 +-
api_docs/url_forwarding.mdx | 2 +-
api_docs/usage_collection.mdx | 2 +-
api_docs/ux.mdx | 2 +-
api_docs/vis_default_editor.mdx | 2 +-
api_docs/vis_type_gauge.mdx | 2 +-
api_docs/vis_type_heatmap.mdx | 2 +-
api_docs/vis_type_pie.mdx | 2 +-
api_docs/vis_type_table.mdx | 2 +-
api_docs/vis_type_timelion.mdx | 2 +-
api_docs/vis_type_timeseries.mdx | 2 +-
api_docs/vis_type_vega.mdx | 2 +-
api_docs/vis_type_vislib.mdx | 2 +-
api_docs/vis_type_xy.mdx | 2 +-
api_docs/visualizations.mdx | 2 +-
559 files changed, 559 insertions(+), 559 deletions(-)
diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx
index 26e8e682046a6..f7f59ab374019 100644
--- a/api_docs/actions.mdx
+++ b/api_docs/actions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions
title: "actions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the actions plugin
-date: 2023-08-13
+date: 2023-08-14
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 ebd9643146748..f37618f63a824 100644
--- a/api_docs/advanced_settings.mdx
+++ b/api_docs/advanced_settings.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings
title: "advancedSettings"
image: https://source.unsplash.com/400x175/?github
description: API docs for the advancedSettings plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings']
---
import advancedSettingsObj from './advanced_settings.devdocs.json';
diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx
index e5cf40824b64e..b24567d1f291b 100644
--- a/api_docs/aiops.mdx
+++ b/api_docs/aiops.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops
title: "aiops"
image: https://source.unsplash.com/400x175/?github
description: API docs for the aiops plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops']
---
import aiopsObj from './aiops.devdocs.json';
diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx
index f7b8d7bc46fb4..5e8fa5c86b158 100644
--- a/api_docs/alerting.mdx
+++ b/api_docs/alerting.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting
title: "alerting"
image: https://source.unsplash.com/400x175/?github
description: API docs for the alerting plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting']
---
import alertingObj from './alerting.devdocs.json';
diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx
index 8609545577928..7d421c5090d3a 100644
--- a/api_docs/apm.mdx
+++ b/api_docs/apm.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm
title: "apm"
image: https://source.unsplash.com/400x175/?github
description: API docs for the apm plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm']
---
import apmObj from './apm.devdocs.json';
diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx
index 99ba27060a6a6..15342810011d8 100644
--- a/api_docs/asset_manager.mdx
+++ b/api_docs/asset_manager.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager
title: "assetManager"
image: https://source.unsplash.com/400x175/?github
description: API docs for the assetManager plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager']
---
import assetManagerObj from './asset_manager.devdocs.json';
diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx
index 7a23d9e244495..34d929d1d93e6 100644
--- a/api_docs/banners.mdx
+++ b/api_docs/banners.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners
title: "banners"
image: https://source.unsplash.com/400x175/?github
description: API docs for the banners plugin
-date: 2023-08-13
+date: 2023-08-14
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 b56e3294dc473..4b6e8c5823eaa 100644
--- a/api_docs/bfetch.mdx
+++ b/api_docs/bfetch.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch
title: "bfetch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the bfetch plugin
-date: 2023-08-13
+date: 2023-08-14
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 dfcb47d21dc50..53ac40db1a511 100644
--- a/api_docs/canvas.mdx
+++ b/api_docs/canvas.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas
title: "canvas"
image: https://source.unsplash.com/400x175/?github
description: API docs for the canvas plugin
-date: 2023-08-13
+date: 2023-08-14
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 39c006f3535f5..c664beb3cdc6d 100644
--- a/api_docs/cases.mdx
+++ b/api_docs/cases.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases
title: "cases"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cases plugin
-date: 2023-08-13
+date: 2023-08-14
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 82757f699d58d..08a44567f3d13 100644
--- a/api_docs/charts.mdx
+++ b/api_docs/charts.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts
title: "charts"
image: https://source.unsplash.com/400x175/?github
description: API docs for the charts plugin
-date: 2023-08-13
+date: 2023-08-14
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 bccd180fb2c7e..15457fc193df6 100644
--- a/api_docs/cloud.mdx
+++ b/api_docs/cloud.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud
title: "cloud"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloud plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud']
---
import cloudObj from './cloud.devdocs.json';
diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx
index 4cde568342c9e..33cfa9e79b005 100644
--- a/api_docs/cloud_chat.mdx
+++ b/api_docs/cloud_chat.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat
title: "cloudChat"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudChat plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat']
---
import cloudChatObj from './cloud_chat.devdocs.json';
diff --git a/api_docs/cloud_chat_provider.mdx b/api_docs/cloud_chat_provider.mdx
index 93ae41255bf49..80039c741b688 100644
--- a/api_docs/cloud_chat_provider.mdx
+++ b/api_docs/cloud_chat_provider.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChatProvider
title: "cloudChatProvider"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudChatProvider plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChatProvider']
---
import cloudChatProviderObj from './cloud_chat_provider.devdocs.json';
diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx
index fb9598ac989ae..76d41d9ff55fe 100644
--- a/api_docs/cloud_data_migration.mdx
+++ b/api_docs/cloud_data_migration.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration
title: "cloudDataMigration"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudDataMigration plugin
-date: 2023-08-13
+date: 2023-08-14
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 4859847f9dbf0..79f2f1208888b 100644
--- a/api_docs/cloud_defend.mdx
+++ b/api_docs/cloud_defend.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend
title: "cloudDefend"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudDefend plugin
-date: 2023-08-13
+date: 2023-08-14
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 6c942b1303b47..6451c0a55f761 100644
--- a/api_docs/cloud_experiments.mdx
+++ b/api_docs/cloud_experiments.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments
title: "cloudExperiments"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudExperiments plugin
-date: 2023-08-13
+date: 2023-08-14
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 1e94d1405f415..8cac1402c0711 100644
--- a/api_docs/cloud_security_posture.mdx
+++ b/api_docs/cloud_security_posture.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture
title: "cloudSecurityPosture"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudSecurityPosture plugin
-date: 2023-08-13
+date: 2023-08-14
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 df13e8e2df89c..0568f097f37eb 100644
--- a/api_docs/console.mdx
+++ b/api_docs/console.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console
title: "console"
image: https://source.unsplash.com/400x175/?github
description: API docs for the console plugin
-date: 2023-08-13
+date: 2023-08-14
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 f9afa04a4bc53..b4494ac4cbde6 100644
--- a/api_docs/content_management.mdx
+++ b/api_docs/content_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement
title: "contentManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the contentManagement plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement']
---
import contentManagementObj from './content_management.devdocs.json';
diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx
index d106f1eaf7418..46397a43a99ac 100644
--- a/api_docs/controls.mdx
+++ b/api_docs/controls.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls
title: "controls"
image: https://source.unsplash.com/400x175/?github
description: API docs for the controls plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls']
---
import controlsObj from './controls.devdocs.json';
diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx
index c00bdbe02eb2d..73fee3ecce867 100644
--- a/api_docs/custom_integrations.mdx
+++ b/api_docs/custom_integrations.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations
title: "customIntegrations"
image: https://source.unsplash.com/400x175/?github
description: API docs for the customIntegrations plugin
-date: 2023-08-13
+date: 2023-08-14
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 b0e2771026996..662c7d20da653 100644
--- a/api_docs/dashboard.mdx
+++ b/api_docs/dashboard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard
title: "dashboard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dashboard plugin
-date: 2023-08-13
+date: 2023-08-14
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 af4328ebf62a1..d0d831a152b44 100644
--- a/api_docs/dashboard_enhanced.mdx
+++ b/api_docs/dashboard_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced
title: "dashboardEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dashboardEnhanced plugin
-date: 2023-08-13
+date: 2023-08-14
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 5152e501b6d45..e7dd7e88429a7 100644
--- a/api_docs/data.mdx
+++ b/api_docs/data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data
title: "data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the data plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data']
---
import dataObj from './data.devdocs.json';
diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx
index 5b504a1259cc4..ca8eef794fd7c 100644
--- a/api_docs/data_query.mdx
+++ b/api_docs/data_query.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query
title: "data.query"
image: https://source.unsplash.com/400x175/?github
description: API docs for the data.query plugin
-date: 2023-08-13
+date: 2023-08-14
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 0c2a8af2bcce2..846f0293c55a1 100644
--- a/api_docs/data_search.mdx
+++ b/api_docs/data_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search
title: "data.search"
image: https://source.unsplash.com/400x175/?github
description: API docs for the data.search plugin
-date: 2023-08-13
+date: 2023-08-14
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 9cd2b36ad6141..59080818199bd 100644
--- a/api_docs/data_view_editor.mdx
+++ b/api_docs/data_view_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor
title: "dataViewEditor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViewEditor plugin
-date: 2023-08-13
+date: 2023-08-14
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 241d11f98c735..bc158603b333e 100644
--- a/api_docs/data_view_field_editor.mdx
+++ b/api_docs/data_view_field_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor
title: "dataViewFieldEditor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViewFieldEditor plugin
-date: 2023-08-13
+date: 2023-08-14
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 f7dff63fd25a6..9125d5728c278 100644
--- a/api_docs/data_view_management.mdx
+++ b/api_docs/data_view_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement
title: "dataViewManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViewManagement plugin
-date: 2023-08-13
+date: 2023-08-14
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 f482d121bd219..1c632aa1adace 100644
--- a/api_docs/data_views.mdx
+++ b/api_docs/data_views.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews
title: "dataViews"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViews plugin
-date: 2023-08-13
+date: 2023-08-14
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 2d50489b6555a..8e1743319b5c5 100644
--- a/api_docs/data_visualizer.mdx
+++ b/api_docs/data_visualizer.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer
title: "dataVisualizer"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataVisualizer plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer']
---
import dataVisualizerObj from './data_visualizer.devdocs.json';
diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx
index 99c17090dd67f..752aebd20e8ff 100644
--- a/api_docs/deprecations_by_api.mdx
+++ b/api_docs/deprecations_by_api.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi
slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api
title: Deprecated API usage by API
description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by.
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx
index 48291e7fd327b..959268b1e2471 100644
--- a/api_docs/deprecations_by_plugin.mdx
+++ b/api_docs/deprecations_by_plugin.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin
slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin
title: Deprecated API usage by plugin
description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by.
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx
index 013a1a7f8204d..6e77d89a3d7ba 100644
--- a/api_docs/deprecations_by_team.mdx
+++ b/api_docs/deprecations_by_team.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam
slug: /kibana-dev-docs/api-meta/deprecations-due-by-team
title: Deprecated APIs due to be removed, by team
description: Lists the teams that are referencing deprecated APIs with a remove by date.
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx
index ee4d9d7aa8e98..54058ca1978d0 100644
--- a/api_docs/dev_tools.mdx
+++ b/api_docs/dev_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools
title: "devTools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the devTools plugin
-date: 2023-08-13
+date: 2023-08-14
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 449f759accd49..b8906da5ca609 100644
--- a/api_docs/discover.mdx
+++ b/api_docs/discover.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover
title: "discover"
image: https://source.unsplash.com/400x175/?github
description: API docs for the discover plugin
-date: 2023-08-13
+date: 2023-08-14
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 daa9847841fc5..7245ee4c0accc 100644
--- a/api_docs/discover_enhanced.mdx
+++ b/api_docs/discover_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced
title: "discoverEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the discoverEnhanced plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced']
---
import discoverEnhancedObj from './discover_enhanced.devdocs.json';
diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx
index b8639e406f50b..a9a8c9a5ba05d 100644
--- a/api_docs/ecs_data_quality_dashboard.mdx
+++ b/api_docs/ecs_data_quality_dashboard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard
title: "ecsDataQualityDashboard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ecsDataQualityDashboard plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard']
---
import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json';
diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx
index 58e9fbf43e98a..5e2f142c32d09 100644
--- a/api_docs/embeddable.mdx
+++ b/api_docs/embeddable.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable
title: "embeddable"
image: https://source.unsplash.com/400x175/?github
description: API docs for the embeddable plugin
-date: 2023-08-13
+date: 2023-08-14
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 5b87c2fd8fd06..977de89ba11d9 100644
--- a/api_docs/embeddable_enhanced.mdx
+++ b/api_docs/embeddable_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced
title: "embeddableEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the embeddableEnhanced plugin
-date: 2023-08-13
+date: 2023-08-14
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 7c42b7eefdbde..b32c88854c53d 100644
--- a/api_docs/encrypted_saved_objects.mdx
+++ b/api_docs/encrypted_saved_objects.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects
title: "encryptedSavedObjects"
image: https://source.unsplash.com/400x175/?github
description: API docs for the encryptedSavedObjects plugin
-date: 2023-08-13
+date: 2023-08-14
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 7203cde8fe847..a53415fe5730f 100644
--- a/api_docs/enterprise_search.mdx
+++ b/api_docs/enterprise_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch
title: "enterpriseSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the enterpriseSearch plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch']
---
import enterpriseSearchObj from './enterprise_search.devdocs.json';
diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx
index 1967eb2503838..45364a1f98b55 100644
--- a/api_docs/es_ui_shared.mdx
+++ b/api_docs/es_ui_shared.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared
title: "esUiShared"
image: https://source.unsplash.com/400x175/?github
description: API docs for the esUiShared plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared']
---
import esUiSharedObj from './es_ui_shared.devdocs.json';
diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx
index 8aaf19c05c9ce..7f997b0931d3e 100644
--- a/api_docs/event_annotation.mdx
+++ b/api_docs/event_annotation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation
title: "eventAnnotation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the eventAnnotation plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation']
---
import eventAnnotationObj from './event_annotation.devdocs.json';
diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx
index 6530eea506932..d8cd0a7c952f6 100644
--- a/api_docs/event_log.mdx
+++ b/api_docs/event_log.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog
title: "eventLog"
image: https://source.unsplash.com/400x175/?github
description: API docs for the eventLog plugin
-date: 2023-08-13
+date: 2023-08-14
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 4ed811236d01a..0e3917951134d 100644
--- a/api_docs/exploratory_view.mdx
+++ b/api_docs/exploratory_view.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView
title: "exploratoryView"
image: https://source.unsplash.com/400x175/?github
description: API docs for the exploratoryView plugin
-date: 2023-08-13
+date: 2023-08-14
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 9f9bf21d26429..bf260f104ff66 100644
--- a/api_docs/expression_error.mdx
+++ b/api_docs/expression_error.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError
title: "expressionError"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionError plugin
-date: 2023-08-13
+date: 2023-08-14
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 e57a60b475ce4..5d871db277c38 100644
--- a/api_docs/expression_gauge.mdx
+++ b/api_docs/expression_gauge.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge
title: "expressionGauge"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionGauge plugin
-date: 2023-08-13
+date: 2023-08-14
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 234a99585ecd4..300bc7e6c10d0 100644
--- a/api_docs/expression_heatmap.mdx
+++ b/api_docs/expression_heatmap.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap
title: "expressionHeatmap"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionHeatmap plugin
-date: 2023-08-13
+date: 2023-08-14
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 e3438894b9152..f94c1306a6036 100644
--- a/api_docs/expression_image.mdx
+++ b/api_docs/expression_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage
title: "expressionImage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionImage plugin
-date: 2023-08-13
+date: 2023-08-14
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 887b0bbff6d86..503733e8ff7a7 100644
--- a/api_docs/expression_legacy_metric_vis.mdx
+++ b/api_docs/expression_legacy_metric_vis.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis
title: "expressionLegacyMetricVis"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionLegacyMetricVis plugin
-date: 2023-08-13
+date: 2023-08-14
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 ec3c46f4b5e10..50e9c87eab2cb 100644
--- a/api_docs/expression_metric.mdx
+++ b/api_docs/expression_metric.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric
title: "expressionMetric"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionMetric plugin
-date: 2023-08-13
+date: 2023-08-14
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 e986aad481157..49f37bbf78e08 100644
--- a/api_docs/expression_metric_vis.mdx
+++ b/api_docs/expression_metric_vis.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis
title: "expressionMetricVis"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionMetricVis plugin
-date: 2023-08-13
+date: 2023-08-14
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 88c8a71560cd4..ac77d91367ed0 100644
--- a/api_docs/expression_partition_vis.mdx
+++ b/api_docs/expression_partition_vis.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis
title: "expressionPartitionVis"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionPartitionVis plugin
-date: 2023-08-13
+date: 2023-08-14
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 13db162d10595..2960d2af53241 100644
--- a/api_docs/expression_repeat_image.mdx
+++ b/api_docs/expression_repeat_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage
title: "expressionRepeatImage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionRepeatImage plugin
-date: 2023-08-13
+date: 2023-08-14
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 02286a1b531b9..31245ca89351c 100644
--- a/api_docs/expression_reveal_image.mdx
+++ b/api_docs/expression_reveal_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage
title: "expressionRevealImage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionRevealImage plugin
-date: 2023-08-13
+date: 2023-08-14
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 b77e2109d4c8b..9266693d21d8f 100644
--- a/api_docs/expression_shape.mdx
+++ b/api_docs/expression_shape.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape
title: "expressionShape"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionShape plugin
-date: 2023-08-13
+date: 2023-08-14
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 46394fbffe0d1..a38d6aa1a791b 100644
--- a/api_docs/expression_tagcloud.mdx
+++ b/api_docs/expression_tagcloud.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud
title: "expressionTagcloud"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionTagcloud plugin
-date: 2023-08-13
+date: 2023-08-14
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 65d3fc9f429d1..dae84bef815dc 100644
--- a/api_docs/expression_x_y.mdx
+++ b/api_docs/expression_x_y.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY
title: "expressionXY"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionXY plugin
-date: 2023-08-13
+date: 2023-08-14
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 b543f38a6a379..b6a62e9b1891d 100644
--- a/api_docs/expressions.mdx
+++ b/api_docs/expressions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions
title: "expressions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressions plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions']
---
import expressionsObj from './expressions.devdocs.json';
diff --git a/api_docs/features.mdx b/api_docs/features.mdx
index 9139e0ecffa15..ecb06f5db3a32 100644
--- a/api_docs/features.mdx
+++ b/api_docs/features.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features
title: "features"
image: https://source.unsplash.com/400x175/?github
description: API docs for the features plugin
-date: 2023-08-13
+date: 2023-08-14
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 ce9b6bb09d84c..bcdb95bcefb4a 100644
--- a/api_docs/field_formats.mdx
+++ b/api_docs/field_formats.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats
title: "fieldFormats"
image: https://source.unsplash.com/400x175/?github
description: API docs for the fieldFormats plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats']
---
import fieldFormatsObj from './field_formats.devdocs.json';
diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx
index 4b84d809d03d2..88d2f1eb855d6 100644
--- a/api_docs/file_upload.mdx
+++ b/api_docs/file_upload.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload
title: "fileUpload"
image: https://source.unsplash.com/400x175/?github
description: API docs for the fileUpload plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload']
---
import fileUploadObj from './file_upload.devdocs.json';
diff --git a/api_docs/files.mdx b/api_docs/files.mdx
index c6c2fe1c4cb53..af4c517bd4e48 100644
--- a/api_docs/files.mdx
+++ b/api_docs/files.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files
title: "files"
image: https://source.unsplash.com/400x175/?github
description: API docs for the files plugin
-date: 2023-08-13
+date: 2023-08-14
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 d1fc1097eed6b..743c23d48be73 100644
--- a/api_docs/files_management.mdx
+++ b/api_docs/files_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement
title: "filesManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the filesManagement plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement']
---
import filesManagementObj from './files_management.devdocs.json';
diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx
index 2543fa6ba3161..919d501d6f26a 100644
--- a/api_docs/fleet.mdx
+++ b/api_docs/fleet.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet
title: "fleet"
image: https://source.unsplash.com/400x175/?github
description: API docs for the fleet plugin
-date: 2023-08-13
+date: 2023-08-14
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 449a7819af30d..12baece52b539 100644
--- a/api_docs/global_search.mdx
+++ b/api_docs/global_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch
title: "globalSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the globalSearch plugin
-date: 2023-08-13
+date: 2023-08-14
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 0f9333b1e1789..f1bf80d72db4b 100644
--- a/api_docs/guided_onboarding.mdx
+++ b/api_docs/guided_onboarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding
title: "guidedOnboarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the guidedOnboarding plugin
-date: 2023-08-13
+date: 2023-08-14
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 60463d1dc114f..ec90ae82342a6 100644
--- a/api_docs/home.mdx
+++ b/api_docs/home.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home
title: "home"
image: https://source.unsplash.com/400x175/?github
description: API docs for the home plugin
-date: 2023-08-13
+date: 2023-08-14
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 d41b0b4f114d2..f05f5416b0b1a 100644
--- a/api_docs/image_embeddable.mdx
+++ b/api_docs/image_embeddable.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable
title: "imageEmbeddable"
image: https://source.unsplash.com/400x175/?github
description: API docs for the imageEmbeddable plugin
-date: 2023-08-13
+date: 2023-08-14
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 53091ec20dfde..7a579254b1793 100644
--- a/api_docs/index_lifecycle_management.mdx
+++ b/api_docs/index_lifecycle_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement
title: "indexLifecycleManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the indexLifecycleManagement plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement']
---
import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json';
diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx
index 368b33545f671..bc978ecee51dc 100644
--- a/api_docs/index_management.mdx
+++ b/api_docs/index_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement
title: "indexManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the indexManagement plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement']
---
import indexManagementObj from './index_management.devdocs.json';
diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx
index a884fa7f5de4c..78e5119f8542d 100644
--- a/api_docs/infra.mdx
+++ b/api_docs/infra.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra
title: "infra"
image: https://source.unsplash.com/400x175/?github
description: API docs for the infra plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra']
---
import infraObj from './infra.devdocs.json';
diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx
index 8a69a0936b1be..43eec59fb7ae4 100644
--- a/api_docs/inspector.mdx
+++ b/api_docs/inspector.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector
title: "inspector"
image: https://source.unsplash.com/400x175/?github
description: API docs for the inspector plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector']
---
import inspectorObj from './inspector.devdocs.json';
diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx
index 7046e8fe3f3ba..2598bd53774e8 100644
--- a/api_docs/interactive_setup.mdx
+++ b/api_docs/interactive_setup.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup
title: "interactiveSetup"
image: https://source.unsplash.com/400x175/?github
description: API docs for the interactiveSetup plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup']
---
import interactiveSetupObj from './interactive_setup.devdocs.json';
diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx
index 0c153722241cf..990e8a707c3ea 100644
--- a/api_docs/kbn_ace.mdx
+++ b/api_docs/kbn_ace.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace
title: "@kbn/ace"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ace plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace']
---
import kbnAceObj from './kbn_ace.devdocs.json';
diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx
index cabab1635de69..5384ac8c40ede 100644
--- a/api_docs/kbn_aiops_components.mdx
+++ b/api_docs/kbn_aiops_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components
title: "@kbn/aiops-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/aiops-components plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components']
---
import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json';
diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx
index aa3964ab1b96d..d03b69fc0c4db 100644
--- a/api_docs/kbn_aiops_utils.mdx
+++ b/api_docs/kbn_aiops_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils
title: "@kbn/aiops-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/aiops-utils plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils']
---
import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json';
diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx
index 4a8eb06ed198a..8a2295e662815 100644
--- a/api_docs/kbn_alerting_state_types.mdx
+++ b/api_docs/kbn_alerting_state_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types
title: "@kbn/alerting-state-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/alerting-state-types plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types']
---
import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json';
diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx
index 576ef789698e1..f5288a5a3df06 100644
--- a/api_docs/kbn_alerts_as_data_utils.mdx
+++ b/api_docs/kbn_alerts_as_data_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils
title: "@kbn/alerts-as-data-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/alerts-as-data-utils plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils']
---
import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json';
diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx
index 670438f1f2bb2..2227d5ef5eee1 100644
--- a/api_docs/kbn_alerts_ui_shared.mdx
+++ b/api_docs/kbn_alerts_ui_shared.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared
title: "@kbn/alerts-ui-shared"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/alerts-ui-shared plugin
-date: 2023-08-13
+date: 2023-08-14
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 7ae01a2c22954..51729a36d8fb1 100644
--- a/api_docs/kbn_analytics.mdx
+++ b/api_docs/kbn_analytics.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics
title: "@kbn/analytics"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics']
---
import kbnAnalyticsObj from './kbn_analytics.devdocs.json';
diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx
index 3f35a61d1fef4..b66e5c1b0d973 100644
--- a/api_docs/kbn_analytics_client.mdx
+++ b/api_docs/kbn_analytics_client.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client
title: "@kbn/analytics-client"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-client plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client']
---
import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
index af15d7bccd9dc..c82996d08386a 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser
title: "@kbn/analytics-shippers-elastic-v3-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser']
---
import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
index a2085593a5fe7..7b866fca0071f 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common
title: "@kbn/analytics-shippers-elastic-v3-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common']
---
import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
index 09db011f3a6e9..93ec32570d4e8 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server
title: "@kbn/analytics-shippers-elastic-v3-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server']
---
import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx
index b8d115ee521d0..47a36161989d6 100644
--- a/api_docs/kbn_analytics_shippers_fullstory.mdx
+++ b/api_docs/kbn_analytics_shippers_fullstory.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory
title: "@kbn/analytics-shippers-fullstory"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-fullstory plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory']
---
import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx
index 9116ed0180465..d0448fb33658b 100644
--- a/api_docs/kbn_analytics_shippers_gainsight.mdx
+++ b/api_docs/kbn_analytics_shippers_gainsight.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight
title: "@kbn/analytics-shippers-gainsight"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-gainsight plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight']
---
import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json';
diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx
index b2390753e7b77..44417181d7e8f 100644
--- a/api_docs/kbn_apm_config_loader.mdx
+++ b/api_docs/kbn_apm_config_loader.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader
title: "@kbn/apm-config-loader"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-config-loader plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader']
---
import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json';
diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx
index 133c5a40a23f2..1118c083b3d36 100644
--- a/api_docs/kbn_apm_synthtrace.mdx
+++ b/api_docs/kbn_apm_synthtrace.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace
title: "@kbn/apm-synthtrace"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-synthtrace plugin
-date: 2023-08-13
+date: 2023-08-14
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 165eeef22b2a4..504096ae79dce 100644
--- a/api_docs/kbn_apm_synthtrace_client.mdx
+++ b/api_docs/kbn_apm_synthtrace_client.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client
title: "@kbn/apm-synthtrace-client"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-synthtrace-client plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client']
---
import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json';
diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx
index 96e4bef091b7a..56d329613133e 100644
--- a/api_docs/kbn_apm_utils.mdx
+++ b/api_docs/kbn_apm_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils
title: "@kbn/apm-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-utils plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils']
---
import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json';
diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx
index bd057afd63f5c..d62814d153f1b 100644
--- a/api_docs/kbn_axe_config.mdx
+++ b/api_docs/kbn_axe_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config
title: "@kbn/axe-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/axe-config plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config']
---
import kbnAxeConfigObj from './kbn_axe_config.devdocs.json';
diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx
index dccb8f7aa7efb..4079fc6855086 100644
--- a/api_docs/kbn_cases_components.mdx
+++ b/api_docs/kbn_cases_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components
title: "@kbn/cases-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cases-components plugin
-date: 2023-08-13
+date: 2023-08-14
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 a1178538914e7..1b814a3322949 100644
--- a/api_docs/kbn_cell_actions.mdx
+++ b/api_docs/kbn_cell_actions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions
title: "@kbn/cell-actions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cell-actions plugin
-date: 2023-08-13
+date: 2023-08-14
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 c045eeb7efdca..4ecd4c65cb498 100644
--- a/api_docs/kbn_chart_expressions_common.mdx
+++ b/api_docs/kbn_chart_expressions_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common
title: "@kbn/chart-expressions-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/chart-expressions-common plugin
-date: 2023-08-13
+date: 2023-08-14
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 751b28c8b379a..802bd2be62746 100644
--- a/api_docs/kbn_chart_icons.mdx
+++ b/api_docs/kbn_chart_icons.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons
title: "@kbn/chart-icons"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/chart-icons plugin
-date: 2023-08-13
+date: 2023-08-14
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 803f159d4c03f..6d86af733f86e 100644
--- a/api_docs/kbn_ci_stats_core.mdx
+++ b/api_docs/kbn_ci_stats_core.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core
title: "@kbn/ci-stats-core"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ci-stats-core plugin
-date: 2023-08-13
+date: 2023-08-14
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 337bec0d17813..a870d21171324 100644
--- a/api_docs/kbn_ci_stats_performance_metrics.mdx
+++ b/api_docs/kbn_ci_stats_performance_metrics.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics
title: "@kbn/ci-stats-performance-metrics"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ci-stats-performance-metrics plugin
-date: 2023-08-13
+date: 2023-08-14
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 1aa2cb2b13b6d..a0a1c256c72f2 100644
--- a/api_docs/kbn_ci_stats_reporter.mdx
+++ b/api_docs/kbn_ci_stats_reporter.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter
title: "@kbn/ci-stats-reporter"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ci-stats-reporter plugin
-date: 2023-08-13
+date: 2023-08-14
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 8bd15bef2b91e..20cde6ec2bd99 100644
--- a/api_docs/kbn_cli_dev_mode.mdx
+++ b/api_docs/kbn_cli_dev_mode.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode
title: "@kbn/cli-dev-mode"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cli-dev-mode plugin
-date: 2023-08-13
+date: 2023-08-14
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 4f51899985240..761e21d4b8b4a 100644
--- a/api_docs/kbn_code_editor.mdx
+++ b/api_docs/kbn_code_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor
title: "@kbn/code-editor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/code-editor plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor']
---
import kbnCodeEditorObj from './kbn_code_editor.devdocs.json';
diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx
index 6369b03521c14..246e8e5130b46 100644
--- a/api_docs/kbn_code_editor_mocks.mdx
+++ b/api_docs/kbn_code_editor_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks
title: "@kbn/code-editor-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/code-editor-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks']
---
import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json';
diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx
index e775cac3e38fd..01ef8ebf47619 100644
--- a/api_docs/kbn_coloring.mdx
+++ b/api_docs/kbn_coloring.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring
title: "@kbn/coloring"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/coloring plugin
-date: 2023-08-13
+date: 2023-08-14
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 365ff65c140f1..7616d423f5bd9 100644
--- a/api_docs/kbn_config.mdx
+++ b/api_docs/kbn_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config
title: "@kbn/config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/config plugin
-date: 2023-08-13
+date: 2023-08-14
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 0506a84234943..e076c29113ab4 100644
--- a/api_docs/kbn_config_mocks.mdx
+++ b/api_docs/kbn_config_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks
title: "@kbn/config-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/config-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks']
---
import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json';
diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx
index d69c834cc26c8..bad8bc335ba3c 100644
--- a/api_docs/kbn_config_schema.mdx
+++ b/api_docs/kbn_config_schema.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema
title: "@kbn/config-schema"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/config-schema plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema']
---
import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json';
diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx
index 0d3d210653faa..b5898f65d38d4 100644
--- a/api_docs/kbn_content_management_content_editor.mdx
+++ b/api_docs/kbn_content_management_content_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor
title: "@kbn/content-management-content-editor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-content-editor plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor']
---
import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json';
diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx
index 17b481f42e658..dfa962ec2d50c 100644
--- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx
+++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view
title: "@kbn/content-management-tabbed-table-list-view"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-tabbed-table-list-view plugin
-date: 2023-08-13
+date: 2023-08-14
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 3b60526d5e9de..0c2051fcbcbe2 100644
--- a/api_docs/kbn_content_management_table_list_view.mdx
+++ b/api_docs/kbn_content_management_table_list_view.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view
title: "@kbn/content-management-table-list-view"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-table-list-view plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view']
---
import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json';
diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx
index 62125d8a9cf04..f44350fda15f3 100644
--- a/api_docs/kbn_content_management_table_list_view_table.mdx
+++ b/api_docs/kbn_content_management_table_list_view_table.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table
title: "@kbn/content-management-table-list-view-table"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-table-list-view-table plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table']
---
import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json';
diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx
index 65736cf0004c8..47ee4a3d21c56 100644
--- a/api_docs/kbn_content_management_utils.mdx
+++ b/api_docs/kbn_content_management_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils
title: "@kbn/content-management-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-utils plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils']
---
import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx
index 7352e484eb784..c4b84520af9a5 100644
--- a/api_docs/kbn_core_analytics_browser.mdx
+++ b/api_docs/kbn_core_analytics_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser
title: "@kbn/core-analytics-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 33930dc1a4eda..88321f2b51d41 100644
--- a/api_docs/kbn_core_analytics_browser_internal.mdx
+++ b/api_docs/kbn_core_analytics_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal
title: "@kbn/core-analytics-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-browser-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 47fd5322504e9..02b2e7fffab82 100644
--- a/api_docs/kbn_core_analytics_browser_mocks.mdx
+++ b/api_docs/kbn_core_analytics_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks
title: "@kbn/core-analytics-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks']
---
import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx
index e92d5fac5788b..b11fd1d1cec1b 100644
--- a/api_docs/kbn_core_analytics_server.mdx
+++ b/api_docs/kbn_core_analytics_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server
title: "@kbn/core-analytics-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 afa3529a28a24..df9c8fbe56d31 100644
--- a/api_docs/kbn_core_analytics_server_internal.mdx
+++ b/api_docs/kbn_core_analytics_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal
title: "@kbn/core-analytics-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 a7c1612a0d1ab..0c4ef48581094 100644
--- a/api_docs/kbn_core_analytics_server_mocks.mdx
+++ b/api_docs/kbn_core_analytics_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks
title: "@kbn/core-analytics-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 07bb7ef0dea3d..c37bba3efa1e2 100644
--- a/api_docs/kbn_core_application_browser.mdx
+++ b/api_docs/kbn_core_application_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser
title: "@kbn/core-application-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 99ec611fbfa05..d5f719ee9427a 100644
--- a/api_docs/kbn_core_application_browser_internal.mdx
+++ b/api_docs/kbn_core_application_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal
title: "@kbn/core-application-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-browser-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 0d926286d2fd5..aa30608970a7b 100644
--- a/api_docs/kbn_core_application_browser_mocks.mdx
+++ b/api_docs/kbn_core_application_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks
title: "@kbn/core-application-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 58f9057e09540..491e7f2bfe8af 100644
--- a/api_docs/kbn_core_application_common.mdx
+++ b/api_docs/kbn_core_application_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common
title: "@kbn/core-application-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-common plugin
-date: 2023-08-13
+date: 2023-08-14
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 4f2114d833af8..93acd337012e2 100644
--- a/api_docs/kbn_core_apps_browser_internal.mdx
+++ b/api_docs/kbn_core_apps_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal
title: "@kbn/core-apps-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-apps-browser-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 845d24e42ba7b..1b25087729d1b 100644
--- a/api_docs/kbn_core_apps_browser_mocks.mdx
+++ b/api_docs/kbn_core_apps_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks
title: "@kbn/core-apps-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-apps-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 b954dea8c3488..ef1a33f748ffb 100644
--- a/api_docs/kbn_core_apps_server_internal.mdx
+++ b/api_docs/kbn_core_apps_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal
title: "@kbn/core-apps-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-apps-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 be5897c6a943c..1d9d0977d3569 100644
--- a/api_docs/kbn_core_base_browser_mocks.mdx
+++ b/api_docs/kbn_core_base_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks
title: "@kbn/core-base-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 7802681719fa2..164c9cac10b61 100644
--- a/api_docs/kbn_core_base_common.mdx
+++ b/api_docs/kbn_core_base_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common
title: "@kbn/core-base-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-common plugin
-date: 2023-08-13
+date: 2023-08-14
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 5dff1433594d8..f8eaaf66109b8 100644
--- a/api_docs/kbn_core_base_server_internal.mdx
+++ b/api_docs/kbn_core_base_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal
title: "@kbn/core-base-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 973ca2adc627d..a0b4ec03f7ca9 100644
--- a/api_docs/kbn_core_base_server_mocks.mdx
+++ b/api_docs/kbn_core_base_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks
title: "@kbn/core-base-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 b28d16a49b88c..43f5294c3f09b 100644
--- a/api_docs/kbn_core_capabilities_browser_mocks.mdx
+++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks
title: "@kbn/core-capabilities-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 fda02f8c41745..311cde6c47eea 100644
--- a/api_docs/kbn_core_capabilities_common.mdx
+++ b/api_docs/kbn_core_capabilities_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common
title: "@kbn/core-capabilities-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-common plugin
-date: 2023-08-13
+date: 2023-08-14
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 f76b22dea47a8..f1610eb4b8ad9 100644
--- a/api_docs/kbn_core_capabilities_server.mdx
+++ b/api_docs/kbn_core_capabilities_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server
title: "@kbn/core-capabilities-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 2c575ccc89728..7bea44873c65f 100644
--- a/api_docs/kbn_core_capabilities_server_mocks.mdx
+++ b/api_docs/kbn_core_capabilities_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks
title: "@kbn/core-capabilities-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 c151dab5291f8..056422f072b5e 100644
--- a/api_docs/kbn_core_chrome_browser.mdx
+++ b/api_docs/kbn_core_chrome_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser
title: "@kbn/core-chrome-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-chrome-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 81f7e7fc249b3..7021e3c316cd0 100644
--- a/api_docs/kbn_core_chrome_browser_mocks.mdx
+++ b/api_docs/kbn_core_chrome_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks
title: "@kbn/core-chrome-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-chrome-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 498341ea0b662..d668af8c99669 100644
--- a/api_docs/kbn_core_config_server_internal.mdx
+++ b/api_docs/kbn_core_config_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal
title: "@kbn/core-config-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-config-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 7bd6f13f05043..8e3b3f7f60d4c 100644
--- a/api_docs/kbn_core_custom_branding_browser.mdx
+++ b/api_docs/kbn_core_custom_branding_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser
title: "@kbn/core-custom-branding-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 53a898adb91cb..226a283596d0f 100644
--- a/api_docs/kbn_core_custom_branding_browser_internal.mdx
+++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal
title: "@kbn/core-custom-branding-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-browser-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 21cb7b0db6b8d..59c3f93a05c7b 100644
--- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx
+++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks
title: "@kbn/core-custom-branding-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 8cb23fce3e749..c54680157ab8d 100644
--- a/api_docs/kbn_core_custom_branding_common.mdx
+++ b/api_docs/kbn_core_custom_branding_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common
title: "@kbn/core-custom-branding-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-common plugin
-date: 2023-08-13
+date: 2023-08-14
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 cef442996b1d3..043e5a90555c2 100644
--- a/api_docs/kbn_core_custom_branding_server.mdx
+++ b/api_docs/kbn_core_custom_branding_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server
title: "@kbn/core-custom-branding-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 10c0589c24bbb..7fe69a9394fd9 100644
--- a/api_docs/kbn_core_custom_branding_server_internal.mdx
+++ b/api_docs/kbn_core_custom_branding_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal
title: "@kbn/core-custom-branding-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 96321fb994363..82a6f381934a8 100644
--- a/api_docs/kbn_core_custom_branding_server_mocks.mdx
+++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks
title: "@kbn/core-custom-branding-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 470f113455dbd..46a65274c578e 100644
--- a/api_docs/kbn_core_deprecations_browser.mdx
+++ b/api_docs/kbn_core_deprecations_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser
title: "@kbn/core-deprecations-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 bfeaa7af7d08b..da3b242e3a7a4 100644
--- a/api_docs/kbn_core_deprecations_browser_internal.mdx
+++ b/api_docs/kbn_core_deprecations_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal
title: "@kbn/core-deprecations-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-browser-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 c3f3ad79859ee..0bd6e4d719990 100644
--- a/api_docs/kbn_core_deprecations_browser_mocks.mdx
+++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks
title: "@kbn/core-deprecations-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 f389ba94ecb2d..867e60b08852c 100644
--- a/api_docs/kbn_core_deprecations_common.mdx
+++ b/api_docs/kbn_core_deprecations_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common
title: "@kbn/core-deprecations-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-common plugin
-date: 2023-08-13
+date: 2023-08-14
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 74e822ca01dfb..6507dffcb150c 100644
--- a/api_docs/kbn_core_deprecations_server.mdx
+++ b/api_docs/kbn_core_deprecations_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server
title: "@kbn/core-deprecations-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 53f5f032340af..27bcf1ecb8871 100644
--- a/api_docs/kbn_core_deprecations_server_internal.mdx
+++ b/api_docs/kbn_core_deprecations_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal
title: "@kbn/core-deprecations-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 29f89221002fc..579db53a0f84d 100644
--- a/api_docs/kbn_core_deprecations_server_mocks.mdx
+++ b/api_docs/kbn_core_deprecations_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks
title: "@kbn/core-deprecations-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 07df8671f6d67..25a67a053ff7c 100644
--- a/api_docs/kbn_core_doc_links_browser.mdx
+++ b/api_docs/kbn_core_doc_links_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser
title: "@kbn/core-doc-links-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 f368a2ab557e0..7c6ded18d638d 100644
--- a/api_docs/kbn_core_doc_links_browser_mocks.mdx
+++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks
title: "@kbn/core-doc-links-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 dd8229bc76ac3..e9e953b4e894b 100644
--- a/api_docs/kbn_core_doc_links_server.mdx
+++ b/api_docs/kbn_core_doc_links_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server
title: "@kbn/core-doc-links-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 36029ae2542a5..c9aa40682d21b 100644
--- a/api_docs/kbn_core_doc_links_server_mocks.mdx
+++ b/api_docs/kbn_core_doc_links_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks
title: "@kbn/core-doc-links-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 c48034b0d0b86..d1c9ad0ac8c78 100644
--- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx
+++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal
title: "@kbn/core-elasticsearch-client-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 cdae4b0968fda..2acf871dddedb 100644
--- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx
+++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks
title: "@kbn/core-elasticsearch-client-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 4df7ed5fc3bb7..0f217c3d46e9a 100644
--- a/api_docs/kbn_core_elasticsearch_server.mdx
+++ b/api_docs/kbn_core_elasticsearch_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server
title: "@kbn/core-elasticsearch-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 65b4c3ec0d331..fa5027c1164f7 100644
--- a/api_docs/kbn_core_elasticsearch_server_internal.mdx
+++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal
title: "@kbn/core-elasticsearch-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 805e37203dd94..837900fbecbbe 100644
--- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx
+++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks
title: "@kbn/core-elasticsearch-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 53b0caaf81c9f..40e925d6cb499 100644
--- a/api_docs/kbn_core_environment_server_internal.mdx
+++ b/api_docs/kbn_core_environment_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal
title: "@kbn/core-environment-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-environment-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 7d06d768625ba..49a2f19435431 100644
--- a/api_docs/kbn_core_environment_server_mocks.mdx
+++ b/api_docs/kbn_core_environment_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks
title: "@kbn/core-environment-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-environment-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 429e43154b959..9c2d18f20a1cf 100644
--- a/api_docs/kbn_core_execution_context_browser.mdx
+++ b/api_docs/kbn_core_execution_context_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser
title: "@kbn/core-execution-context-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 2b0d34856ce47..033f0a74371be 100644
--- a/api_docs/kbn_core_execution_context_browser_internal.mdx
+++ b/api_docs/kbn_core_execution_context_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal
title: "@kbn/core-execution-context-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-browser-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 f0f0e8c24c3ff..b8c93e3fb653f 100644
--- a/api_docs/kbn_core_execution_context_browser_mocks.mdx
+++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks
title: "@kbn/core-execution-context-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 f8e044af54fe8..51069800e502a 100644
--- a/api_docs/kbn_core_execution_context_common.mdx
+++ b/api_docs/kbn_core_execution_context_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common
title: "@kbn/core-execution-context-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-common plugin
-date: 2023-08-13
+date: 2023-08-14
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 51bd5f9fa3a72..67420e1d7d42a 100644
--- a/api_docs/kbn_core_execution_context_server.mdx
+++ b/api_docs/kbn_core_execution_context_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server
title: "@kbn/core-execution-context-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 e1a5d2741b4ce..b5a97a9c0e855 100644
--- a/api_docs/kbn_core_execution_context_server_internal.mdx
+++ b/api_docs/kbn_core_execution_context_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal
title: "@kbn/core-execution-context-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 18343f0882da8..8f27aeff0848f 100644
--- a/api_docs/kbn_core_execution_context_server_mocks.mdx
+++ b/api_docs/kbn_core_execution_context_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks
title: "@kbn/core-execution-context-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 e74f25f471d29..dd84ef10759de 100644
--- a/api_docs/kbn_core_fatal_errors_browser.mdx
+++ b/api_docs/kbn_core_fatal_errors_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser
title: "@kbn/core-fatal-errors-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-fatal-errors-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 26dabfcf66bf4..d98986cf8ce5a 100644
--- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx
+++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks
title: "@kbn/core-fatal-errors-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 1e616efbe2583..124357ce4a71d 100644
--- a/api_docs/kbn_core_http_browser.mdx
+++ b/api_docs/kbn_core_http_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser
title: "@kbn/core-http-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 8d9a6e19b4a10..d29e2fc28f897 100644
--- a/api_docs/kbn_core_http_browser_internal.mdx
+++ b/api_docs/kbn_core_http_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal
title: "@kbn/core-http-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-browser-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 0d32403bf679c..6dd38761fe75c 100644
--- a/api_docs/kbn_core_http_browser_mocks.mdx
+++ b/api_docs/kbn_core_http_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks
title: "@kbn/core-http-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 ddf4f10972ff9..eb1a4b6afff5f 100644
--- a/api_docs/kbn_core_http_common.mdx
+++ b/api_docs/kbn_core_http_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common
title: "@kbn/core-http-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-common plugin
-date: 2023-08-13
+date: 2023-08-14
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 fa8ce7fb7b85e..1e07416e85f27 100644
--- a/api_docs/kbn_core_http_context_server_mocks.mdx
+++ b/api_docs/kbn_core_http_context_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks
title: "@kbn/core-http-context-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-context-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 52c09e0ded6d5..c8e20fec38644 100644
--- a/api_docs/kbn_core_http_request_handler_context_server.mdx
+++ b/api_docs/kbn_core_http_request_handler_context_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server
title: "@kbn/core-http-request-handler-context-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-request-handler-context-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 6633d2e91aee4..51f1626f0dd50 100644
--- a/api_docs/kbn_core_http_resources_server.mdx
+++ b/api_docs/kbn_core_http_resources_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server
title: "@kbn/core-http-resources-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-resources-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 346bba3c5d830..5dd7ae73c2ca0 100644
--- a/api_docs/kbn_core_http_resources_server_internal.mdx
+++ b/api_docs/kbn_core_http_resources_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal
title: "@kbn/core-http-resources-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-resources-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 511f499e573d1..74c97035e7ca3 100644
--- a/api_docs/kbn_core_http_resources_server_mocks.mdx
+++ b/api_docs/kbn_core_http_resources_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks
title: "@kbn/core-http-resources-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-resources-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 3a4d759c82d32..2fd2c5571665a 100644
--- a/api_docs/kbn_core_http_router_server_internal.mdx
+++ b/api_docs/kbn_core_http_router_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal
title: "@kbn/core-http-router-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-router-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 639ea3763fd3c..2a0fc8266fd0a 100644
--- a/api_docs/kbn_core_http_router_server_mocks.mdx
+++ b/api_docs/kbn_core_http_router_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks
title: "@kbn/core-http-router-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-router-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks']
---
import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx
index 30604529ee256..242467416fc91 100644
--- a/api_docs/kbn_core_http_server.mdx
+++ b/api_docs/kbn_core_http_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server
title: "@kbn/core-http-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 c8e4ae451edd7..44a2cb41beb31 100644
--- a/api_docs/kbn_core_http_server_internal.mdx
+++ b/api_docs/kbn_core_http_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal
title: "@kbn/core-http-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 e2a387ab7e3ce..639692a55c973 100644
--- a/api_docs/kbn_core_http_server_mocks.mdx
+++ b/api_docs/kbn_core_http_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks
title: "@kbn/core-http-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 e30080d9a515e..dcc8d2d6f855c 100644
--- a/api_docs/kbn_core_i18n_browser.mdx
+++ b/api_docs/kbn_core_i18n_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser
title: "@kbn/core-i18n-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 337db90717bfa..fc35e2916cdc5 100644
--- a/api_docs/kbn_core_i18n_browser_mocks.mdx
+++ b/api_docs/kbn_core_i18n_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks
title: "@kbn/core-i18n-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 273743e0f1cf4..31c25b3ab5550 100644
--- a/api_docs/kbn_core_i18n_server.mdx
+++ b/api_docs/kbn_core_i18n_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server
title: "@kbn/core-i18n-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 a39e869fb1597..f82d6c9669de8 100644
--- a/api_docs/kbn_core_i18n_server_internal.mdx
+++ b/api_docs/kbn_core_i18n_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal
title: "@kbn/core-i18n-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 bea2323b2d903..53f6f9d4e6c9b 100644
--- a/api_docs/kbn_core_i18n_server_mocks.mdx
+++ b/api_docs/kbn_core_i18n_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks
title: "@kbn/core-i18n-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 18c8b3b91e339..9713f2421c0de 100644
--- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx
+++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks
title: "@kbn/core-injected-metadata-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 5f7562b549bbd..381cdd6437dbb 100644
--- a/api_docs/kbn_core_integrations_browser_internal.mdx
+++ b/api_docs/kbn_core_integrations_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal
title: "@kbn/core-integrations-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-integrations-browser-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 b4584c870d9e6..1f4d0affd0beb 100644
--- a/api_docs/kbn_core_integrations_browser_mocks.mdx
+++ b/api_docs/kbn_core_integrations_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks
title: "@kbn/core-integrations-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-integrations-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 d484afbf3af2d..fad0248c5d0a9 100644
--- a/api_docs/kbn_core_lifecycle_browser.mdx
+++ b/api_docs/kbn_core_lifecycle_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser
title: "@kbn/core-lifecycle-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 947a0f9d924ef..740f1c16ba0e0 100644
--- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx
+++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks
title: "@kbn/core-lifecycle-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 c94148fe35263..f2233632dfee8 100644
--- a/api_docs/kbn_core_lifecycle_server.mdx
+++ b/api_docs/kbn_core_lifecycle_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server
title: "@kbn/core-lifecycle-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 9fa26b23976f1..6a3712da9faf0 100644
--- a/api_docs/kbn_core_lifecycle_server_mocks.mdx
+++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks
title: "@kbn/core-lifecycle-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 050d6a4ba670e..be51ee6d645e2 100644
--- a/api_docs/kbn_core_logging_browser_mocks.mdx
+++ b/api_docs/kbn_core_logging_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks
title: "@kbn/core-logging-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 eb8c7dc9619b7..84e4ba73afb2a 100644
--- a/api_docs/kbn_core_logging_common_internal.mdx
+++ b/api_docs/kbn_core_logging_common_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal
title: "@kbn/core-logging-common-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-common-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 69c878e53d3bd..9b4486c371853 100644
--- a/api_docs/kbn_core_logging_server.mdx
+++ b/api_docs/kbn_core_logging_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server
title: "@kbn/core-logging-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 00dd9178a90cb..db633a773bb08 100644
--- a/api_docs/kbn_core_logging_server_internal.mdx
+++ b/api_docs/kbn_core_logging_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal
title: "@kbn/core-logging-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 86ee49b79d160..e0c415d680a23 100644
--- a/api_docs/kbn_core_logging_server_mocks.mdx
+++ b/api_docs/kbn_core_logging_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks
title: "@kbn/core-logging-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 fdbd8c9d69956..00354370e2600 100644
--- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx
+++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal
title: "@kbn/core-metrics-collectors-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-collectors-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 416471d57a464..2b35e4c63f9f4 100644
--- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx
+++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks
title: "@kbn/core-metrics-collectors-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 99adbc4d94660..52f822eaff515 100644
--- a/api_docs/kbn_core_metrics_server.mdx
+++ b/api_docs/kbn_core_metrics_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server
title: "@kbn/core-metrics-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 6c91ff5a8619a..0f887a083a4fc 100644
--- a/api_docs/kbn_core_metrics_server_internal.mdx
+++ b/api_docs/kbn_core_metrics_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal
title: "@kbn/core-metrics-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 c92e6d7de3a2d..055d7cb649d46 100644
--- a/api_docs/kbn_core_metrics_server_mocks.mdx
+++ b/api_docs/kbn_core_metrics_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks
title: "@kbn/core-metrics-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 a37135397d005..6b029fa9bbf47 100644
--- a/api_docs/kbn_core_mount_utils_browser.mdx
+++ b/api_docs/kbn_core_mount_utils_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser
title: "@kbn/core-mount-utils-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-mount-utils-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 4cfe7b6585b97..a96d6180d4270 100644
--- a/api_docs/kbn_core_node_server.mdx
+++ b/api_docs/kbn_core_node_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server
title: "@kbn/core-node-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-node-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 201a2f074b33f..3b99b3571ee3b 100644
--- a/api_docs/kbn_core_node_server_internal.mdx
+++ b/api_docs/kbn_core_node_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal
title: "@kbn/core-node-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-node-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 1f8c782e442ab..eba9fb646e538 100644
--- a/api_docs/kbn_core_node_server_mocks.mdx
+++ b/api_docs/kbn_core_node_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks
title: "@kbn/core-node-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-node-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 fe8dc3230c26d..bae99044d202f 100644
--- a/api_docs/kbn_core_notifications_browser.mdx
+++ b/api_docs/kbn_core_notifications_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser
title: "@kbn/core-notifications-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-notifications-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 dbe0eaf546061..089d4a88cfd64 100644
--- a/api_docs/kbn_core_notifications_browser_internal.mdx
+++ b/api_docs/kbn_core_notifications_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal
title: "@kbn/core-notifications-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-notifications-browser-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 1c931ebe6f832..6885e63f3e3ae 100644
--- a/api_docs/kbn_core_notifications_browser_mocks.mdx
+++ b/api_docs/kbn_core_notifications_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks
title: "@kbn/core-notifications-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-notifications-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 0cab7aafca56a..1d88404c88b82 100644
--- a/api_docs/kbn_core_overlays_browser.mdx
+++ b/api_docs/kbn_core_overlays_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser
title: "@kbn/core-overlays-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-overlays-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 fb1d8eaaff33b..1d7744efe8bea 100644
--- a/api_docs/kbn_core_overlays_browser_internal.mdx
+++ b/api_docs/kbn_core_overlays_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal
title: "@kbn/core-overlays-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-overlays-browser-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 8231feb371ce1..1d117a4c1d09f 100644
--- a/api_docs/kbn_core_overlays_browser_mocks.mdx
+++ b/api_docs/kbn_core_overlays_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks
title: "@kbn/core-overlays-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-overlays-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 8e2afc2b0f597..5738a5220b492 100644
--- a/api_docs/kbn_core_plugins_browser.mdx
+++ b/api_docs/kbn_core_plugins_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser
title: "@kbn/core-plugins-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 1abe6f8b93dc6..a9c7d61cf3c6b 100644
--- a/api_docs/kbn_core_plugins_browser_mocks.mdx
+++ b/api_docs/kbn_core_plugins_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks
title: "@kbn/core-plugins-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks']
---
import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx
index 8e36c2dceceda..cde7e04eaec5a 100644
--- a/api_docs/kbn_core_plugins_server.mdx
+++ b/api_docs/kbn_core_plugins_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server
title: "@kbn/core-plugins-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 450281a4f2d9c..bc601ca5e2e2c 100644
--- a/api_docs/kbn_core_plugins_server_mocks.mdx
+++ b/api_docs/kbn_core_plugins_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks
title: "@kbn/core-plugins-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 e15e3e98bba83..74b49cbe0bc0e 100644
--- a/api_docs/kbn_core_preboot_server.mdx
+++ b/api_docs/kbn_core_preboot_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server
title: "@kbn/core-preboot-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-preboot-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 107425ea8d046..bffbfd135a079 100644
--- a/api_docs/kbn_core_preboot_server_mocks.mdx
+++ b/api_docs/kbn_core_preboot_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks
title: "@kbn/core-preboot-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-preboot-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 5712d838dcd15..859beec1afa16 100644
--- a/api_docs/kbn_core_rendering_browser_mocks.mdx
+++ b/api_docs/kbn_core_rendering_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks
title: "@kbn/core-rendering-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-rendering-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 6755da9cdeeab..a6eeac381726b 100644
--- a/api_docs/kbn_core_rendering_server_internal.mdx
+++ b/api_docs/kbn_core_rendering_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal
title: "@kbn/core-rendering-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-rendering-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 f46cedc17826e..1c2bf2b3494cb 100644
--- a/api_docs/kbn_core_rendering_server_mocks.mdx
+++ b/api_docs/kbn_core_rendering_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks
title: "@kbn/core-rendering-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-rendering-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 b4c1cd24b38df..c519f7303168f 100644
--- a/api_docs/kbn_core_root_server_internal.mdx
+++ b/api_docs/kbn_core_root_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal
title: "@kbn/core-root-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-root-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 9147fa74815e9..f3167c5ee8093 100644
--- a/api_docs/kbn_core_saved_objects_api_browser.mdx
+++ b/api_docs/kbn_core_saved_objects_api_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser
title: "@kbn/core-saved-objects-api-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 17403bba3bd29..34b9e9e8896b1 100644
--- a/api_docs/kbn_core_saved_objects_api_server.mdx
+++ b/api_docs/kbn_core_saved_objects_api_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server
title: "@kbn/core-saved-objects-api-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 2ca98ab7f12a4..222d66943e6e7 100644
--- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks
title: "@kbn/core-saved-objects-api-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 ca436ae170a16..3d794274ce45b 100644
--- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal
title: "@kbn/core-saved-objects-base-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-base-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 45e5c114c42ef..9d55291a90ded 100644
--- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks
title: "@kbn/core-saved-objects-base-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 df9dc11e979a3..d4e0201b2b1cc 100644
--- a/api_docs/kbn_core_saved_objects_browser.mdx
+++ b/api_docs/kbn_core_saved_objects_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser
title: "@kbn/core-saved-objects-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 6376c338eb7f8..b30e0f9a606ba 100644
--- a/api_docs/kbn_core_saved_objects_browser_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal
title: "@kbn/core-saved-objects-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-browser-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 a7ee32a61751b..e7db768f37c41 100644
--- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks
title: "@kbn/core-saved-objects-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 6bee7b4c3bc83..4eeae8f4ea269 100644
--- a/api_docs/kbn_core_saved_objects_common.mdx
+++ b/api_docs/kbn_core_saved_objects_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common
title: "@kbn/core-saved-objects-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-common plugin
-date: 2023-08-13
+date: 2023-08-14
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 27a119ec27a98..7510dd11ad002 100644
--- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal
title: "@kbn/core-saved-objects-import-export-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 f4648d837af6f..85f50f732d09b 100644
--- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks
title: "@kbn/core-saved-objects-import-export-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 4ae40b47b7bb5..6bba7ad7b4d4d 100644
--- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal
title: "@kbn/core-saved-objects-migration-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 3595a78035f32..2acfe284aaa0b 100644
--- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks
title: "@kbn/core-saved-objects-migration-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 36137d1f5119f..c8545d6c436fa 100644
--- a/api_docs/kbn_core_saved_objects_server.mdx
+++ b/api_docs/kbn_core_saved_objects_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server
title: "@kbn/core-saved-objects-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 e97ee0fc44897..f8bef1c7c0d36 100644
--- a/api_docs/kbn_core_saved_objects_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal
title: "@kbn/core-saved-objects-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 10ed776604d22..b0f30590cbe4f 100644
--- a/api_docs/kbn_core_saved_objects_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks
title: "@kbn/core-saved-objects-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 8ab9abb8bda5a..e2460624f0ce3 100644
--- a/api_docs/kbn_core_saved_objects_utils_server.mdx
+++ b/api_docs/kbn_core_saved_objects_utils_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server
title: "@kbn/core-saved-objects-utils-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-utils-server plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server']
---
import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json';
diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx
index 4b87a45dd5bae..5d4d3930d3b18 100644
--- a/api_docs/kbn_core_status_common.mdx
+++ b/api_docs/kbn_core_status_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common
title: "@kbn/core-status-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-common plugin
-date: 2023-08-13
+date: 2023-08-14
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 56a77898e28c0..e2a73177084cf 100644
--- a/api_docs/kbn_core_status_common_internal.mdx
+++ b/api_docs/kbn_core_status_common_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal
title: "@kbn/core-status-common-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-common-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 79e3cf2ada4e9..2e831a9b97b20 100644
--- a/api_docs/kbn_core_status_server.mdx
+++ b/api_docs/kbn_core_status_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server
title: "@kbn/core-status-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 c892ce9146cf0..d9e345f44c476 100644
--- a/api_docs/kbn_core_status_server_internal.mdx
+++ b/api_docs/kbn_core_status_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal
title: "@kbn/core-status-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 b67079204fc9c..94b7ec147df9e 100644
--- a/api_docs/kbn_core_status_server_mocks.mdx
+++ b/api_docs/kbn_core_status_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks
title: "@kbn/core-status-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 d6c01ac23a577..616908041be55 100644
--- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx
+++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters
title: "@kbn/core-test-helpers-deprecations-getters"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin
-date: 2023-08-13
+date: 2023-08-14
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 f8f77bf956eda..f086d7912a899 100644
--- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx
+++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser
title: "@kbn/core-test-helpers-http-setup-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 25bf7e64e6943..58a223618b859 100644
--- a/api_docs/kbn_core_test_helpers_kbn_server.mdx
+++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server
title: "@kbn/core-test-helpers-kbn-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-kbn-server plugin
-date: 2023-08-13
+date: 2023-08-14
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_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx
index 0a0454fa7e9eb..feb1fd0fb50e6 100644
--- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx
+++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer
title: "@kbn/core-test-helpers-so-type-serializer"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin
-date: 2023-08-13
+date: 2023-08-14
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 7358e3589f8e1..e2bc75e8fee26 100644
--- a/api_docs/kbn_core_test_helpers_test_utils.mdx
+++ b/api_docs/kbn_core_test_helpers_test_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils
title: "@kbn/core-test-helpers-test-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-test-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 af8e8caacc18d..c8aa81cd81b58 100644
--- a/api_docs/kbn_core_theme_browser.mdx
+++ b/api_docs/kbn_core_theme_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser
title: "@kbn/core-theme-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-theme-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 408f79e6930bb..b407782e900c3 100644
--- a/api_docs/kbn_core_theme_browser_mocks.mdx
+++ b/api_docs/kbn_core_theme_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks
title: "@kbn/core-theme-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-theme-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 d9c0282097d9b..c947a948f7649 100644
--- a/api_docs/kbn_core_ui_settings_browser.mdx
+++ b/api_docs/kbn_core_ui_settings_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser
title: "@kbn/core-ui-settings-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 f92761be0aedb..afcced69ef796 100644
--- a/api_docs/kbn_core_ui_settings_browser_internal.mdx
+++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal
title: "@kbn/core-ui-settings-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-browser-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 28ac5389f8dff..18a9b178798c7 100644
--- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx
+++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks
title: "@kbn/core-ui-settings-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-browser-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 72bab55e3ab60..93dda9bcf1bfd 100644
--- a/api_docs/kbn_core_ui_settings_common.mdx
+++ b/api_docs/kbn_core_ui_settings_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common
title: "@kbn/core-ui-settings-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-common plugin
-date: 2023-08-13
+date: 2023-08-14
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 e586aab83eca7..4cee2aabd2455 100644
--- a/api_docs/kbn_core_ui_settings_server.mdx
+++ b/api_docs/kbn_core_ui_settings_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server
title: "@kbn/core-ui-settings-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 aade227571ec2..05ee66d45bf0d 100644
--- a/api_docs/kbn_core_ui_settings_server_internal.mdx
+++ b/api_docs/kbn_core_ui_settings_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal
title: "@kbn/core-ui-settings-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 782fe1b6203a2..e798d9b1f1fa8 100644
--- a/api_docs/kbn_core_ui_settings_server_mocks.mdx
+++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks
title: "@kbn/core-ui-settings-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 d0a95463ae321..2b6a6270c84fa 100644
--- a/api_docs/kbn_core_usage_data_server.mdx
+++ b/api_docs/kbn_core_usage_data_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server
title: "@kbn/core-usage-data-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-usage-data-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 020a7dedcd6d3..7dd76278ddbab 100644
--- a/api_docs/kbn_core_usage_data_server_internal.mdx
+++ b/api_docs/kbn_core_usage_data_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal
title: "@kbn/core-usage-data-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-usage-data-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
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 d2694f33785b9..8f73e165162d6 100644
--- a/api_docs/kbn_core_usage_data_server_mocks.mdx
+++ b/api_docs/kbn_core_usage_data_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks
title: "@kbn/core-usage-data-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-usage-data-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks']
---
import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx
index 6eb336f8f14b8..dee4289bc0566 100644
--- a/api_docs/kbn_core_user_settings_server.mdx
+++ b/api_docs/kbn_core_user_settings_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server
title: "@kbn/core-user-settings-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-user-settings-server plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server']
---
import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json';
diff --git a/api_docs/kbn_core_user_settings_server_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx
index 81335f262794a..f2a20d74a06c6 100644
--- a/api_docs/kbn_core_user_settings_server_internal.mdx
+++ b/api_docs/kbn_core_user_settings_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal
title: "@kbn/core-user-settings-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-user-settings-server-internal plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal']
---
import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx
index aeccb6d1e5812..e0d37e9ad00fd 100644
--- a/api_docs/kbn_core_user_settings_server_mocks.mdx
+++ b/api_docs/kbn_core_user_settings_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks
title: "@kbn/core-user-settings-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-user-settings-server-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 7c845cb22aff8..75aa743eaf9c2 100644
--- a/api_docs/kbn_crypto.mdx
+++ b/api_docs/kbn_crypto.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto
title: "@kbn/crypto"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/crypto plugin
-date: 2023-08-13
+date: 2023-08-14
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 bc4d281a5d3f5..7f8b335a8cda7 100644
--- a/api_docs/kbn_crypto_browser.mdx
+++ b/api_docs/kbn_crypto_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser
title: "@kbn/crypto-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/crypto-browser plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser']
---
import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json';
diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx
index 74b8d37da61dd..27c4f292d9967 100644
--- a/api_docs/kbn_cypress_config.mdx
+++ b/api_docs/kbn_cypress_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config
title: "@kbn/cypress-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cypress-config plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config']
---
import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json';
diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx
index 7527086301de7..7126b3ea9e67b 100644
--- a/api_docs/kbn_data_service.mdx
+++ b/api_docs/kbn_data_service.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service
title: "@kbn/data-service"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/data-service plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service']
---
import kbnDataServiceObj from './kbn_data_service.devdocs.json';
diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx
index ae904b66fbcd9..b1daffbd5dfa2 100644
--- a/api_docs/kbn_datemath.mdx
+++ b/api_docs/kbn_datemath.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath
title: "@kbn/datemath"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/datemath plugin
-date: 2023-08-13
+date: 2023-08-14
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 4f1254f871867..ab07ed38bbb19 100644
--- a/api_docs/kbn_deeplinks_analytics.mdx
+++ b/api_docs/kbn_deeplinks_analytics.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics
title: "@kbn/deeplinks-analytics"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-analytics plugin
-date: 2023-08-13
+date: 2023-08-14
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 165b420c44502..398e65e9c0a0b 100644
--- a/api_docs/kbn_deeplinks_devtools.mdx
+++ b/api_docs/kbn_deeplinks_devtools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools
title: "@kbn/deeplinks-devtools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-devtools plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools']
---
import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json';
diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx
index d4b32c1bbf3f4..ab794e410b6bb 100644
--- a/api_docs/kbn_deeplinks_management.mdx
+++ b/api_docs/kbn_deeplinks_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management
title: "@kbn/deeplinks-management"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-management plugin
-date: 2023-08-13
+date: 2023-08-14
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 b83ccdf1c8e1d..6f3debecd29e0 100644
--- a/api_docs/kbn_deeplinks_ml.mdx
+++ b/api_docs/kbn_deeplinks_ml.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml
title: "@kbn/deeplinks-ml"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-ml plugin
-date: 2023-08-13
+date: 2023-08-14
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 f5b0e1fed274a..70b569be8b75e 100644
--- a/api_docs/kbn_deeplinks_observability.mdx
+++ b/api_docs/kbn_deeplinks_observability.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability
title: "@kbn/deeplinks-observability"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-observability plugin
-date: 2023-08-13
+date: 2023-08-14
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 326435a6761f6..8b4cdcc2870e4 100644
--- a/api_docs/kbn_deeplinks_search.mdx
+++ b/api_docs/kbn_deeplinks_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search
title: "@kbn/deeplinks-search"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/deeplinks-search plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search']
---
import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json';
diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx
index 157a1796b5c4b..db328c46247b8 100644
--- a/api_docs/kbn_default_nav_analytics.mdx
+++ b/api_docs/kbn_default_nav_analytics.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics
title: "@kbn/default-nav-analytics"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/default-nav-analytics plugin
-date: 2023-08-13
+date: 2023-08-14
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 5f1a69df56b94..eb3c3e4f3b745 100644
--- a/api_docs/kbn_default_nav_devtools.mdx
+++ b/api_docs/kbn_default_nav_devtools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools
title: "@kbn/default-nav-devtools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/default-nav-devtools plugin
-date: 2023-08-13
+date: 2023-08-14
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 78e7fca4177c0..1cd1a27d737ee 100644
--- a/api_docs/kbn_default_nav_management.mdx
+++ b/api_docs/kbn_default_nav_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management
title: "@kbn/default-nav-management"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/default-nav-management plugin
-date: 2023-08-13
+date: 2023-08-14
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 ed04deae99f55..9d8ea36051196 100644
--- a/api_docs/kbn_default_nav_ml.mdx
+++ b/api_docs/kbn_default_nav_ml.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml
title: "@kbn/default-nav-ml"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/default-nav-ml plugin
-date: 2023-08-13
+date: 2023-08-14
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 0d2efd32b4fa5..70ab434fcd633 100644
--- a/api_docs/kbn_dev_cli_errors.mdx
+++ b/api_docs/kbn_dev_cli_errors.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors
title: "@kbn/dev-cli-errors"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-cli-errors plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors']
---
import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json';
diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx
index ac6a39d4d7cfb..20917eb15c9de 100644
--- a/api_docs/kbn_dev_cli_runner.mdx
+++ b/api_docs/kbn_dev_cli_runner.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner
title: "@kbn/dev-cli-runner"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-cli-runner plugin
-date: 2023-08-13
+date: 2023-08-14
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 b9ad52cb4f484..e50043b29e2b9 100644
--- a/api_docs/kbn_dev_proc_runner.mdx
+++ b/api_docs/kbn_dev_proc_runner.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner
title: "@kbn/dev-proc-runner"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-proc-runner plugin
-date: 2023-08-13
+date: 2023-08-14
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 ef9f979b2a2e5..54f5525834feb 100644
--- a/api_docs/kbn_dev_utils.mdx
+++ b/api_docs/kbn_dev_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils
title: "@kbn/dev-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 b8c798fac8183..cd8b7f9fdc1cd 100644
--- a/api_docs/kbn_discover_utils.mdx
+++ b/api_docs/kbn_discover_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils
title: "@kbn/discover-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/discover-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 c2b9f02291432..935cfe90d5e5f 100644
--- a/api_docs/kbn_doc_links.mdx
+++ b/api_docs/kbn_doc_links.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links
title: "@kbn/doc-links"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/doc-links plugin
-date: 2023-08-13
+date: 2023-08-14
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 89d242ec9cf72..1a4814fbedc26 100644
--- a/api_docs/kbn_docs_utils.mdx
+++ b/api_docs/kbn_docs_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils
title: "@kbn/docs-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/docs-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 3a22f73c4fc58..2320841db8927 100644
--- a/api_docs/kbn_dom_drag_drop.mdx
+++ b/api_docs/kbn_dom_drag_drop.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop
title: "@kbn/dom-drag-drop"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dom-drag-drop plugin
-date: 2023-08-13
+date: 2023-08-14
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 45fb37369969d..c8f598e9227ad 100644
--- a/api_docs/kbn_ebt_tools.mdx
+++ b/api_docs/kbn_ebt_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools
title: "@kbn/ebt-tools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ebt-tools plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools']
---
import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json';
diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx
index 3073a945b3683..d9854f2b2c712 100644
--- a/api_docs/kbn_ecs.mdx
+++ b/api_docs/kbn_ecs.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs
title: "@kbn/ecs"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ecs plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs']
---
import kbnEcsObj from './kbn_ecs.devdocs.json';
diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx
index 5a31388d47fb4..122cec13b6570 100644
--- a/api_docs/kbn_ecs_data_quality_dashboard.mdx
+++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard
title: "@kbn/ecs-data-quality-dashboard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ecs-data-quality-dashboard plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard']
---
import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json';
diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx
index de09f6d276944..b5a5c12fb3f38 100644
--- a/api_docs/kbn_elastic_assistant.mdx
+++ b/api_docs/kbn_elastic_assistant.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant
title: "@kbn/elastic-assistant"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/elastic-assistant plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant']
---
import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json';
diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx
index dfc53bcda0913..259f3032ed423 100644
--- a/api_docs/kbn_es.mdx
+++ b/api_docs/kbn_es.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es
title: "@kbn/es"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es plugin
-date: 2023-08-13
+date: 2023-08-14
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 230ff11d47e08..0fafef0ea1866 100644
--- a/api_docs/kbn_es_archiver.mdx
+++ b/api_docs/kbn_es_archiver.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver
title: "@kbn/es-archiver"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-archiver plugin
-date: 2023-08-13
+date: 2023-08-14
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 691c263d662ea..bb370d9cb4654 100644
--- a/api_docs/kbn_es_errors.mdx
+++ b/api_docs/kbn_es_errors.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors
title: "@kbn/es-errors"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-errors plugin
-date: 2023-08-13
+date: 2023-08-14
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 f35f6b8ad4d6f..c8d02878757b0 100644
--- a/api_docs/kbn_es_query.mdx
+++ b/api_docs/kbn_es_query.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query
title: "@kbn/es-query"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-query plugin
-date: 2023-08-13
+date: 2023-08-14
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 621f711ba204f..e476d8e8cea90 100644
--- a/api_docs/kbn_es_types.mdx
+++ b/api_docs/kbn_es_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types
title: "@kbn/es-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-types plugin
-date: 2023-08-13
+date: 2023-08-14
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 007352a37310f..b57f88e48ded9 100644
--- a/api_docs/kbn_eslint_plugin_imports.mdx
+++ b/api_docs/kbn_eslint_plugin_imports.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports
title: "@kbn/eslint-plugin-imports"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/eslint-plugin-imports plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports']
---
import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json';
diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx
index fb12f5f24f1b0..911e9420465b8 100644
--- a/api_docs/kbn_event_annotation_common.mdx
+++ b/api_docs/kbn_event_annotation_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common
title: "@kbn/event-annotation-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/event-annotation-common plugin
-date: 2023-08-13
+date: 2023-08-14
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 0325b5e066a45..097e920eaad26 100644
--- a/api_docs/kbn_event_annotation_components.mdx
+++ b/api_docs/kbn_event_annotation_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components
title: "@kbn/event-annotation-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/event-annotation-components plugin
-date: 2023-08-13
+date: 2023-08-14
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 13db96a17f4eb..262444a91681d 100644
--- a/api_docs/kbn_expandable_flyout.mdx
+++ b/api_docs/kbn_expandable_flyout.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout
title: "@kbn/expandable-flyout"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/expandable-flyout plugin
-date: 2023-08-13
+date: 2023-08-14
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 96e5d797e199e..be805539e3ff4 100644
--- a/api_docs/kbn_field_types.mdx
+++ b/api_docs/kbn_field_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types
title: "@kbn/field-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/field-types plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types']
---
import kbnFieldTypesObj from './kbn_field_types.devdocs.json';
diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx
index 7ec6d63ffb2d2..0c60172f6fb0f 100644
--- a/api_docs/kbn_find_used_node_modules.mdx
+++ b/api_docs/kbn_find_used_node_modules.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules
title: "@kbn/find-used-node-modules"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/find-used-node-modules plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules']
---
import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json';
diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx
index e1a092ee8a440..cd37d77da57f3 100644
--- a/api_docs/kbn_ftr_common_functional_services.mdx
+++ b/api_docs/kbn_ftr_common_functional_services.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services
title: "@kbn/ftr-common-functional-services"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ftr-common-functional-services plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services']
---
import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json';
diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx
index 37e9c74f6619e..5ef7a6ca082cf 100644
--- a/api_docs/kbn_generate.mdx
+++ b/api_docs/kbn_generate.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate
title: "@kbn/generate"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/generate plugin
-date: 2023-08-13
+date: 2023-08-14
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 03ada267f8eb6..bf433af79e55d 100644
--- a/api_docs/kbn_generate_console_definitions.mdx
+++ b/api_docs/kbn_generate_console_definitions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions
title: "@kbn/generate-console-definitions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/generate-console-definitions plugin
-date: 2023-08-13
+date: 2023-08-14
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 3d45cee797bb1..ea1b2176dc091 100644
--- a/api_docs/kbn_generate_csv.mdx
+++ b/api_docs/kbn_generate_csv.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv
title: "@kbn/generate-csv"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/generate-csv plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv']
---
import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json';
diff --git a/api_docs/kbn_generate_csv_types.mdx b/api_docs/kbn_generate_csv_types.mdx
index f3a6a1aca2fc5..2f143222e5cf5 100644
--- a/api_docs/kbn_generate_csv_types.mdx
+++ b/api_docs/kbn_generate_csv_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv-types
title: "@kbn/generate-csv-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/generate-csv-types plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv-types']
---
import kbnGenerateCsvTypesObj from './kbn_generate_csv_types.devdocs.json';
diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx
index 7ecc3dc6cb9ee..6a887d9ecdc9a 100644
--- a/api_docs/kbn_guided_onboarding.mdx
+++ b/api_docs/kbn_guided_onboarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding
title: "@kbn/guided-onboarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/guided-onboarding plugin
-date: 2023-08-13
+date: 2023-08-14
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 1c54d9d149730..e5650091e9178 100644
--- a/api_docs/kbn_handlebars.mdx
+++ b/api_docs/kbn_handlebars.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars
title: "@kbn/handlebars"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/handlebars plugin
-date: 2023-08-13
+date: 2023-08-14
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 ae0f9baafa89f..7cbefdaa8550d 100644
--- a/api_docs/kbn_hapi_mocks.mdx
+++ b/api_docs/kbn_hapi_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks
title: "@kbn/hapi-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/hapi-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 d1c570775c8e0..4f01041faf2f7 100644
--- a/api_docs/kbn_health_gateway_server.mdx
+++ b/api_docs/kbn_health_gateway_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server
title: "@kbn/health-gateway-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/health-gateway-server plugin
-date: 2023-08-13
+date: 2023-08-14
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 6c752c3743d8b..a37d23d355e17 100644
--- a/api_docs/kbn_home_sample_data_card.mdx
+++ b/api_docs/kbn_home_sample_data_card.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card
title: "@kbn/home-sample-data-card"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/home-sample-data-card plugin
-date: 2023-08-13
+date: 2023-08-14
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 fbbdcd98ad5a5..14cdefab8d1cf 100644
--- a/api_docs/kbn_home_sample_data_tab.mdx
+++ b/api_docs/kbn_home_sample_data_tab.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab
title: "@kbn/home-sample-data-tab"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/home-sample-data-tab plugin
-date: 2023-08-13
+date: 2023-08-14
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 df589abc4b430..cf1eacd5b7c80 100644
--- a/api_docs/kbn_i18n.mdx
+++ b/api_docs/kbn_i18n.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n
title: "@kbn/i18n"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/i18n plugin
-date: 2023-08-13
+date: 2023-08-14
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 30d81491f78c9..852d462e67fa3 100644
--- a/api_docs/kbn_i18n_react.mdx
+++ b/api_docs/kbn_i18n_react.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react
title: "@kbn/i18n-react"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/i18n-react plugin
-date: 2023-08-13
+date: 2023-08-14
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 c3be0fd52743b..6f8e8eaf5820f 100644
--- a/api_docs/kbn_import_resolver.mdx
+++ b/api_docs/kbn_import_resolver.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver
title: "@kbn/import-resolver"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/import-resolver plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver']
---
import kbnImportResolverObj from './kbn_import_resolver.devdocs.json';
diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx
index a76c893b3f0db..44f6b022a401b 100644
--- a/api_docs/kbn_infra_forge.mdx
+++ b/api_docs/kbn_infra_forge.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge
title: "@kbn/infra-forge"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/infra-forge plugin
-date: 2023-08-13
+date: 2023-08-14
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 925392ce2243f..25d4a94a9a156 100644
--- a/api_docs/kbn_interpreter.mdx
+++ b/api_docs/kbn_interpreter.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter
title: "@kbn/interpreter"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/interpreter plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter']
---
import kbnInterpreterObj from './kbn_interpreter.devdocs.json';
diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx
index 2a7eb84924e75..8814419c3e07d 100644
--- a/api_docs/kbn_io_ts_utils.mdx
+++ b/api_docs/kbn_io_ts_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils
title: "@kbn/io-ts-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/io-ts-utils plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils']
---
import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json';
diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx
index d52b8abbb72e1..661a389c0fc50 100644
--- a/api_docs/kbn_jest_serializers.mdx
+++ b/api_docs/kbn_jest_serializers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers
title: "@kbn/jest-serializers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/jest-serializers plugin
-date: 2023-08-13
+date: 2023-08-14
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 27e4c2906da0e..898bbfa5c2713 100644
--- a/api_docs/kbn_journeys.mdx
+++ b/api_docs/kbn_journeys.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys
title: "@kbn/journeys"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/journeys plugin
-date: 2023-08-13
+date: 2023-08-14
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 82a8e83603c37..c693d824ce947 100644
--- a/api_docs/kbn_json_ast.mdx
+++ b/api_docs/kbn_json_ast.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast
title: "@kbn/json-ast"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/json-ast plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast']
---
import kbnJsonAstObj from './kbn_json_ast.devdocs.json';
diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx
index a38fb2ce3b710..564f063dfcb03 100644
--- a/api_docs/kbn_kibana_manifest_schema.mdx
+++ b/api_docs/kbn_kibana_manifest_schema.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema
title: "@kbn/kibana-manifest-schema"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/kibana-manifest-schema plugin
-date: 2023-08-13
+date: 2023-08-14
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 0e8c5f5063ea6..767b7c911d0cd 100644
--- a/api_docs/kbn_language_documentation_popover.mdx
+++ b/api_docs/kbn_language_documentation_popover.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover
title: "@kbn/language-documentation-popover"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/language-documentation-popover plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover']
---
import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json';
diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx
index 5148f18e59c17..7351a56b311bd 100644
--- a/api_docs/kbn_logging.mdx
+++ b/api_docs/kbn_logging.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging
title: "@kbn/logging"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/logging plugin
-date: 2023-08-13
+date: 2023-08-14
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 b7e212487223f..e8a7d8599359a 100644
--- a/api_docs/kbn_logging_mocks.mdx
+++ b/api_docs/kbn_logging_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks
title: "@kbn/logging-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/logging-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks']
---
import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json';
diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx
index c810a2432ee44..6568bb2a4759d 100644
--- a/api_docs/kbn_managed_vscode_config.mdx
+++ b/api_docs/kbn_managed_vscode_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config
title: "@kbn/managed-vscode-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/managed-vscode-config plugin
-date: 2023-08-13
+date: 2023-08-14
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 0335415de9f88..4248aae3c1b50 100644
--- a/api_docs/kbn_management_cards_navigation.mdx
+++ b/api_docs/kbn_management_cards_navigation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation
title: "@kbn/management-cards-navigation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/management-cards-navigation plugin
-date: 2023-08-13
+date: 2023-08-14
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_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx
index 93cb0b6803134..bbb4768e4c645 100644
--- a/api_docs/kbn_management_storybook_config.mdx
+++ b/api_docs/kbn_management_storybook_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config
title: "@kbn/management-storybook-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/management-storybook-config plugin
-date: 2023-08-13
+date: 2023-08-14
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 9eaa93247cba0..2e010aec2a94e 100644
--- a/api_docs/kbn_mapbox_gl.mdx
+++ b/api_docs/kbn_mapbox_gl.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl
title: "@kbn/mapbox-gl"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/mapbox-gl plugin
-date: 2023-08-13
+date: 2023-08-14
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 7c3748d58cab7..f611fb005cf40 100644
--- a/api_docs/kbn_maps_vector_tile_utils.mdx
+++ b/api_docs/kbn_maps_vector_tile_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils
title: "@kbn/maps-vector-tile-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/maps-vector-tile-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 edda74905024b..284079ad9f917 100644
--- a/api_docs/kbn_ml_agg_utils.mdx
+++ b/api_docs/kbn_ml_agg_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils
title: "@kbn/ml-agg-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-agg-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 9c73d02ffb4bf..d9760f5097079 100644
--- a/api_docs/kbn_ml_anomaly_utils.mdx
+++ b/api_docs/kbn_ml_anomaly_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils
title: "@kbn/ml-anomaly-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-anomaly-utils plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils']
---
import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx
index 5cc05b72438f7..38ca4f9e6dfc7 100644
--- a/api_docs/kbn_ml_category_validator.mdx
+++ b/api_docs/kbn_ml_category_validator.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator
title: "@kbn/ml-category-validator"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-category-validator plugin
-date: 2023-08-13
+date: 2023-08-14
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_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx
index 274b4a5d5ed39..badaa40cf7f76 100644
--- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx
+++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils
title: "@kbn/ml-data-frame-analytics-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-data-frame-analytics-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 72f93b7a10301..33452f3770063 100644
--- a/api_docs/kbn_ml_data_grid.mdx
+++ b/api_docs/kbn_ml_data_grid.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid
title: "@kbn/ml-data-grid"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-data-grid plugin
-date: 2023-08-13
+date: 2023-08-14
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 8fd88a81352c8..01d27a308f26e 100644
--- a/api_docs/kbn_ml_date_picker.mdx
+++ b/api_docs/kbn_ml_date_picker.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker
title: "@kbn/ml-date-picker"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-date-picker plugin
-date: 2023-08-13
+date: 2023-08-14
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 216a1bcefe96b..8a1d19207b396 100644
--- a/api_docs/kbn_ml_date_utils.mdx
+++ b/api_docs/kbn_ml_date_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils
title: "@kbn/ml-date-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-date-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 34a658d635104..c49d0244838b7 100644
--- a/api_docs/kbn_ml_error_utils.mdx
+++ b/api_docs/kbn_ml_error_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils
title: "@kbn/ml-error-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-error-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 7c57251c16898..9b447e4c80551 100644
--- a/api_docs/kbn_ml_in_memory_table.mdx
+++ b/api_docs/kbn_ml_in_memory_table.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table
title: "@kbn/ml-in-memory-table"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-in-memory-table plugin
-date: 2023-08-13
+date: 2023-08-14
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 ad90dfb68f10a..3f89161163597 100644
--- a/api_docs/kbn_ml_is_defined.mdx
+++ b/api_docs/kbn_ml_is_defined.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined
title: "@kbn/ml-is-defined"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-is-defined plugin
-date: 2023-08-13
+date: 2023-08-14
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 e02220fba017e..ccc74b59e6175 100644
--- a/api_docs/kbn_ml_is_populated_object.mdx
+++ b/api_docs/kbn_ml_is_populated_object.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object
title: "@kbn/ml-is-populated-object"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-is-populated-object plugin
-date: 2023-08-13
+date: 2023-08-14
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 be8a7bd0b8591..580e5bac0f044 100644
--- a/api_docs/kbn_ml_kibana_theme.mdx
+++ b/api_docs/kbn_ml_kibana_theme.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme
title: "@kbn/ml-kibana-theme"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-kibana-theme plugin
-date: 2023-08-13
+date: 2023-08-14
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 78f022def7989..35a8e66ddf69c 100644
--- a/api_docs/kbn_ml_local_storage.mdx
+++ b/api_docs/kbn_ml_local_storage.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage
title: "@kbn/ml-local-storage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-local-storage plugin
-date: 2023-08-13
+date: 2023-08-14
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 3eff824401223..505c9f7efcc8b 100644
--- a/api_docs/kbn_ml_nested_property.mdx
+++ b/api_docs/kbn_ml_nested_property.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property
title: "@kbn/ml-nested-property"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-nested-property plugin
-date: 2023-08-13
+date: 2023-08-14
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 011ff0e1fa0cd..7a64651615096 100644
--- a/api_docs/kbn_ml_number_utils.mdx
+++ b/api_docs/kbn_ml_number_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils
title: "@kbn/ml-number-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-number-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 61751273a4fc0..f3532e843c5c7 100644
--- a/api_docs/kbn_ml_query_utils.mdx
+++ b/api_docs/kbn_ml_query_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils
title: "@kbn/ml-query-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-query-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 af319ad3ecd57..3be60df080cad 100644
--- a/api_docs/kbn_ml_random_sampler_utils.mdx
+++ b/api_docs/kbn_ml_random_sampler_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils
title: "@kbn/ml-random-sampler-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-random-sampler-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 2f8b4df103d15..6027c7047de7d 100644
--- a/api_docs/kbn_ml_route_utils.mdx
+++ b/api_docs/kbn_ml_route_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils
title: "@kbn/ml-route-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-route-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 ec19554807f8e..a7a6b49e78787 100644
--- a/api_docs/kbn_ml_runtime_field_utils.mdx
+++ b/api_docs/kbn_ml_runtime_field_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils
title: "@kbn/ml-runtime-field-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-runtime-field-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 7d5e69a2d12e0..a3fd06a5529d2 100644
--- a/api_docs/kbn_ml_string_hash.mdx
+++ b/api_docs/kbn_ml_string_hash.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash
title: "@kbn/ml-string-hash"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-string-hash plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash']
---
import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json';
diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx
index 48348dda43c81..1ef0a9b74cdb8 100644
--- a/api_docs/kbn_ml_trained_models_utils.mdx
+++ b/api_docs/kbn_ml_trained_models_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils
title: "@kbn/ml-trained-models-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-trained-models-utils plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils']
---
import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx
index 33664ea73effe..a687d7d273c4c 100644
--- a/api_docs/kbn_ml_url_state.mdx
+++ b/api_docs/kbn_ml_url_state.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state
title: "@kbn/ml-url-state"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-url-state plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state']
---
import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json';
diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx
index 37ccbdb076450..baf45a41c7462 100644
--- a/api_docs/kbn_monaco.mdx
+++ b/api_docs/kbn_monaco.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco
title: "@kbn/monaco"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/monaco plugin
-date: 2023-08-13
+date: 2023-08-14
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 cbf78376b2a0f..e07efe125be2c 100644
--- a/api_docs/kbn_object_versioning.mdx
+++ b/api_docs/kbn_object_versioning.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning
title: "@kbn/object-versioning"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/object-versioning plugin
-date: 2023-08-13
+date: 2023-08-14
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 629cfc2bd2ea6..fa9d920c82c82 100644
--- a/api_docs/kbn_observability_alert_details.mdx
+++ b/api_docs/kbn_observability_alert_details.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details
title: "@kbn/observability-alert-details"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/observability-alert-details plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details']
---
import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json';
diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx
index 59337025648a7..f9f27545b2ed5 100644
--- a/api_docs/kbn_optimizer.mdx
+++ b/api_docs/kbn_optimizer.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer
title: "@kbn/optimizer"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/optimizer plugin
-date: 2023-08-13
+date: 2023-08-14
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 553065b328cd0..25f5167fd3465 100644
--- a/api_docs/kbn_optimizer_webpack_helpers.mdx
+++ b/api_docs/kbn_optimizer_webpack_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers
title: "@kbn/optimizer-webpack-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/optimizer-webpack-helpers plugin
-date: 2023-08-13
+date: 2023-08-14
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 bd41be3d7ddbd..cc8647ebd44b7 100644
--- a/api_docs/kbn_osquery_io_ts_types.mdx
+++ b/api_docs/kbn_osquery_io_ts_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types
title: "@kbn/osquery-io-ts-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/osquery-io-ts-types plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types']
---
import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json';
diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx
index 5b0f58afaf277..84eff3ebc68d0 100644
--- a/api_docs/kbn_performance_testing_dataset_extractor.mdx
+++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor
title: "@kbn/performance-testing-dataset-extractor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/performance-testing-dataset-extractor plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor']
---
import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json';
diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx
index c1184986a7813..605ba415df060 100644
--- a/api_docs/kbn_plugin_generator.mdx
+++ b/api_docs/kbn_plugin_generator.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator
title: "@kbn/plugin-generator"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/plugin-generator plugin
-date: 2023-08-13
+date: 2023-08-14
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 6ed675a59df9f..2bdf3ca252c65 100644
--- a/api_docs/kbn_plugin_helpers.mdx
+++ b/api_docs/kbn_plugin_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers
title: "@kbn/plugin-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/plugin-helpers plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers']
---
import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json';
diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx
index 3f5308c141bf7..53180a2d0aa43 100644
--- a/api_docs/kbn_random_sampling.mdx
+++ b/api_docs/kbn_random_sampling.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling
title: "@kbn/random-sampling"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/random-sampling plugin
-date: 2023-08-13
+date: 2023-08-14
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 d02c68beeb375..925e8002cbfb0 100644
--- a/api_docs/kbn_react_field.mdx
+++ b/api_docs/kbn_react_field.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field
title: "@kbn/react-field"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-field plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field']
---
import kbnReactFieldObj from './kbn_react_field.devdocs.json';
diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx
index ba7c9b34c6723..10828baa2a836 100644
--- a/api_docs/kbn_react_kibana_context_common.mdx
+++ b/api_docs/kbn_react_kibana_context_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common
title: "@kbn/react-kibana-context-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-context-common plugin
-date: 2023-08-13
+date: 2023-08-14
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 0983dc0cd59b7..7a65c4b3b0ef9 100644
--- a/api_docs/kbn_react_kibana_context_render.mdx
+++ b/api_docs/kbn_react_kibana_context_render.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render
title: "@kbn/react-kibana-context-render"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-context-render plugin
-date: 2023-08-13
+date: 2023-08-14
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 9f38b3d87e0ce..e9ff0f7c621b0 100644
--- a/api_docs/kbn_react_kibana_context_root.mdx
+++ b/api_docs/kbn_react_kibana_context_root.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root
title: "@kbn/react-kibana-context-root"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-context-root plugin
-date: 2023-08-13
+date: 2023-08-14
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 7327fb026b1f8..98a5ce76ec1df 100644
--- a/api_docs/kbn_react_kibana_context_styled.mdx
+++ b/api_docs/kbn_react_kibana_context_styled.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled
title: "@kbn/react-kibana-context-styled"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-context-styled plugin
-date: 2023-08-13
+date: 2023-08-14
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 b4ab7bd926be9..fb7e6df35e2a1 100644
--- a/api_docs/kbn_react_kibana_context_theme.mdx
+++ b/api_docs/kbn_react_kibana_context_theme.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme
title: "@kbn/react-kibana-context-theme"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-context-theme plugin
-date: 2023-08-13
+date: 2023-08-14
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 d9ccfff292758..4a6a590cad0aa 100644
--- a/api_docs/kbn_react_kibana_mount.mdx
+++ b/api_docs/kbn_react_kibana_mount.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount
title: "@kbn/react-kibana-mount"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-kibana-mount plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount']
---
import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json';
diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx
index a1b73dd6f6721..91f984a716502 100644
--- a/api_docs/kbn_repo_file_maps.mdx
+++ b/api_docs/kbn_repo_file_maps.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps
title: "@kbn/repo-file-maps"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-file-maps plugin
-date: 2023-08-13
+date: 2023-08-14
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 58e914f2ddd0f..c8f5d49bf4f72 100644
--- a/api_docs/kbn_repo_linter.mdx
+++ b/api_docs/kbn_repo_linter.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter
title: "@kbn/repo-linter"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-linter plugin
-date: 2023-08-13
+date: 2023-08-14
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 bb6dfbf3e9c8b..e80f3d0f6008f 100644
--- a/api_docs/kbn_repo_path.mdx
+++ b/api_docs/kbn_repo_path.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path
title: "@kbn/repo-path"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-path plugin
-date: 2023-08-13
+date: 2023-08-14
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 b2dae5d6ede44..47ae26a0e007e 100644
--- a/api_docs/kbn_repo_source_classifier.mdx
+++ b/api_docs/kbn_repo_source_classifier.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier
title: "@kbn/repo-source-classifier"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-source-classifier plugin
-date: 2023-08-13
+date: 2023-08-14
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 ecf042762d3f9..41537f918d61c 100644
--- a/api_docs/kbn_reporting_common.mdx
+++ b/api_docs/kbn_reporting_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common
title: "@kbn/reporting-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/reporting-common plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common']
---
import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json';
diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx
index f14a36ef0c579..038db1ec61a56 100644
--- a/api_docs/kbn_rison.mdx
+++ b/api_docs/kbn_rison.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison
title: "@kbn/rison"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/rison plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison']
---
import kbnRisonObj from './kbn_rison.devdocs.json';
diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx
index 060c31cb75521..14805b80aebf9 100644
--- a/api_docs/kbn_rrule.mdx
+++ b/api_docs/kbn_rrule.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule
title: "@kbn/rrule"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/rrule plugin
-date: 2023-08-13
+date: 2023-08-14
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 46354e5f526e5..ab8a607a57522 100644
--- a/api_docs/kbn_rule_data_utils.mdx
+++ b/api_docs/kbn_rule_data_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils
title: "@kbn/rule-data-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/rule-data-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 7d9e3b3c88e0c..811c5bc4f69fd 100644
--- a/api_docs/kbn_saved_objects_settings.mdx
+++ b/api_docs/kbn_saved_objects_settings.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings
title: "@kbn/saved-objects-settings"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/saved-objects-settings plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings']
---
import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json';
diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx
index d8cd0d9c4db50..09d0dfc4f23c3 100644
--- a/api_docs/kbn_search_api_panels.mdx
+++ b/api_docs/kbn_search_api_panels.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels
title: "@kbn/search-api-panels"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/search-api-panels plugin
-date: 2023-08-13
+date: 2023-08-14
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_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx
index 1fb92ffcda199..19a6ec4f84bf4 100644
--- a/api_docs/kbn_search_response_warnings.mdx
+++ b/api_docs/kbn_search_response_warnings.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings
title: "@kbn/search-response-warnings"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/search-response-warnings plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings']
---
import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json';
diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx
index 2c73df27f7e4c..d082563ad49e3 100644
--- a/api_docs/kbn_security_solution_navigation.mdx
+++ b/api_docs/kbn_security_solution_navigation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation
title: "@kbn/security-solution-navigation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/security-solution-navigation plugin
-date: 2023-08-13
+date: 2023-08-14
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 c52e7c9fc421c..2a621a788cb43 100644
--- a/api_docs/kbn_security_solution_side_nav.mdx
+++ b/api_docs/kbn_security_solution_side_nav.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav
title: "@kbn/security-solution-side-nav"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/security-solution-side-nav plugin
-date: 2023-08-13
+date: 2023-08-14
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 68ce6854a699e..38e1b8759b41f 100644
--- a/api_docs/kbn_security_solution_storybook_config.mdx
+++ b/api_docs/kbn_security_solution_storybook_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config
title: "@kbn/security-solution-storybook-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/security-solution-storybook-config plugin
-date: 2023-08-13
+date: 2023-08-14
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 76d240d16239d..3f410a7792f6f 100644
--- a/api_docs/kbn_securitysolution_autocomplete.mdx
+++ b/api_docs/kbn_securitysolution_autocomplete.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete
title: "@kbn/securitysolution-autocomplete"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-autocomplete plugin
-date: 2023-08-13
+date: 2023-08-14
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 c37057816ed75..65df67ea4569e 100644
--- a/api_docs/kbn_securitysolution_data_table.mdx
+++ b/api_docs/kbn_securitysolution_data_table.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table
title: "@kbn/securitysolution-data-table"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-data-table plugin
-date: 2023-08-13
+date: 2023-08-14
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 b0d15a649ec45..b626862000207 100644
--- a/api_docs/kbn_securitysolution_ecs.mdx
+++ b/api_docs/kbn_securitysolution_ecs.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs
title: "@kbn/securitysolution-ecs"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-ecs plugin
-date: 2023-08-13
+date: 2023-08-14
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 26c76a2b75be7..c22ee98afe4d3 100644
--- a/api_docs/kbn_securitysolution_es_utils.mdx
+++ b/api_docs/kbn_securitysolution_es_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils
title: "@kbn/securitysolution-es-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-es-utils plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils']
---
import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx
index f584de968e6ac..6c9655ff78125 100644
--- a/api_docs/kbn_securitysolution_exception_list_components.mdx
+++ b/api_docs/kbn_securitysolution_exception_list_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components
title: "@kbn/securitysolution-exception-list-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-exception-list-components plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components']
---
import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx
index 8e75d9709ed31..ea05beadd813e 100644
--- a/api_docs/kbn_securitysolution_grouping.mdx
+++ b/api_docs/kbn_securitysolution_grouping.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping
title: "@kbn/securitysolution-grouping"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-grouping plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping']
---
import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx
index 7c224cd268ab8..f97e9ffa6d083 100644
--- a/api_docs/kbn_securitysolution_hook_utils.mdx
+++ b/api_docs/kbn_securitysolution_hook_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils
title: "@kbn/securitysolution-hook-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-hook-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 72433f76e687b..1d3b73e11ea42 100644
--- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types
title: "@kbn/securitysolution-io-ts-alerting-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin
-date: 2023-08-13
+date: 2023-08-14
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 ef8b1cbbfc5e6..fcaa0d08a68a0 100644
--- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types
title: "@kbn/securitysolution-io-ts-list-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-list-types plugin
-date: 2023-08-13
+date: 2023-08-14
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 4f535184ddb08..6824cf9618985 100644
--- a/api_docs/kbn_securitysolution_io_ts_types.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types
title: "@kbn/securitysolution-io-ts-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-types plugin
-date: 2023-08-13
+date: 2023-08-14
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 4648d7b7c8d7c..76b86cdcba0d8 100644
--- a/api_docs/kbn_securitysolution_io_ts_utils.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils
title: "@kbn/securitysolution-io-ts-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 22239d123bc47..770965238ef5b 100644
--- a/api_docs/kbn_securitysolution_list_api.mdx
+++ b/api_docs/kbn_securitysolution_list_api.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api
title: "@kbn/securitysolution-list-api"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-api plugin
-date: 2023-08-13
+date: 2023-08-14
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 77261f718d88b..36247d20f01c3 100644
--- a/api_docs/kbn_securitysolution_list_constants.mdx
+++ b/api_docs/kbn_securitysolution_list_constants.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants
title: "@kbn/securitysolution-list-constants"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-constants plugin
-date: 2023-08-13
+date: 2023-08-14
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 341870d9a9bcf..54fc60a6bcb9f 100644
--- a/api_docs/kbn_securitysolution_list_hooks.mdx
+++ b/api_docs/kbn_securitysolution_list_hooks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks
title: "@kbn/securitysolution-list-hooks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-hooks plugin
-date: 2023-08-13
+date: 2023-08-14
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 f310d9c939015..a6af57a80708f 100644
--- a/api_docs/kbn_securitysolution_list_utils.mdx
+++ b/api_docs/kbn_securitysolution_list_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils
title: "@kbn/securitysolution-list-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 da9a5f4900345..369906f658f7c 100644
--- a/api_docs/kbn_securitysolution_rules.mdx
+++ b/api_docs/kbn_securitysolution_rules.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules
title: "@kbn/securitysolution-rules"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-rules plugin
-date: 2023-08-13
+date: 2023-08-14
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 57c2bf5844162..1fffcd71751d5 100644
--- a/api_docs/kbn_securitysolution_t_grid.mdx
+++ b/api_docs/kbn_securitysolution_t_grid.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid
title: "@kbn/securitysolution-t-grid"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-t-grid plugin
-date: 2023-08-13
+date: 2023-08-14
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 af42672353f75..625c246637511 100644
--- a/api_docs/kbn_securitysolution_utils.mdx
+++ b/api_docs/kbn_securitysolution_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils
title: "@kbn/securitysolution-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 fcbe6cecbc497..a07ea484b9b63 100644
--- a/api_docs/kbn_server_http_tools.mdx
+++ b/api_docs/kbn_server_http_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools
title: "@kbn/server-http-tools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/server-http-tools plugin
-date: 2023-08-13
+date: 2023-08-14
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 d5700162d0e80..91c45261c8e13 100644
--- a/api_docs/kbn_server_route_repository.mdx
+++ b/api_docs/kbn_server_route_repository.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository
title: "@kbn/server-route-repository"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/server-route-repository plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository']
---
import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json';
diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx
index c03a9bbb211ad..eb09144d4b8a1 100644
--- a/api_docs/kbn_serverless_project_switcher.mdx
+++ b/api_docs/kbn_serverless_project_switcher.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher
title: "@kbn/serverless-project-switcher"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/serverless-project-switcher plugin
-date: 2023-08-13
+date: 2023-08-14
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_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx
index 51295a57ee335..56ed6e669da14 100644
--- a/api_docs/kbn_serverless_storybook_config.mdx
+++ b/api_docs/kbn_serverless_storybook_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config
title: "@kbn/serverless-storybook-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/serverless-storybook-config plugin
-date: 2023-08-13
+date: 2023-08-14
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 654a2b42b2738..3bc9b1a9ca8dc 100644
--- a/api_docs/kbn_shared_svg.mdx
+++ b/api_docs/kbn_shared_svg.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg
title: "@kbn/shared-svg"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-svg plugin
-date: 2023-08-13
+date: 2023-08-14
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 f32229f937b42..1f907a9e7892f 100644
--- a/api_docs/kbn_shared_ux_avatar_solution.mdx
+++ b/api_docs/kbn_shared_ux_avatar_solution.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution
title: "@kbn/shared-ux-avatar-solution"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-avatar-solution plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution']
---
import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx
index ff782d771e305..6b8b766eb5e63 100644
--- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx
+++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components
title: "@kbn/shared-ux-avatar-user-profile-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components']
---
import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx
index 0eed7f5d7c94a..143518d9d7d2b 100644
--- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx
+++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen
title: "@kbn/shared-ux-button-exit-full-screen"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen']
---
import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx
index 01e6522d0dd8e..d497f8cf4b641 100644
--- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx
+++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks
title: "@kbn/shared-ux-button-exit-full-screen-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks']
---
import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx
index 277ae400e914b..29a6362c4807a 100644
--- a/api_docs/kbn_shared_ux_button_toolbar.mdx
+++ b/api_docs/kbn_shared_ux_button_toolbar.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar
title: "@kbn/shared-ux-button-toolbar"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-button-toolbar plugin
-date: 2023-08-13
+date: 2023-08-14
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 e6b2acf1a60c6..3b56ddeea9539 100644
--- a/api_docs/kbn_shared_ux_card_no_data.mdx
+++ b/api_docs/kbn_shared_ux_card_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data
title: "@kbn/shared-ux-card-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-card-no-data plugin
-date: 2023-08-13
+date: 2023-08-14
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 7823faa0f0078..e1497fb556dd2 100644
--- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks
title: "@kbn/shared-ux-card-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 45dcbd0bd1bc7..b86a2c502328b 100644
--- a/api_docs/kbn_shared_ux_chrome_navigation.mdx
+++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation
title: "@kbn/shared-ux-chrome-navigation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-chrome-navigation plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation']
---
import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx
index 64da0b6cba7ac..1b2beefa573ad 100644
--- a/api_docs/kbn_shared_ux_file_context.mdx
+++ b/api_docs/kbn_shared_ux_file_context.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context
title: "@kbn/shared-ux-file-context"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-context plugin
-date: 2023-08-13
+date: 2023-08-14
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 5a569c185e37b..78c45710649b7 100644
--- a/api_docs/kbn_shared_ux_file_image.mdx
+++ b/api_docs/kbn_shared_ux_file_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image
title: "@kbn/shared-ux-file-image"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-image plugin
-date: 2023-08-13
+date: 2023-08-14
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 b0fabb7db6b2e..2b6a3714be9ea 100644
--- a/api_docs/kbn_shared_ux_file_image_mocks.mdx
+++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks
title: "@kbn/shared-ux-file-image-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-image-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 75aee629af4bb..c2d23c349e3fa 100644
--- a/api_docs/kbn_shared_ux_file_mocks.mdx
+++ b/api_docs/kbn_shared_ux_file_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks
title: "@kbn/shared-ux-file-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 67d047ca4244d..9a1dd12c878fa 100644
--- a/api_docs/kbn_shared_ux_file_picker.mdx
+++ b/api_docs/kbn_shared_ux_file_picker.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker
title: "@kbn/shared-ux-file-picker"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-picker plugin
-date: 2023-08-13
+date: 2023-08-14
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 606962357d214..719edba9937a5 100644
--- a/api_docs/kbn_shared_ux_file_types.mdx
+++ b/api_docs/kbn_shared_ux_file_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types
title: "@kbn/shared-ux-file-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-types plugin
-date: 2023-08-13
+date: 2023-08-14
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 db7691f499258..9c7286b96203c 100644
--- a/api_docs/kbn_shared_ux_file_upload.mdx
+++ b/api_docs/kbn_shared_ux_file_upload.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload
title: "@kbn/shared-ux-file-upload"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-upload plugin
-date: 2023-08-13
+date: 2023-08-14
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 9d0cd7b253ed2..a0838a22fad9a 100644
--- a/api_docs/kbn_shared_ux_file_util.mdx
+++ b/api_docs/kbn_shared_ux_file_util.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util
title: "@kbn/shared-ux-file-util"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-util plugin
-date: 2023-08-13
+date: 2023-08-14
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 d138bf8ec7fde..0c40be0c07ce7 100644
--- a/api_docs/kbn_shared_ux_link_redirect_app.mdx
+++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app
title: "@kbn/shared-ux-link-redirect-app"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-link-redirect-app plugin
-date: 2023-08-13
+date: 2023-08-14
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 4bb2af6515d9d..c85211bfbcda0 100644
--- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx
+++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks
title: "@kbn/shared-ux-link-redirect-app-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 222869904c431..5f4f9285a28e2 100644
--- a/api_docs/kbn_shared_ux_markdown.mdx
+++ b/api_docs/kbn_shared_ux_markdown.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown
title: "@kbn/shared-ux-markdown"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-markdown plugin
-date: 2023-08-13
+date: 2023-08-14
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 c945977f4526b..f56bfebf5c04c 100644
--- a/api_docs/kbn_shared_ux_markdown_mocks.mdx
+++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks
title: "@kbn/shared-ux-markdown-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-markdown-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 dac9c554d613d..76527e20aca96 100644
--- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx
+++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data
title: "@kbn/shared-ux-page-analytics-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin
-date: 2023-08-13
+date: 2023-08-14
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 13b364fab2c1d..4a951a3aee125 100644
--- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks
title: "@kbn/shared-ux-page-analytics-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 6119fec66d598..ff66b6ba25c99 100644
--- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data
title: "@kbn/shared-ux-page-kibana-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin
-date: 2023-08-13
+date: 2023-08-14
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 d5ffdbf9b4718..c6c7b869c3ee3 100644
--- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks
title: "@kbn/shared-ux-page-kibana-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 aa776fb625be1..1d6684edda58b 100644
--- a/api_docs/kbn_shared_ux_page_kibana_template.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template
title: "@kbn/shared-ux-page-kibana-template"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-template plugin
-date: 2023-08-13
+date: 2023-08-14
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 7d182e2155b07..ab75411da7118 100644
--- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks
title: "@kbn/shared-ux-page-kibana-template-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 a803bef6d18ab..73bf90e4400f3 100644
--- a/api_docs/kbn_shared_ux_page_no_data.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data
title: "@kbn/shared-ux-page-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data plugin
-date: 2023-08-13
+date: 2023-08-14
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 227a1008db502..56216b7168b77 100644
--- a/api_docs/kbn_shared_ux_page_no_data_config.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config
title: "@kbn/shared-ux-page-no-data-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data-config plugin
-date: 2023-08-13
+date: 2023-08-14
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 82f7ed3c289c6..7bb394ee84e08 100644
--- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks
title: "@kbn/shared-ux-page-no-data-config-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 2b4c21df9bd53..b1c6a73e9c47d 100644
--- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks
title: "@kbn/shared-ux-page-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 b23522802264e..8f6cdfb926036 100644
--- a/api_docs/kbn_shared_ux_page_solution_nav.mdx
+++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav
title: "@kbn/shared-ux-page-solution-nav"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-solution-nav plugin
-date: 2023-08-13
+date: 2023-08-14
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 6716096285820..e13f95eae7e7f 100644
--- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx
+++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views
title: "@kbn/shared-ux-prompt-no-data-views"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin
-date: 2023-08-13
+date: 2023-08-14
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 2da2c07de67e7..c06535a8e6b2e 100644
--- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx
+++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks
title: "@kbn/shared-ux-prompt-no-data-views-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 70f92d0ca8e2a..7a97dae6b36aa 100644
--- a/api_docs/kbn_shared_ux_prompt_not_found.mdx
+++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found
title: "@kbn/shared-ux-prompt-not-found"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-prompt-not-found plugin
-date: 2023-08-13
+date: 2023-08-14
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 96b5e0c89ddd4..06dec451910dd 100644
--- a/api_docs/kbn_shared_ux_router.mdx
+++ b/api_docs/kbn_shared_ux_router.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router
title: "@kbn/shared-ux-router"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-router plugin
-date: 2023-08-13
+date: 2023-08-14
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 0f3942a18e1ac..bec0ce5cf0793 100644
--- a/api_docs/kbn_shared_ux_router_mocks.mdx
+++ b/api_docs/kbn_shared_ux_router_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks
title: "@kbn/shared-ux-router-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-router-mocks plugin
-date: 2023-08-13
+date: 2023-08-14
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 a8554b0822cd3..96b0d69a0b154 100644
--- a/api_docs/kbn_shared_ux_storybook_config.mdx
+++ b/api_docs/kbn_shared_ux_storybook_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config
title: "@kbn/shared-ux-storybook-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-storybook-config plugin
-date: 2023-08-13
+date: 2023-08-14
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 7f5b38d73c2da..08a5c0223b2c6 100644
--- a/api_docs/kbn_shared_ux_storybook_mock.mdx
+++ b/api_docs/kbn_shared_ux_storybook_mock.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock
title: "@kbn/shared-ux-storybook-mock"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-storybook-mock plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock']
---
import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx
index e40f2262b2fa5..98b4770aab5e9 100644
--- a/api_docs/kbn_shared_ux_utility.mdx
+++ b/api_docs/kbn_shared_ux_utility.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility
title: "@kbn/shared-ux-utility"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-utility plugin
-date: 2023-08-13
+date: 2023-08-14
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 912970743290a..134d8ed0bf2c7 100644
--- a/api_docs/kbn_slo_schema.mdx
+++ b/api_docs/kbn_slo_schema.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema
title: "@kbn/slo-schema"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/slo-schema plugin
-date: 2023-08-13
+date: 2023-08-14
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 1ebd0552bbd45..7f158fcd97870 100644
--- a/api_docs/kbn_some_dev_log.mdx
+++ b/api_docs/kbn_some_dev_log.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log
title: "@kbn/some-dev-log"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/some-dev-log plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log']
---
import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json';
diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx
index f41c956658d9a..35483e9d264a9 100644
--- a/api_docs/kbn_std.mdx
+++ b/api_docs/kbn_std.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std
title: "@kbn/std"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/std plugin
-date: 2023-08-13
+date: 2023-08-14
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 5f847c6f6ab06..b2a7582300d39 100644
--- a/api_docs/kbn_stdio_dev_helpers.mdx
+++ b/api_docs/kbn_stdio_dev_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers
title: "@kbn/stdio-dev-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/stdio-dev-helpers plugin
-date: 2023-08-13
+date: 2023-08-14
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 b4cfb934b98cc..438110c00e1c3 100644
--- a/api_docs/kbn_storybook.mdx
+++ b/api_docs/kbn_storybook.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook
title: "@kbn/storybook"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/storybook plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook']
---
import kbnStorybookObj from './kbn_storybook.devdocs.json';
diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx
index cb8850c5ac1fb..928d30178e2ce 100644
--- a/api_docs/kbn_telemetry_tools.mdx
+++ b/api_docs/kbn_telemetry_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools
title: "@kbn/telemetry-tools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/telemetry-tools plugin
-date: 2023-08-13
+date: 2023-08-14
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 e9b384ab38cd8..74aa221091be6 100644
--- a/api_docs/kbn_test.mdx
+++ b/api_docs/kbn_test.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test
title: "@kbn/test"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/test plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test']
---
import kbnTestObj from './kbn_test.devdocs.json';
diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx
index 6b468d8b239a3..5a4b60c9549e8 100644
--- a/api_docs/kbn_test_jest_helpers.mdx
+++ b/api_docs/kbn_test_jest_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers
title: "@kbn/test-jest-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/test-jest-helpers plugin
-date: 2023-08-13
+date: 2023-08-14
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 e5bb8621d4cf4..b0579f1ba8179 100644
--- a/api_docs/kbn_test_subj_selector.mdx
+++ b/api_docs/kbn_test_subj_selector.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector
title: "@kbn/test-subj-selector"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/test-subj-selector plugin
-date: 2023-08-13
+date: 2023-08-14
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 2470c81c2124a..a443716952c87 100644
--- a/api_docs/kbn_text_based_editor.mdx
+++ b/api_docs/kbn_text_based_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor
title: "@kbn/text-based-editor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/text-based-editor plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor']
---
import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json';
diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx
index 01efb97084a49..1b6652d1909f7 100644
--- a/api_docs/kbn_tooling_log.mdx
+++ b/api_docs/kbn_tooling_log.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log
title: "@kbn/tooling-log"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/tooling-log plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log']
---
import kbnToolingLogObj from './kbn_tooling_log.devdocs.json';
diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx
index 715a01ff90de0..5192212f7346e 100644
--- a/api_docs/kbn_ts_projects.mdx
+++ b/api_docs/kbn_ts_projects.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects
title: "@kbn/ts-projects"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ts-projects plugin
-date: 2023-08-13
+date: 2023-08-14
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 8e48ce2630320..7569cef02b6f4 100644
--- a/api_docs/kbn_typed_react_router_config.mdx
+++ b/api_docs/kbn_typed_react_router_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config
title: "@kbn/typed-react-router-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/typed-react-router-config plugin
-date: 2023-08-13
+date: 2023-08-14
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 4f25d7f913486..37d1b9f3151dc 100644
--- a/api_docs/kbn_ui_actions_browser.mdx
+++ b/api_docs/kbn_ui_actions_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser
title: "@kbn/ui-actions-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ui-actions-browser plugin
-date: 2023-08-13
+date: 2023-08-14
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 f1654b30b9dd0..ff89d87d4edc6 100644
--- a/api_docs/kbn_ui_shared_deps_src.mdx
+++ b/api_docs/kbn_ui_shared_deps_src.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src
title: "@kbn/ui-shared-deps-src"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ui-shared-deps-src plugin
-date: 2023-08-13
+date: 2023-08-14
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 812b6e5c2a40c..0e7925f6b98d7 100644
--- a/api_docs/kbn_ui_theme.mdx
+++ b/api_docs/kbn_ui_theme.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme
title: "@kbn/ui-theme"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ui-theme plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme']
---
import kbnUiThemeObj from './kbn_ui_theme.devdocs.json';
diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx
index 43b64c4ef368e..c062f65c96685 100644
--- a/api_docs/kbn_unified_field_list.mdx
+++ b/api_docs/kbn_unified_field_list.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list
title: "@kbn/unified-field-list"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/unified-field-list plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list']
---
import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json';
diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx
index 757287f0ae265..1141cd4b7c13d 100644
--- a/api_docs/kbn_url_state.mdx
+++ b/api_docs/kbn_url_state.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-url-state
title: "@kbn/url-state"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/url-state plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/url-state']
---
import kbnUrlStateObj from './kbn_url_state.devdocs.json';
diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx
index 1fd06033dfb05..fa39802014019 100644
--- a/api_docs/kbn_use_tracked_promise.mdx
+++ b/api_docs/kbn_use_tracked_promise.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise
title: "@kbn/use-tracked-promise"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/use-tracked-promise plugin
-date: 2023-08-13
+date: 2023-08-14
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 af8f1cd087fcf..4aad4f65b594c 100644
--- a/api_docs/kbn_user_profile_components.mdx
+++ b/api_docs/kbn_user_profile_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components
title: "@kbn/user-profile-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/user-profile-components plugin
-date: 2023-08-13
+date: 2023-08-14
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 2582de4d0946b..8f1a05d49235d 100644
--- a/api_docs/kbn_utility_types.mdx
+++ b/api_docs/kbn_utility_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types
title: "@kbn/utility-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/utility-types plugin
-date: 2023-08-13
+date: 2023-08-14
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 4935cd1a7d2c6..466da9673ceaa 100644
--- a/api_docs/kbn_utility_types_jest.mdx
+++ b/api_docs/kbn_utility_types_jest.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest
title: "@kbn/utility-types-jest"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/utility-types-jest plugin
-date: 2023-08-13
+date: 2023-08-14
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 b2887c06ac830..53bee6b556c59 100644
--- a/api_docs/kbn_utils.mdx
+++ b/api_docs/kbn_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils
title: "@kbn/utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/utils plugin
-date: 2023-08-13
+date: 2023-08-14
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 a8c939a4f18d2..66f254fdf07ec 100644
--- a/api_docs/kbn_visualization_ui_components.mdx
+++ b/api_docs/kbn_visualization_ui_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components
title: "@kbn/visualization-ui-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/visualization-ui-components plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components']
---
import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json';
diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx
index bc8814a14f1ad..c1ff33fcf24d7 100644
--- a/api_docs/kbn_yarn_lock_validator.mdx
+++ b/api_docs/kbn_yarn_lock_validator.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator
title: "@kbn/yarn-lock-validator"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/yarn-lock-validator plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator']
---
import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json';
diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx
index e7f00ec93fe19..e3cbffd21a448 100644
--- a/api_docs/kibana_overview.mdx
+++ b/api_docs/kibana_overview.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview
title: "kibanaOverview"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kibanaOverview plugin
-date: 2023-08-13
+date: 2023-08-14
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 9ba59e2577fa5..e25a9d43f22c7 100644
--- a/api_docs/kibana_react.mdx
+++ b/api_docs/kibana_react.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact
title: "kibanaReact"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kibanaReact plugin
-date: 2023-08-13
+date: 2023-08-14
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 25f19318b77c2..9b6fedf7ff309 100644
--- a/api_docs/kibana_utils.mdx
+++ b/api_docs/kibana_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils
title: "kibanaUtils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kibanaUtils plugin
-date: 2023-08-13
+date: 2023-08-14
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 ba6afe0facd96..4abc7b4276230 100644
--- a/api_docs/kubernetes_security.mdx
+++ b/api_docs/kubernetes_security.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity
title: "kubernetesSecurity"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kubernetesSecurity plugin
-date: 2023-08-13
+date: 2023-08-14
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 cb1291fa2946e..097f08300c7d6 100644
--- a/api_docs/lens.mdx
+++ b/api_docs/lens.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens
title: "lens"
image: https://source.unsplash.com/400x175/?github
description: API docs for the lens plugin
-date: 2023-08-13
+date: 2023-08-14
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 e8a40676a4304..bebd88a625a74 100644
--- a/api_docs/license_api_guard.mdx
+++ b/api_docs/license_api_guard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard
title: "licenseApiGuard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the licenseApiGuard plugin
-date: 2023-08-13
+date: 2023-08-14
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 c9d7c0ed40b4c..6adc5b985efe8 100644
--- a/api_docs/license_management.mdx
+++ b/api_docs/license_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement
title: "licenseManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the licenseManagement plugin
-date: 2023-08-13
+date: 2023-08-14
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 effd3f4ee78e2..0af1ee2fb396a 100644
--- a/api_docs/licensing.mdx
+++ b/api_docs/licensing.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing
title: "licensing"
image: https://source.unsplash.com/400x175/?github
description: API docs for the licensing plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing']
---
import licensingObj from './licensing.devdocs.json';
diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx
index 41593ab62ab68..4219a82f52bbb 100644
--- a/api_docs/lists.mdx
+++ b/api_docs/lists.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists
title: "lists"
image: https://source.unsplash.com/400x175/?github
description: API docs for the lists plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists']
---
import listsObj from './lists.devdocs.json';
diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx
index bd06d8c7d73dd..7aac1d98f9f2a 100644
--- a/api_docs/logs_shared.mdx
+++ b/api_docs/logs_shared.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared
title: "logsShared"
image: https://source.unsplash.com/400x175/?github
description: API docs for the logsShared plugin
-date: 2023-08-13
+date: 2023-08-14
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 3acbfa98ad041..b49f0cd90b55e 100644
--- a/api_docs/management.mdx
+++ b/api_docs/management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management
title: "management"
image: https://source.unsplash.com/400x175/?github
description: API docs for the management plugin
-date: 2023-08-13
+date: 2023-08-14
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 55becdd64b049..5683c0a213fcc 100644
--- a/api_docs/maps.mdx
+++ b/api_docs/maps.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps
title: "maps"
image: https://source.unsplash.com/400x175/?github
description: API docs for the maps plugin
-date: 2023-08-13
+date: 2023-08-14
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 1b241b092b068..35fcfdcb8f8c4 100644
--- a/api_docs/maps_ems.mdx
+++ b/api_docs/maps_ems.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms
title: "mapsEms"
image: https://source.unsplash.com/400x175/?github
description: API docs for the mapsEms plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms']
---
import mapsEmsObj from './maps_ems.devdocs.json';
diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx
index fc724a34471e8..ccca65b6fb7b1 100644
--- a/api_docs/ml.mdx
+++ b/api_docs/ml.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml
title: "ml"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ml plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml']
---
import mlObj from './ml.devdocs.json';
diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx
index 3150082fbec3d..92e219a6d9f66 100644
--- a/api_docs/monitoring.mdx
+++ b/api_docs/monitoring.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring
title: "monitoring"
image: https://source.unsplash.com/400x175/?github
description: API docs for the monitoring plugin
-date: 2023-08-13
+date: 2023-08-14
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 85a9ebebe1422..0d101157f8305 100644
--- a/api_docs/monitoring_collection.mdx
+++ b/api_docs/monitoring_collection.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection
title: "monitoringCollection"
image: https://source.unsplash.com/400x175/?github
description: API docs for the monitoringCollection plugin
-date: 2023-08-13
+date: 2023-08-14
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 412af1979e4f3..fda89cf97a82f 100644
--- a/api_docs/navigation.mdx
+++ b/api_docs/navigation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation
title: "navigation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the navigation plugin
-date: 2023-08-13
+date: 2023-08-14
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 3855ed00b7a4a..b78d2900dc3b8 100644
--- a/api_docs/newsfeed.mdx
+++ b/api_docs/newsfeed.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed
title: "newsfeed"
image: https://source.unsplash.com/400x175/?github
description: API docs for the newsfeed plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed']
---
import newsfeedObj from './newsfeed.devdocs.json';
diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx
index 9577cb5b0bf87..858cca841a8f3 100644
--- a/api_docs/notifications.mdx
+++ b/api_docs/notifications.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications
title: "notifications"
image: https://source.unsplash.com/400x175/?github
description: API docs for the notifications plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications']
---
import notificationsObj from './notifications.devdocs.json';
diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx
index 0f1eb39607477..fedab58d58ffa 100644
--- a/api_docs/observability.mdx
+++ b/api_docs/observability.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability
title: "observability"
image: https://source.unsplash.com/400x175/?github
description: API docs for the observability plugin
-date: 2023-08-13
+date: 2023-08-14
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 67d7606e739f0..4b2a196d26553 100644
--- a/api_docs/observability_a_i_assistant.mdx
+++ b/api_docs/observability_a_i_assistant.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant
title: "observabilityAIAssistant"
image: https://source.unsplash.com/400x175/?github
description: API docs for the observabilityAIAssistant plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant']
---
import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json';
diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx
index a48ba1df9f251..56c5c7dccdff3 100644
--- a/api_docs/observability_onboarding.mdx
+++ b/api_docs/observability_onboarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding
title: "observabilityOnboarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the observabilityOnboarding plugin
-date: 2023-08-13
+date: 2023-08-14
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 6077f68996f70..b76db7f7ca09e 100644
--- a/api_docs/observability_shared.mdx
+++ b/api_docs/observability_shared.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared
title: "observabilityShared"
image: https://source.unsplash.com/400x175/?github
description: API docs for the observabilityShared plugin
-date: 2023-08-13
+date: 2023-08-14
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 179380f974326..704c7e05ac18f 100644
--- a/api_docs/osquery.mdx
+++ b/api_docs/osquery.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery
title: "osquery"
image: https://source.unsplash.com/400x175/?github
description: API docs for the osquery plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery']
---
import osqueryObj from './osquery.devdocs.json';
diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx
index 18d6bfc5c906d..9904789db2832 100644
--- a/api_docs/plugin_directory.mdx
+++ b/api_docs/plugin_directory.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory
slug: /kibana-dev-docs/api-meta/plugin-api-directory
title: Directory
description: Directory of public APIs available through plugins or packages.
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx
index 44dfd5a138f47..2c9e774a4c05d 100644
--- a/api_docs/presentation_util.mdx
+++ b/api_docs/presentation_util.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil
title: "presentationUtil"
image: https://source.unsplash.com/400x175/?github
description: API docs for the presentationUtil plugin
-date: 2023-08-13
+date: 2023-08-14
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 6824724dae8c2..c3e197360dbc8 100644
--- a/api_docs/profiling.mdx
+++ b/api_docs/profiling.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling
title: "profiling"
image: https://source.unsplash.com/400x175/?github
description: API docs for the profiling plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling']
---
import profilingObj from './profiling.devdocs.json';
diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx
index f4d3b3f4d76f8..1e149f9813102 100644
--- a/api_docs/remote_clusters.mdx
+++ b/api_docs/remote_clusters.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters
title: "remoteClusters"
image: https://source.unsplash.com/400x175/?github
description: API docs for the remoteClusters plugin
-date: 2023-08-13
+date: 2023-08-14
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 90417c8861d7f..a290848e2103c 100644
--- a/api_docs/reporting.mdx
+++ b/api_docs/reporting.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting
title: "reporting"
image: https://source.unsplash.com/400x175/?github
description: API docs for the reporting plugin
-date: 2023-08-13
+date: 2023-08-14
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 cde875538dca5..b3cbcf458dfa2 100644
--- a/api_docs/rollup.mdx
+++ b/api_docs/rollup.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup
title: "rollup"
image: https://source.unsplash.com/400x175/?github
description: API docs for the rollup plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup']
---
import rollupObj from './rollup.devdocs.json';
diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx
index b9e1f60220177..25281eabeebef 100644
--- a/api_docs/rule_registry.mdx
+++ b/api_docs/rule_registry.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry
title: "ruleRegistry"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ruleRegistry plugin
-date: 2023-08-13
+date: 2023-08-14
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 fa9334db93611..7db817287652a 100644
--- a/api_docs/runtime_fields.mdx
+++ b/api_docs/runtime_fields.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields
title: "runtimeFields"
image: https://source.unsplash.com/400x175/?github
description: API docs for the runtimeFields plugin
-date: 2023-08-13
+date: 2023-08-14
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 407636dc98da0..4b10692940d3d 100644
--- a/api_docs/saved_objects.mdx
+++ b/api_docs/saved_objects.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects
title: "savedObjects"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjects plugin
-date: 2023-08-13
+date: 2023-08-14
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 ba9d44e0b763d..3ce507611fb8f 100644
--- a/api_docs/saved_objects_finder.mdx
+++ b/api_docs/saved_objects_finder.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder
title: "savedObjectsFinder"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsFinder plugin
-date: 2023-08-13
+date: 2023-08-14
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 2c001fafba8f4..057ed3d7ab7c4 100644
--- a/api_docs/saved_objects_management.mdx
+++ b/api_docs/saved_objects_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement
title: "savedObjectsManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsManagement plugin
-date: 2023-08-13
+date: 2023-08-14
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 34973b65c37ef..632a34440da91 100644
--- a/api_docs/saved_objects_tagging.mdx
+++ b/api_docs/saved_objects_tagging.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging
title: "savedObjectsTagging"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsTagging plugin
-date: 2023-08-13
+date: 2023-08-14
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 1ce6d29cf0b2a..26b92547623b3 100644
--- a/api_docs/saved_objects_tagging_oss.mdx
+++ b/api_docs/saved_objects_tagging_oss.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss
title: "savedObjectsTaggingOss"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsTaggingOss plugin
-date: 2023-08-13
+date: 2023-08-14
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 f7376d4a3b666..da0b4b5547935 100644
--- a/api_docs/saved_search.mdx
+++ b/api_docs/saved_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch
title: "savedSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedSearch plugin
-date: 2023-08-13
+date: 2023-08-14
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 ca1cf5a7dacf8..15b670e86770b 100644
--- a/api_docs/screenshot_mode.mdx
+++ b/api_docs/screenshot_mode.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode
title: "screenshotMode"
image: https://source.unsplash.com/400x175/?github
description: API docs for the screenshotMode plugin
-date: 2023-08-13
+date: 2023-08-14
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 afc9a38103249..4024e7f779c8b 100644
--- a/api_docs/screenshotting.mdx
+++ b/api_docs/screenshotting.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting
title: "screenshotting"
image: https://source.unsplash.com/400x175/?github
description: API docs for the screenshotting plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting']
---
import screenshottingObj from './screenshotting.devdocs.json';
diff --git a/api_docs/security.mdx b/api_docs/security.mdx
index c85cca792c05f..cc1abbd0f8ca5 100644
--- a/api_docs/security.mdx
+++ b/api_docs/security.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security
title: "security"
image: https://source.unsplash.com/400x175/?github
description: API docs for the security plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security']
---
import securityObj from './security.devdocs.json';
diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx
index 02c1e3712b4aa..89dbc17f84244 100644
--- a/api_docs/security_solution.mdx
+++ b/api_docs/security_solution.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution
title: "securitySolution"
image: https://source.unsplash.com/400x175/?github
description: API docs for the securitySolution plugin
-date: 2023-08-13
+date: 2023-08-14
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 39900b1347072..7fe58250bb650 100644
--- a/api_docs/security_solution_ess.mdx
+++ b/api_docs/security_solution_ess.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss
title: "securitySolutionEss"
image: https://source.unsplash.com/400x175/?github
description: API docs for the securitySolutionEss plugin
-date: 2023-08-13
+date: 2023-08-14
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 a1fb51f0a927c..0573ec951f98e 100644
--- a/api_docs/security_solution_serverless.mdx
+++ b/api_docs/security_solution_serverless.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless
title: "securitySolutionServerless"
image: https://source.unsplash.com/400x175/?github
description: API docs for the securitySolutionServerless plugin
-date: 2023-08-13
+date: 2023-08-14
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 bedd3dc339205..3990fb5bee0bd 100644
--- a/api_docs/serverless.mdx
+++ b/api_docs/serverless.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless
title: "serverless"
image: https://source.unsplash.com/400x175/?github
description: API docs for the serverless plugin
-date: 2023-08-13
+date: 2023-08-14
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 e41348c524d6d..c550ec317ce6d 100644
--- a/api_docs/serverless_observability.mdx
+++ b/api_docs/serverless_observability.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability
title: "serverlessObservability"
image: https://source.unsplash.com/400x175/?github
description: API docs for the serverlessObservability plugin
-date: 2023-08-13
+date: 2023-08-14
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 e37090a8ac9cc..2fd2f3f00da60 100644
--- a/api_docs/serverless_search.mdx
+++ b/api_docs/serverless_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch
title: "serverlessSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the serverlessSearch plugin
-date: 2023-08-13
+date: 2023-08-14
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 537f5c70f104e..eef4483c96568 100644
--- a/api_docs/session_view.mdx
+++ b/api_docs/session_view.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView
title: "sessionView"
image: https://source.unsplash.com/400x175/?github
description: API docs for the sessionView plugin
-date: 2023-08-13
+date: 2023-08-14
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 4e238b0b2a90b..0904554c292c9 100644
--- a/api_docs/share.mdx
+++ b/api_docs/share.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share
title: "share"
image: https://source.unsplash.com/400x175/?github
description: API docs for the share plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share']
---
import shareObj from './share.devdocs.json';
diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx
index baf53fa543738..4a120c21ab68a 100644
--- a/api_docs/snapshot_restore.mdx
+++ b/api_docs/snapshot_restore.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore
title: "snapshotRestore"
image: https://source.unsplash.com/400x175/?github
description: API docs for the snapshotRestore plugin
-date: 2023-08-13
+date: 2023-08-14
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 5ad8576afa341..8ed7756064380 100644
--- a/api_docs/spaces.mdx
+++ b/api_docs/spaces.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces
title: "spaces"
image: https://source.unsplash.com/400x175/?github
description: API docs for the spaces plugin
-date: 2023-08-13
+date: 2023-08-14
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 6e2bb18807a83..186a18ab193ca 100644
--- a/api_docs/stack_alerts.mdx
+++ b/api_docs/stack_alerts.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts
title: "stackAlerts"
image: https://source.unsplash.com/400x175/?github
description: API docs for the stackAlerts plugin
-date: 2023-08-13
+date: 2023-08-14
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 8a3f5bd84ea1a..4c7c25304f093 100644
--- a/api_docs/stack_connectors.mdx
+++ b/api_docs/stack_connectors.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors
title: "stackConnectors"
image: https://source.unsplash.com/400x175/?github
description: API docs for the stackConnectors plugin
-date: 2023-08-13
+date: 2023-08-14
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 00465fe98cbab..e14f833d5bd24 100644
--- a/api_docs/task_manager.mdx
+++ b/api_docs/task_manager.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager
title: "taskManager"
image: https://source.unsplash.com/400x175/?github
description: API docs for the taskManager plugin
-date: 2023-08-13
+date: 2023-08-14
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 e56450a21d459..c182fd0981e9a 100644
--- a/api_docs/telemetry.mdx
+++ b/api_docs/telemetry.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry
title: "telemetry"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetry plugin
-date: 2023-08-13
+date: 2023-08-14
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 053051f7c6929..1a6fbf191914e 100644
--- a/api_docs/telemetry_collection_manager.mdx
+++ b/api_docs/telemetry_collection_manager.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager
title: "telemetryCollectionManager"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryCollectionManager plugin
-date: 2023-08-13
+date: 2023-08-14
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 0c98fac73e7b2..9e1dc60792e39 100644
--- a/api_docs/telemetry_collection_xpack.mdx
+++ b/api_docs/telemetry_collection_xpack.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack
title: "telemetryCollectionXpack"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryCollectionXpack plugin
-date: 2023-08-13
+date: 2023-08-14
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 d897308e2390e..0c3aab7b95f3a 100644
--- a/api_docs/telemetry_management_section.mdx
+++ b/api_docs/telemetry_management_section.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection
title: "telemetryManagementSection"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryManagementSection plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection']
---
import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json';
diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx
index 6dc152693c18a..5c624aa7cfdf2 100644
--- a/api_docs/text_based_languages.mdx
+++ b/api_docs/text_based_languages.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages
title: "textBasedLanguages"
image: https://source.unsplash.com/400x175/?github
description: API docs for the textBasedLanguages plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages']
---
import textBasedLanguagesObj from './text_based_languages.devdocs.json';
diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx
index 2f35fb1be01b3..5e260b4abe28f 100644
--- a/api_docs/threat_intelligence.mdx
+++ b/api_docs/threat_intelligence.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence
title: "threatIntelligence"
image: https://source.unsplash.com/400x175/?github
description: API docs for the threatIntelligence plugin
-date: 2023-08-13
+date: 2023-08-14
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 9ba865b96210a..1a2dca4aea889 100644
--- a/api_docs/timelines.mdx
+++ b/api_docs/timelines.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines
title: "timelines"
image: https://source.unsplash.com/400x175/?github
description: API docs for the timelines plugin
-date: 2023-08-13
+date: 2023-08-14
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 6bf4eb760c2db..382eeead91684 100644
--- a/api_docs/transform.mdx
+++ b/api_docs/transform.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform
title: "transform"
image: https://source.unsplash.com/400x175/?github
description: API docs for the transform plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform']
---
import transformObj from './transform.devdocs.json';
diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx
index 46efd91e5c2c2..fcc734c3f09da 100644
--- a/api_docs/triggers_actions_ui.mdx
+++ b/api_docs/triggers_actions_ui.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi
title: "triggersActionsUi"
image: https://source.unsplash.com/400x175/?github
description: API docs for the triggersActionsUi plugin
-date: 2023-08-13
+date: 2023-08-14
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 cf36a1a0ee3f4..43486dd88e172 100644
--- a/api_docs/ui_actions.mdx
+++ b/api_docs/ui_actions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions
title: "uiActions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the uiActions plugin
-date: 2023-08-13
+date: 2023-08-14
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 4292f4ddd3675..f1d7577bfad5b 100644
--- a/api_docs/ui_actions_enhanced.mdx
+++ b/api_docs/ui_actions_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced
title: "uiActionsEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the uiActionsEnhanced plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced']
---
import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json';
diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx
index d473425911519..d5bd027711d8d 100644
--- a/api_docs/unified_histogram.mdx
+++ b/api_docs/unified_histogram.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram
title: "unifiedHistogram"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedHistogram plugin
-date: 2023-08-13
+date: 2023-08-14
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 404dea96f5559..18f84c402819e 100644
--- a/api_docs/unified_search.mdx
+++ b/api_docs/unified_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch
title: "unifiedSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedSearch plugin
-date: 2023-08-13
+date: 2023-08-14
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 e2ab7fc621110..cee7a119f1c60 100644
--- a/api_docs/unified_search_autocomplete.mdx
+++ b/api_docs/unified_search_autocomplete.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete
title: "unifiedSearch.autocomplete"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedSearch.autocomplete plugin
-date: 2023-08-13
+date: 2023-08-14
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 a6b5dfbcb0061..a193b5337552d 100644
--- a/api_docs/uptime.mdx
+++ b/api_docs/uptime.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime
title: "uptime"
image: https://source.unsplash.com/400x175/?github
description: API docs for the uptime plugin
-date: 2023-08-13
+date: 2023-08-14
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 a29f473a97c70..6231c8d2a44c2 100644
--- a/api_docs/url_forwarding.mdx
+++ b/api_docs/url_forwarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding
title: "urlForwarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the urlForwarding plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding']
---
import urlForwardingObj from './url_forwarding.devdocs.json';
diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx
index fe5b039ce89b2..f078dbfb5c1db 100644
--- a/api_docs/usage_collection.mdx
+++ b/api_docs/usage_collection.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection
title: "usageCollection"
image: https://source.unsplash.com/400x175/?github
description: API docs for the usageCollection plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection']
---
import usageCollectionObj from './usage_collection.devdocs.json';
diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx
index f8cc738b46b88..14dec8f744b33 100644
--- a/api_docs/ux.mdx
+++ b/api_docs/ux.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux
title: "ux"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ux plugin
-date: 2023-08-13
+date: 2023-08-14
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 94c75a3a7481b..4653c4b7718b1 100644
--- a/api_docs/vis_default_editor.mdx
+++ b/api_docs/vis_default_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor
title: "visDefaultEditor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visDefaultEditor plugin
-date: 2023-08-13
+date: 2023-08-14
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 e8ca2d3472e88..2a380b0bb70a4 100644
--- a/api_docs/vis_type_gauge.mdx
+++ b/api_docs/vis_type_gauge.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge
title: "visTypeGauge"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeGauge plugin
-date: 2023-08-13
+date: 2023-08-14
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 c0f927de3013d..7670a16ed6863 100644
--- a/api_docs/vis_type_heatmap.mdx
+++ b/api_docs/vis_type_heatmap.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap
title: "visTypeHeatmap"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeHeatmap plugin
-date: 2023-08-13
+date: 2023-08-14
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 2e83d7c9149a4..baa878684cee9 100644
--- a/api_docs/vis_type_pie.mdx
+++ b/api_docs/vis_type_pie.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie
title: "visTypePie"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypePie plugin
-date: 2023-08-13
+date: 2023-08-14
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 386aa3b151685..d1dadcdd02cfe 100644
--- a/api_docs/vis_type_table.mdx
+++ b/api_docs/vis_type_table.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable
title: "visTypeTable"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeTable plugin
-date: 2023-08-13
+date: 2023-08-14
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 efc2bf42c629c..3b57c35b97e42 100644
--- a/api_docs/vis_type_timelion.mdx
+++ b/api_docs/vis_type_timelion.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion
title: "visTypeTimelion"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeTimelion plugin
-date: 2023-08-13
+date: 2023-08-14
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 6e91ad6cdf228..d493cfd41c38a 100644
--- a/api_docs/vis_type_timeseries.mdx
+++ b/api_docs/vis_type_timeseries.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries
title: "visTypeTimeseries"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeTimeseries plugin
-date: 2023-08-13
+date: 2023-08-14
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 41172a5f0fd57..193c56102658a 100644
--- a/api_docs/vis_type_vega.mdx
+++ b/api_docs/vis_type_vega.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega
title: "visTypeVega"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeVega plugin
-date: 2023-08-13
+date: 2023-08-14
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 d41bc7b65a0ce..93c86a70626e4 100644
--- a/api_docs/vis_type_vislib.mdx
+++ b/api_docs/vis_type_vislib.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib
title: "visTypeVislib"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeVislib plugin
-date: 2023-08-13
+date: 2023-08-14
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 04dcf11054516..024931acad4e6 100644
--- a/api_docs/vis_type_xy.mdx
+++ b/api_docs/vis_type_xy.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy
title: "visTypeXy"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeXy plugin
-date: 2023-08-13
+date: 2023-08-14
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 5db66b08eb2f2..b2fda95c7a9cb 100644
--- a/api_docs/visualizations.mdx
+++ b/api_docs/visualizations.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations
title: "visualizations"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visualizations plugin
-date: 2023-08-13
+date: 2023-08-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations']
---
import visualizationsObj from './visualizations.devdocs.json';
From 5dd5ec218228b6ed8ae304e5d42d0eb7465ae14d Mon Sep 17 00:00:00 2001
From: Candace Park <56409205+parkiino@users.noreply.github.com>
Date: Mon, 14 Aug 2023 01:45:32 -0400
Subject: [PATCH 45/46] [Fleet][Agent Policy][Agent Tamper Protection] UI / API
guard agent tamper protection only available if security defend integration
present (#162196)
## Summary
UI
- [x] When there is no elastic defend integration present, the agent
tamper protection (`is_protected`) switch and instruction link are
disabled and there is an info tooltip explaining why the switch is
disabled
API
- [x] Requires the elastic defend integration to be present, in order to
set `is_protected` to true. Will allow the user to create the agent
policy and not throw an error, but will keep `is_protected` as false and
log a warning in the kibana server. In the next release, the response
will be modified to send back a 201 with the relevant messaging.
- [x] Sets `is_protected` to false when a user deletes the elastic
defend package policy
## Screenshots
### No Elastic Defend integration installed
---
.../common/services/agent_policies_helpers.ts | 13 +++-
.../services/agent_policy_config.test.ts | 8 +--
.../generate_new_agent_policy.test.ts | 3 +-
x-pack/plugins/fleet/common/services/index.ts | 1 +
.../index.test.tsx | 61 ++++++++++++++++---
.../agent_policy_advanced_fields/index.tsx | 34 +++++++++--
.../fleet/server/services/agent_policy.ts | 45 ++++++++++++--
.../fleet/server/services/package_policy.ts | 9 +++
.../apis/agent_policy/agent_policy.ts | 7 +--
9 files changed, 150 insertions(+), 31 deletions(-)
diff --git a/x-pack/plugins/fleet/common/services/agent_policies_helpers.ts b/x-pack/plugins/fleet/common/services/agent_policies_helpers.ts
index 52ce24634886e..1ebe49ef4ed39 100644
--- a/x-pack/plugins/fleet/common/services/agent_policies_helpers.ts
+++ b/x-pack/plugins/fleet/common/services/agent_policies_helpers.ts
@@ -5,8 +5,13 @@
* 2.0.
*/
-import type { AgentPolicy } from '../types';
-import { FLEET_SERVER_PACKAGE, FLEET_APM_PACKAGE, FLEET_SYNTHETICS_PACKAGE } from '../constants';
+import type { NewAgentPolicy, AgentPolicy } from '../types';
+import {
+ FLEET_SERVER_PACKAGE,
+ FLEET_APM_PACKAGE,
+ FLEET_SYNTHETICS_PACKAGE,
+ FLEET_ENDPOINT_PACKAGE,
+} from '../constants';
export function policyHasFleetServer(agentPolicy: AgentPolicy) {
if (!agentPolicy.package_policies) {
@@ -26,6 +31,10 @@ export function policyHasSyntheticsIntegration(agentPolicy: AgentPolicy) {
return policyHasIntegration(agentPolicy, FLEET_SYNTHETICS_PACKAGE);
}
+export function policyHasEndpointSecurity(agentPolicy: Partial) {
+ return policyHasIntegration(agentPolicy as AgentPolicy, FLEET_ENDPOINT_PACKAGE);
+}
+
function policyHasIntegration(agentPolicy: AgentPolicy, packageName: string) {
if (!agentPolicy.package_policies) {
return false;
diff --git a/x-pack/plugins/fleet/common/services/agent_policy_config.test.ts b/x-pack/plugins/fleet/common/services/agent_policy_config.test.ts
index 70ee2ae631a3c..e9bd5aa23b5d9 100644
--- a/x-pack/plugins/fleet/common/services/agent_policy_config.test.ts
+++ b/x-pack/plugins/fleet/common/services/agent_policy_config.test.ts
@@ -5,15 +5,15 @@
* 2.0.
*/
+import { licenseMock } from '@kbn/licensing-plugin/common/licensing.mock';
import { pick } from 'lodash';
-import { licenseMock } from '@kbn/licensing-plugin/common/licensing.mock';
+import { createAgentPolicyMock } from '../mocks';
import {
isAgentPolicyValidForLicense,
unsetAgentPolicyAccordingToLicenseLevel,
} from './agent_policy_config';
-import { generateNewAgentPolicyWithDefaults } from './generate_new_agent_policy';
describe('agent policy config and licenses', () => {
const Platinum = licenseMock.createLicense({ license: { type: 'platinum', mode: 'platinum' } });
@@ -34,13 +34,13 @@ describe('agent policy config and licenses', () => {
});
describe('unsetAgentPolicyAccordingToLicenseLevel', () => {
it('resets all paid features to default if license is gold', () => {
- const defaults = pick(generateNewAgentPolicyWithDefaults(), 'is_protected');
+ const defaults = pick(createAgentPolicyMock(), 'is_protected');
const partialPolicy = { is_protected: true };
const retPolicy = unsetAgentPolicyAccordingToLicenseLevel(partialPolicy, Gold);
expect(retPolicy).toEqual(defaults);
});
it('does not change paid features if license is platinum', () => {
- const expected = pick(generateNewAgentPolicyWithDefaults(), 'is_protected');
+ const expected = pick(createAgentPolicyMock(), 'is_protected');
const partialPolicy = { is_protected: false };
const expected2 = { is_protected: true };
const partialPolicy2 = { is_protected: true };
diff --git a/x-pack/plugins/fleet/common/services/generate_new_agent_policy.test.ts b/x-pack/plugins/fleet/common/services/generate_new_agent_policy.test.ts
index 97e63be4bd701..bc4a6b55f75ee 100644
--- a/x-pack/plugins/fleet/common/services/generate_new_agent_policy.test.ts
+++ b/x-pack/plugins/fleet/common/services/generate_new_agent_policy.test.ts
@@ -27,7 +27,6 @@ describe('generateNewAgentPolicyWithDefaults', () => {
description: 'test description',
namespace: 'test-namespace',
monitoring_enabled: ['logs'],
- is_protected: true,
});
expect(newAgentPolicy).toEqual({
@@ -36,7 +35,7 @@ describe('generateNewAgentPolicyWithDefaults', () => {
namespace: 'test-namespace',
monitoring_enabled: ['logs'],
inactivity_timeout: 1209600,
- is_protected: true,
+ is_protected: false,
});
});
});
diff --git a/x-pack/plugins/fleet/common/services/index.ts b/x-pack/plugins/fleet/common/services/index.ts
index abf06ac54b07c..04f74404ba382 100644
--- a/x-pack/plugins/fleet/common/services/index.ts
+++ b/x-pack/plugins/fleet/common/services/index.ts
@@ -66,6 +66,7 @@ export { agentStatusesToSummary } from './agent_statuses_to_summary';
export {
policyHasFleetServer,
policyHasAPMIntegration,
+ policyHasEndpointSecurity,
policyHasSyntheticsIntegration,
} from './agent_policies_helpers';
diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.test.tsx
index 019395c0cb5f6..fe21159ab347b 100644
--- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.test.tsx
+++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.test.tsx
@@ -17,11 +17,13 @@ import { allowedExperimentalValues } from '../../../../../../../common/experimen
import { ExperimentalFeaturesService } from '../../../../../../services/experimental_features';
-import type { NewAgentPolicy, AgentPolicy } from '../../../../../../../common/types';
+import { createAgentPolicyMock, createPackagePolicyMock } from '../../../../../../../common/mocks';
+import type { AgentPolicy, NewAgentPolicy } from '../../../../../../../common/types';
import { useLicense } from '../../../../../../hooks/use_license';
import type { LicenseService } from '../../../../../../../common/services';
+import { generateNewAgentPolicyWithDefaults } from '../../../../../../../common/services';
import type { ValidationResults } from '../agent_policy_validation';
@@ -34,12 +36,7 @@ const mockedUseLicence = useLicense as jest.MockedFunction;
describe('Agent policy advanced options content', () => {
let testRender: TestRenderer;
let renderResult: RenderResult;
-
- const mockAgentPolicy: Partial = {
- name: 'some-agent-policy',
- is_managed: false,
- };
-
+ let mockAgentPolicy: Partial