From b94363417231d5c90536b5de2b6c218591e170df Mon Sep 17 00:00:00 2001
From: Nathan Reese
Date: Thu, 3 Nov 2022 15:23:07 -0600
Subject: [PATCH 01/31] update chromium MD5 checksum (#144553)
* update chromium MD5 checksum
* only update md5 for intel
---
x-pack/plugins/screenshotting/server/browsers/chromium/paths.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/x-pack/plugins/screenshotting/server/browsers/chromium/paths.ts b/x-pack/plugins/screenshotting/server/browsers/chromium/paths.ts
index a04308c27dd8e..8ac6469696612 100644
--- a/x-pack/plugins/screenshotting/server/browsers/chromium/paths.ts
+++ b/x-pack/plugins/screenshotting/server/browsers/chromium/paths.ts
@@ -45,7 +45,7 @@ export class ChromiumArchivePaths {
platform: 'darwin',
architecture: 'x64',
archiveFilename: 'chrome-mac.zip',
- archiveChecksum: '5afc0d49865d55b69ea1ff65b9cc5794',
+ archiveChecksum: 'dd4d44ad97ba2fef5dc47d7f2a39ccaa',
binaryChecksum: '4a7a663b2656d66ce975b00a30df3ab4',
binaryRelativePath: 'chrome-mac/Chromium.app/Contents/MacOS/Chromium',
location: 'common',
From 22be0dfecfce0bebfe0cfa0f79c959d8d2a71c47 Mon Sep 17 00:00:00 2001
From: Dominique Clarke
Date: Thu, 3 Nov 2022 20:16:24 -0400
Subject: [PATCH 02/31] [Synthetics] project monitors - POST create/update
(#143578)
* unskip monitor state scoping tests
* add describe.only
* unskip monitor state scoping test
* add retry logic
* mark old project monitor formatter as legacy
* add new create project monitor api
* [CI] Auto-commit changed files from 'node scripts/eslint --no-cache --fix'
* Update x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts
* Update x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts
* error handling
* update route verb
* [CI] Auto-commit changed files from 'node scripts/precommit_hook.js --ref HEAD~1..HEAD --fix'
* add request limit
* adjust verb in tests
* [CI] Auto-commit changed files from 'node scripts/precommit_hook.js --ref HEAD~1..HEAD --fix'
* [CI] Auto-commit changed files from 'node scripts/precommit_hook.js --ref HEAD~1..HEAD --fix'
* seperate create and update actions
* Revert "seperate create and update actions"
This reverts commit abe30ee8ee62854466ab9f7dfaf05c9473642ab2.
* update api paths and verbs
* update test
* add unit testing
* adjust imports
* update legacy project monitor formatter
* [CI] Auto-commit changed files from 'node scripts/precommit_hook.js --ref HEAD~1..HEAD --fix'
* update import
* [CI] Auto-commit changed files from 'node scripts/eslint --no-cache --fix'
* update tests
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
---
.../synthetics/common/constants/rest_api.ts | 2 +
.../monitor_types_project.ts | 6 +
.../plugins/synthetics/server/routes/index.ts | 4 +-
.../monitor_cruds/add_monitor_project.ts | 54 +-
.../add_monitor_project_legacy.ts | 84 +
.../monitor_cruds/delete_monitor_project.ts | 2 +-
.../project_monitor_formatter.test.ts | 72 -
.../project_monitor_formatter.ts | 291 +--
.../project_monitor_formatter_legacy.test.ts | 653 +++++
.../project_monitor_formatter_legacy.ts | 534 +++++
.../apis/synthetics/add_monitor_project.ts | 1468 +++---------
.../synthetics/add_monitor_project_legacy.ts | 2127 +++++++++++++++++
.../apis/synthetics/delete_monitor_project.ts | 14 +-
.../apis/synthetics/get_monitor_project.ts | 14 +-
.../api_integration/apis/synthetics/index.ts | 1 +
.../uptime/rest/sample_data/test_policy.ts | 26 +-
16 files changed, 3939 insertions(+), 1413 deletions(-)
create mode 100644 x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project_legacy.ts
create mode 100644 x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter_legacy.test.ts
create mode 100644 x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter_legacy.ts
create mode 100644 x-pack/test/api_integration/apis/synthetics/add_monitor_project_legacy.ts
diff --git a/x-pack/plugins/synthetics/common/constants/rest_api.ts b/x-pack/plugins/synthetics/common/constants/rest_api.ts
index 33bd608d8f5ec..eaf3ba8c36b14 100644
--- a/x-pack/plugins/synthetics/common/constants/rest_api.ts
+++ b/x-pack/plugins/synthetics/common/constants/rest_api.ts
@@ -49,5 +49,7 @@ export enum API_URLS {
// Project monitor public endpoint
SYNTHETICS_MONITORS_PROJECT = '/api/synthetics/project/{projectName}/monitors',
+ SYNTHETICS_MONITORS_PROJECT_UPDATE = '/api/synthetics/project/{projectName}/monitors/_bulk_update',
+ SYNTHETICS_MONITORS_PROJECT_DELETE = '/api/synthetics/project/{projectName}/monitors/_bulk_delete',
SYNTHETICS_MONITORS_PROJECT_LEGACY = '/api/synthetics/service/project/monitors',
}
diff --git a/x-pack/plugins/synthetics/common/runtime_types/monitor_management/monitor_types_project.ts b/x-pack/plugins/synthetics/common/runtime_types/monitor_management/monitor_types_project.ts
index ef5f6a23b4413..b5ce7c06200fc 100644
--- a/x-pack/plugins/synthetics/common/runtime_types/monitor_management/monitor_types_project.ts
+++ b/x-pack/plugins/synthetics/common/runtime_types/monitor_management/monitor_types_project.ts
@@ -45,6 +45,10 @@ export const ProjectMonitorCodec = t.intersection([
]);
export const ProjectMonitorsRequestCodec = t.interface({
+ monitors: t.array(ProjectMonitorCodec),
+});
+
+export const LegacyProjectMonitorsRequestCodec = t.interface({
project: t.string,
keep_stale: t.boolean,
monitors: t.array(ProjectMonitorCodec),
@@ -69,6 +73,8 @@ export type ProjectMonitorThrottlingConfig = t.TypeOf;
+export type LegacyProjectMonitorsRequest = t.TypeOf;
+
export type ProjectMonitorsRequest = t.TypeOf;
export type ProjectMonitorsResponse = t.TypeOf;
diff --git a/x-pack/plugins/synthetics/server/routes/index.ts b/x-pack/plugins/synthetics/server/routes/index.ts
index c1c06215c8c16..546dda039ba22 100644
--- a/x-pack/plugins/synthetics/server/routes/index.ts
+++ b/x-pack/plugins/synthetics/server/routes/index.ts
@@ -27,6 +27,7 @@ import { installIndexTemplatesRoute } from './synthetics_service/install_index_t
import { editSyntheticsMonitorRoute } from './monitor_cruds/edit_monitor';
import { addSyntheticsMonitorRoute } from './monitor_cruds/add_monitor';
import { addSyntheticsProjectMonitorRoute } from './monitor_cruds/add_monitor_project';
+import { addSyntheticsProjectMonitorRouteLegacy } from './monitor_cruds/add_monitor_project_legacy';
import { syntheticsGetPingsRoute } from './pings';
import { createGetCurrentStatusRoute } from './status/current_status';
import {
@@ -37,6 +38,7 @@ import { getHasZipUrlMonitorRoute } from './fleet/get_has_zip_url_monitors';
export const syntheticsAppRestApiRoutes: SyntheticsRestApiRouteFactory[] = [
addSyntheticsMonitorRoute,
+ addSyntheticsProjectMonitorRoute,
getSyntheticsEnablementRoute,
deleteSyntheticsMonitorRoute,
deleteSyntheticsMonitorProjectRoute,
@@ -59,5 +61,5 @@ export const syntheticsAppRestApiRoutes: SyntheticsRestApiRouteFactory[] = [
];
export const syntheticsAppStreamingApiRoutes: SyntheticsStreamingRouteFactory[] = [
- addSyntheticsProjectMonitorRoute,
+ addSyntheticsProjectMonitorRouteLegacy,
];
diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project.ts
index 533690de30bed..0d1eea6cf419d 100644
--- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project.ts
+++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project.ts
@@ -5,25 +5,24 @@
* 2.0.
*/
import { schema } from '@kbn/config-schema';
-import { UMServerLibs } from '../../legacy_uptime/lib/lib';
+import { i18n } from '@kbn/i18n';
import { ProjectMonitor } from '../../../common/runtime_types';
-import { SyntheticsStreamingRouteFactory } from '../../legacy_uptime/routes/types';
+import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types';
import { API_URLS } from '../../../common/constants';
import { getAllLocations } from '../../synthetics_service/get_all_locations';
import { ProjectMonitorFormatter } from '../../synthetics_service/project_monitor/project_monitor_formatter';
const MAX_PAYLOAD_SIZE = 1048576 * 20; // 20MiB
-export const addSyntheticsProjectMonitorRoute: SyntheticsStreamingRouteFactory = (
- libs: UMServerLibs
-) => ({
+export const addSyntheticsProjectMonitorRoute: SyntheticsRestApiRouteFactory = () => ({
method: 'PUT',
- path: API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY,
+ path: API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE,
validate: {
+ params: schema.object({
+ projectName: schema.string(),
+ }),
body: schema.object({
- project: schema.string(),
- keep_stale: schema.boolean(),
monitors: schema.arrayOf(schema.any()),
}),
},
@@ -34,15 +33,25 @@ export const addSyntheticsProjectMonitorRoute: SyntheticsStreamingRouteFactory =
},
handler: async ({
request,
+ response,
savedObjectsClient,
server,
syntheticsMonitorClient,
- subject,
}): Promise => {
+ const { projectName } = request.params;
+ const decodedProjectName = decodeURI(projectName);
+ const monitors = (request.body?.monitors as ProjectMonitor[]) || [];
+ const spaceId = server.spaces.spacesService.getSpaceId(request);
+
+ if (monitors.length > 250) {
+ return response.badRequest({
+ body: {
+ message: REQUEST_TOO_LARGE,
+ },
+ });
+ }
+
try {
- const monitors = (request.body?.monitors as ProjectMonitor[]) || [];
- const spaceId = server.spaces.spacesService.getSpaceId(request);
- const { keep_stale: keepStale, project: projectId } = request.body || {};
const { publicLocations, privateLocations } = await getAllLocations(
server,
syntheticsMonitorClient,
@@ -51,9 +60,8 @@ export const addSyntheticsProjectMonitorRoute: SyntheticsStreamingRouteFactory =
const encryptedSavedObjectsClient = server.encryptedSavedObjects.getClient();
const pushMonitorFormatter = new ProjectMonitorFormatter({
- projectId,
+ projectId: decodedProjectName,
spaceId,
- keepStale,
locations: publicLocations,
privateLocations,
encryptedSavedObjectsClient,
@@ -62,23 +70,23 @@ export const addSyntheticsProjectMonitorRoute: SyntheticsStreamingRouteFactory =
server,
syntheticsMonitorClient,
request,
- subject,
});
await pushMonitorFormatter.configureAllProjectMonitors();
- subject?.next({
+ return {
createdMonitors: pushMonitorFormatter.createdMonitors,
updatedMonitors: pushMonitorFormatter.updatedMonitors,
- staleMonitors: pushMonitorFormatter.staleMonitors,
- deletedMonitors: pushMonitorFormatter.deletedMonitors,
failedMonitors: pushMonitorFormatter.failedMonitors,
- failedStaleMonitors: pushMonitorFormatter.failedStaleMonitors,
- });
+ };
} catch (error) {
- subject?.error(error);
- } finally {
- subject?.complete();
+ server.logger.error(`Error adding monitors to project ${decodedProjectName}`);
+ throw error;
}
},
});
+
+export const REQUEST_TOO_LARGE = i18n.translate('xpack.synthetics.server.project.delete.toolarge', {
+ defaultMessage:
+ 'Delete request payload is too large. Please send a max of 250 monitors to delete per request',
+});
diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project_legacy.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project_legacy.ts
new file mode 100644
index 0000000000000..f8f29e46c1fad
--- /dev/null
+++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project_legacy.ts
@@ -0,0 +1,84 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+import { schema } from '@kbn/config-schema';
+import { UMServerLibs } from '../../legacy_uptime/lib/lib';
+import { ProjectMonitor } from '../../../common/runtime_types';
+
+import { SyntheticsStreamingRouteFactory } from '../../legacy_uptime/routes/types';
+import { API_URLS } from '../../../common/constants';
+import { getAllLocations } from '../../synthetics_service/get_all_locations';
+import { ProjectMonitorFormatterLegacy } from '../../synthetics_service/project_monitor/project_monitor_formatter_legacy';
+
+const MAX_PAYLOAD_SIZE = 1048576 * 20; // 20MiB
+
+export const addSyntheticsProjectMonitorRouteLegacy: SyntheticsStreamingRouteFactory = (
+ libs: UMServerLibs
+) => ({
+ method: 'PUT',
+ path: API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY,
+ validate: {
+ body: schema.object({
+ project: schema.string(),
+ keep_stale: schema.boolean(),
+ monitors: schema.arrayOf(schema.any()),
+ }),
+ },
+ options: {
+ body: {
+ maxBytes: MAX_PAYLOAD_SIZE,
+ },
+ },
+ handler: async ({
+ request,
+ savedObjectsClient,
+ server,
+ syntheticsMonitorClient,
+ subject,
+ }): Promise => {
+ try {
+ const monitors = (request.body?.monitors as ProjectMonitor[]) || [];
+ const spaceId = server.spaces.spacesService.getSpaceId(request);
+ const { keep_stale: keepStale, project: projectId } = request.body || {};
+ const { publicLocations, privateLocations } = await getAllLocations(
+ server,
+ syntheticsMonitorClient,
+ savedObjectsClient
+ );
+ const encryptedSavedObjectsClient = server.encryptedSavedObjects.getClient();
+
+ const pushMonitorFormatter = new ProjectMonitorFormatterLegacy({
+ projectId,
+ spaceId,
+ keepStale,
+ locations: publicLocations,
+ privateLocations,
+ encryptedSavedObjectsClient,
+ savedObjectsClient,
+ monitors,
+ server,
+ syntheticsMonitorClient,
+ request,
+ subject,
+ });
+
+ await pushMonitorFormatter.configureAllProjectMonitors();
+
+ subject?.next({
+ createdMonitors: pushMonitorFormatter.createdMonitors,
+ updatedMonitors: pushMonitorFormatter.updatedMonitors,
+ staleMonitors: pushMonitorFormatter.staleMonitors,
+ deletedMonitors: pushMonitorFormatter.deletedMonitors,
+ failedMonitors: pushMonitorFormatter.failedMonitors,
+ failedStaleMonitors: pushMonitorFormatter.failedStaleMonitors,
+ });
+ } catch (error) {
+ subject?.error(error);
+ } finally {
+ subject?.complete();
+ }
+ },
+});
diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/delete_monitor_project.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/delete_monitor_project.ts
index 3deb7a1be2170..67c937fb78a7b 100644
--- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/delete_monitor_project.ts
+++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/delete_monitor_project.ts
@@ -16,7 +16,7 @@ import { deleteMonitorBulk } from './bulk_cruds/delete_monitor_bulk';
export const deleteSyntheticsMonitorProjectRoute: SyntheticsRestApiRouteFactory = () => ({
method: 'DELETE',
- path: API_URLS.SYNTHETICS_MONITORS_PROJECT,
+ path: API_URLS.SYNTHETICS_MONITORS_PROJECT_DELETE,
validate: {
body: schema.object({
monitors: schema.arrayOf(schema.string()),
diff --git a/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.test.ts b/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.test.ts
index 2566c6a358fba..28de75ed511d3 100644
--- a/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.test.ts
+++ b/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.test.ts
@@ -18,7 +18,6 @@ import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters';
import { encryptedSavedObjectsMock } from '@kbn/encrypted-saved-objects-plugin/server/mocks';
import { SyntheticsMonitorClient } from '../synthetics_monitor/synthetics_monitor_client';
import { httpServerMock } from '@kbn/core-http-server-mocks';
-import { Subject } from 'rxjs';
import { formatSecrets } from '../utils';
import * as telemetryHooks from '../../routes/telemetry/monitor_upgrade_sender';
@@ -141,14 +140,9 @@ describe('ProjectMonitorFormatter', () => {
const monitorClient = new SyntheticsMonitorClient(syntheticsService, serverMock);
it('should return errors', async () => {
- const testSubject = new Subject();
-
- testSubject.next = jest.fn();
-
const pushMonitorFormatter = new ProjectMonitorFormatter({
projectId: 'test-project',
spaceId: 'default-space',
- keepStale: false,
locations,
privateLocations,
encryptedSavedObjectsClient,
@@ -157,32 +151,18 @@ describe('ProjectMonitorFormatter', () => {
server: serverMock,
syntheticsMonitorClient: monitorClient,
request: kibanaRequest,
- subject: testSubject,
});
pushMonitorFormatter.getProjectMonitorsForProject = jest.fn().mockResolvedValue([]);
await pushMonitorFormatter.configureAllProjectMonitors();
- expect(testSubject.next).toHaveBeenNthCalledWith(
- 1,
- 'check if title is present 10 0: failed to create or update monitor'
- );
- expect(testSubject.next).toHaveBeenNthCalledWith(
- 2,
- 'check if title is present 10 1: failed to create or update monitor'
- );
-
expect({
createdMonitors: pushMonitorFormatter.createdMonitors,
updatedMonitors: pushMonitorFormatter.updatedMonitors,
- staleMonitors: pushMonitorFormatter.staleMonitors,
- deletedMonitors: pushMonitorFormatter.deletedMonitors,
failedMonitors: pushMonitorFormatter.failedMonitors,
- failedStaleMonitors: pushMonitorFormatter.failedStaleMonitors,
}).toStrictEqual({
createdMonitors: [],
- deletedMonitors: [],
failedMonitors: [
{
details: "Cannot read properties of undefined (reading 'authz')",
@@ -197,15 +177,11 @@ describe('ProjectMonitorFormatter', () => {
reason: 'Failed to create or update monitor',
},
],
- failedStaleMonitors: [],
- staleMonitors: [],
updatedMonitors: [],
});
});
it('throws fleet permission error', async () => {
- const testSubject = new Subject();
-
serverMock.fleet = {
authz: {
fromRequest: jest
@@ -217,7 +193,6 @@ describe('ProjectMonitorFormatter', () => {
const pushMonitorFormatter = new ProjectMonitorFormatter({
projectId: 'test-project',
spaceId: 'default-space',
- keepStale: false,
locations,
privateLocations,
encryptedSavedObjectsClient,
@@ -226,7 +201,6 @@ describe('ProjectMonitorFormatter', () => {
server: serverMock,
syntheticsMonitorClient: monitorClient,
request: kibanaRequest,
- subject: testSubject,
});
pushMonitorFormatter.getProjectMonitorsForProject = jest.fn().mockResolvedValue([]);
@@ -236,13 +210,9 @@ describe('ProjectMonitorFormatter', () => {
expect({
createdMonitors: pushMonitorFormatter.createdMonitors,
updatedMonitors: pushMonitorFormatter.updatedMonitors,
- staleMonitors: pushMonitorFormatter.staleMonitors,
- deletedMonitors: pushMonitorFormatter.deletedMonitors,
failedMonitors: pushMonitorFormatter.failedMonitors,
- failedStaleMonitors: pushMonitorFormatter.failedStaleMonitors,
}).toStrictEqual({
createdMonitors: [],
- deletedMonitors: [],
failedMonitors: [
{
details: INSUFFICIENT_FLEET_PERMISSIONS,
@@ -257,15 +227,11 @@ describe('ProjectMonitorFormatter', () => {
reason: 'Failed to create or update monitor',
},
],
- failedStaleMonitors: [],
- staleMonitors: [],
updatedMonitors: [],
});
});
it('catches errors from bulk edit method', async () => {
- const testSubject = new Subject();
-
serverMock.fleet = {
authz: {
fromRequest: jest
@@ -277,7 +243,6 @@ describe('ProjectMonitorFormatter', () => {
const pushMonitorFormatter = new ProjectMonitorFormatter({
projectId: 'test-project',
spaceId: 'default-space',
- keepStale: false,
locations,
privateLocations,
encryptedSavedObjectsClient,
@@ -286,7 +251,6 @@ describe('ProjectMonitorFormatter', () => {
server: serverMock,
syntheticsMonitorClient: monitorClient,
request: kibanaRequest,
- subject: testSubject,
});
pushMonitorFormatter.getProjectMonitorsForProject = jest.fn().mockResolvedValue([]);
@@ -296,15 +260,10 @@ describe('ProjectMonitorFormatter', () => {
expect({
createdMonitors: pushMonitorFormatter.createdMonitors,
updatedMonitors: pushMonitorFormatter.updatedMonitors,
- staleMonitors: pushMonitorFormatter.staleMonitors,
- deletedMonitors: pushMonitorFormatter.deletedMonitors,
failedMonitors: pushMonitorFormatter.failedMonitors,
- failedStaleMonitors: pushMonitorFormatter.failedStaleMonitors,
}).toEqual({
createdMonitors: [],
updatedMonitors: [],
- staleMonitors: [],
- deletedMonitors: [],
failedMonitors: [
{
details: "Cannot read properties of undefined (reading 'buildPackagePolicyFromPackage')",
@@ -312,13 +271,10 @@ describe('ProjectMonitorFormatter', () => {
reason: 'Failed to create 2 monitors',
},
],
- failedStaleMonitors: [],
});
});
it('configures project monitors when there are errors', async () => {
- const testSubject = new Subject();
-
serverMock.fleet = {
authz: {
fromRequest: jest
@@ -332,7 +288,6 @@ describe('ProjectMonitorFormatter', () => {
const pushMonitorFormatter = new ProjectMonitorFormatter({
projectId: 'test-project',
spaceId: 'default-space',
- keepStale: false,
locations,
privateLocations,
encryptedSavedObjectsClient,
@@ -341,7 +296,6 @@ describe('ProjectMonitorFormatter', () => {
server: serverMock,
syntheticsMonitorClient: monitorClient,
request: kibanaRequest,
- subject: testSubject,
});
pushMonitorFormatter.getProjectMonitorsForProject = jest.fn().mockResolvedValue([]);
@@ -351,15 +305,10 @@ describe('ProjectMonitorFormatter', () => {
expect({
createdMonitors: pushMonitorFormatter.createdMonitors,
updatedMonitors: pushMonitorFormatter.updatedMonitors,
- staleMonitors: pushMonitorFormatter.staleMonitors,
- deletedMonitors: pushMonitorFormatter.deletedMonitors,
failedMonitors: pushMonitorFormatter.failedMonitors,
- failedStaleMonitors: pushMonitorFormatter.failedStaleMonitors,
}).toEqual({
createdMonitors: [],
updatedMonitors: [],
- staleMonitors: [],
- deletedMonitors: [],
failedMonitors: [
{
details: "Cannot read properties of undefined (reading 'buildPackagePolicyFromPackage')",
@@ -367,13 +316,10 @@ describe('ProjectMonitorFormatter', () => {
reason: 'Failed to create 2 monitors',
},
],
- failedStaleMonitors: [],
});
});
it('shows errors thrown by fleet api', async () => {
- const testSubject = new Subject();
-
serverMock.fleet = {
authz: {
fromRequest: jest
@@ -388,7 +334,6 @@ describe('ProjectMonitorFormatter', () => {
const pushMonitorFormatter = new ProjectMonitorFormatter({
projectId: 'test-project',
spaceId: 'default-space',
- keepStale: false,
locations,
privateLocations,
encryptedSavedObjectsClient,
@@ -397,7 +342,6 @@ describe('ProjectMonitorFormatter', () => {
server: serverMock,
syntheticsMonitorClient: monitorClient,
request: kibanaRequest,
- subject: testSubject,
});
pushMonitorFormatter.getProjectMonitorsForProject = jest.fn().mockResolvedValue([]);
@@ -407,15 +351,10 @@ describe('ProjectMonitorFormatter', () => {
expect({
createdMonitors: pushMonitorFormatter.createdMonitors,
updatedMonitors: pushMonitorFormatter.updatedMonitors,
- staleMonitors: pushMonitorFormatter.staleMonitors,
- deletedMonitors: pushMonitorFormatter.deletedMonitors,
failedMonitors: pushMonitorFormatter.failedMonitors,
- failedStaleMonitors: pushMonitorFormatter.failedStaleMonitors,
}).toEqual({
createdMonitors: [],
updatedMonitors: [],
- staleMonitors: [],
- deletedMonitors: [],
failedMonitors: [
{
details:
@@ -424,13 +363,10 @@ describe('ProjectMonitorFormatter', () => {
payload: payloadData,
},
],
- failedStaleMonitors: [],
});
});
it('creates project monitors when no errors', async () => {
- const testSubject = new Subject();
-
serverMock.fleet = {
authz: {
fromRequest: jest
@@ -450,7 +386,6 @@ describe('ProjectMonitorFormatter', () => {
const pushMonitorFormatter = new ProjectMonitorFormatter({
projectId: 'test-project',
spaceId: 'default-space',
- keepStale: false,
locations,
privateLocations,
encryptedSavedObjectsClient,
@@ -459,7 +394,6 @@ describe('ProjectMonitorFormatter', () => {
server: serverMock,
syntheticsMonitorClient: monitorClient,
request: kibanaRequest,
- subject: testSubject,
});
pushMonitorFormatter.getProjectMonitorsForProject = jest.fn().mockResolvedValue([]);
@@ -492,17 +426,11 @@ describe('ProjectMonitorFormatter', () => {
expect({
createdMonitors: pushMonitorFormatter.createdMonitors,
updatedMonitors: pushMonitorFormatter.updatedMonitors,
- staleMonitors: pushMonitorFormatter.staleMonitors,
- deletedMonitors: pushMonitorFormatter.deletedMonitors,
failedMonitors: pushMonitorFormatter.failedMonitors,
- failedStaleMonitors: pushMonitorFormatter.failedStaleMonitors,
}).toEqual({
createdMonitors: ['check if title is present 10 0', 'check if title is present 10 1'],
updatedMonitors: [],
- staleMonitors: [],
- deletedMonitors: [],
failedMonitors: [],
- failedStaleMonitors: [],
});
});
});
diff --git a/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts b/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts
index a430d25bcb407..35e85fe5cd03d 100644
--- a/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts
+++ b/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts
@@ -4,10 +4,8 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
-import type { Subject } from 'rxjs';
-import { isEqual, omit } from 'lodash';
-import pMap from 'p-map';
import { KibanaRequest } from '@kbn/core/server';
+import pMap from 'p-map';
import {
SavedObjectsUpdateResponse,
SavedObjectsClientContract,
@@ -16,7 +14,6 @@ import {
import { i18n } from '@kbn/i18n';
import { EncryptedSavedObjectsClient } from '@kbn/encrypted-saved-objects-plugin/server';
import { syncNewMonitorBulk } from '../../routes/monitor_cruds/bulk_cruds/add_monitor_bulk';
-import { deleteMonitorBulk } from '../../routes/monitor_cruds/bulk_cruds/delete_monitor_bulk';
import { SyntheticsMonitorClient } from '../synthetics_monitor/synthetics_monitor_client';
import { syncEditedMonitorBulk } from '../../routes/monitor_cruds/bulk_cruds/edit_monitor_bulk';
import {
@@ -40,12 +37,6 @@ import {
} from '../../routes/monitor_cruds/monitor_validation';
import { normalizeProjectMonitor } from './normalizers';
-interface StaleMonitor {
- stale: boolean;
- journeyId: string;
- savedObjectId: string;
-}
-type StaleMonitorMap = Record;
type FailedError = Array<{ id?: string; reason: string; details: string; payload?: object }>;
export const INSUFFICIENT_FLEET_PERMISSIONS = i18n.translate(
@@ -56,34 +47,48 @@ export const INSUFFICIENT_FLEET_PERMISSIONS = i18n.translate(
}
);
+export const CANNOT_UPDATE_MONITOR_TO_DIFFERENT_TYPE = i18n.translate(
+ 'xpack.synthetics.service.projectMonitors.cannotUpdateMonitorToDifferentType',
+ {
+ defaultMessage: 'Cannot update monitor to different type.',
+ }
+);
+
+export const FAILED_TO_UPDATE_MONITOR = i18n.translate(
+ 'xpack.synthetics.service.projectMonitors.failedToUpdateMonitor',
+ {
+ defaultMessage: 'Failed to create or update monitor',
+ }
+);
+
+export const FAILED_TO_UPDATE_MONITORS = i18n.translate(
+ 'xpack.synthetics.service.projectMonitors.failedToUpdateMonitors',
+ {
+ defaultMessage: 'Failed to create or update monitors',
+ }
+);
+
export class ProjectMonitorFormatter {
private projectId: string;
private spaceId: string;
- private keepStale: boolean;
private locations: Locations;
private privateLocations: PrivateLocation[];
private savedObjectsClient: SavedObjectsClientContract;
private encryptedSavedObjectsClient: EncryptedSavedObjectsClient;
- private staleMonitorsMap: StaleMonitorMap = {};
private monitors: ProjectMonitor[] = [];
public createdMonitors: string[] = [];
- public deletedMonitors: string[] = [];
public updatedMonitors: string[] = [];
- public staleMonitors: string[] = [];
public failedMonitors: FailedError = [];
- public failedStaleMonitors: FailedError = [];
private server: UptimeServerSetup;
private projectFilter: string;
private syntheticsMonitorClient: SyntheticsMonitorClient;
private request: KibanaRequest;
- private subject?: Subject;
private writeIntegrationPoliciesPermissions?: boolean;
constructor({
locations,
privateLocations,
- keepStale,
savedObjectsClient,
encryptedSavedObjectsClient,
projectId,
@@ -92,11 +97,9 @@ export class ProjectMonitorFormatter {
server,
syntheticsMonitorClient,
request,
- subject,
}: {
locations: Locations;
privateLocations: PrivateLocation[];
- keepStale: boolean;
savedObjectsClient: SavedObjectsClientContract;
encryptedSavedObjectsClient: EncryptedSavedObjectsClient;
projectId: string;
@@ -105,13 +108,11 @@ export class ProjectMonitorFormatter {
server: UptimeServerSetup;
syntheticsMonitorClient: SyntheticsMonitorClient;
request: KibanaRequest;
- subject?: Subject;
}) {
this.projectId = projectId;
this.spaceId = spaceId;
this.locations = locations;
this.privateLocations = privateLocations;
- this.keepStale = keepStale;
this.savedObjectsClient = savedObjectsClient;
this.encryptedSavedObjectsClient = encryptedSavedObjectsClient;
this.syntheticsMonitorClient = syntheticsMonitorClient;
@@ -119,12 +120,10 @@ export class ProjectMonitorFormatter {
this.server = server;
this.projectFilter = `${syntheticsMonitorType}.attributes.${ConfigKey.PROJECT_ID}: "${this.projectId}"`;
this.request = request;
- this.subject = subject;
}
public configureAllProjectMonitors = async () => {
const existingMonitors = await this.getProjectMonitorsForProject();
- this.staleMonitorsMap = await this.getStaleMonitorsMap(existingMonitors);
const normalizedNewMonitors: SyntheticsMonitor[] = [];
const normalizedUpdateMonitors: Array<{
@@ -142,11 +141,29 @@ export class ProjectMonitorFormatter {
monitor,
});
if (normM) {
- if (previousMonitor) {
+ if (
+ previousMonitor &&
+ previousMonitor.attributes[ConfigKey.MONITOR_TYPE] !== normM[ConfigKey.MONITOR_TYPE]
+ ) {
+ this.failedMonitors.push({
+ reason: CANNOT_UPDATE_MONITOR_TO_DIFFERENT_TYPE,
+ details: i18n.translate(
+ 'xpack.synthetics.service.projectMonitors.cannotUpdateMonitorToDifferentTypeDetails',
+ {
+ defaultMessage:
+ 'Monitor {monitorId} of type {previousType} cannot be updated to type {currentType}. Please delete the monitor first and try again.',
+ values: {
+ currentType: monitor.type,
+ previousType: previousMonitor.attributes[ConfigKey.MONITOR_TYPE],
+ monitorId: monitor.id,
+ },
+ }
+ ),
+ payload: monitor,
+ });
+ continue;
+ } else if (previousMonitor) {
this.updatedMonitors.push(monitor.id);
- if (this.staleMonitorsMap[monitor.id]) {
- this.staleMonitorsMap[monitor.id].stale = false;
- }
normalizedUpdateMonitors.push({ monitor: normM as MonitorFields, previousMonitor });
} else {
normalizedNewMonitors.push(normM as MonitorFields);
@@ -156,28 +173,7 @@ export class ProjectMonitorFormatter {
await this.createMonitorsBulk(normalizedNewMonitors);
- const { updatedCount } = await this.updateMonitorsBulk(normalizedUpdateMonitors);
-
- if (normalizedUpdateMonitors.length > 0) {
- let updateMessage = '';
- if (updatedCount > 0) {
- updateMessage = `${updatedCount} monitor${
- updatedCount > 1 ? 's' : ''
- } updated successfully.`;
- }
-
- const noChanges = normalizedUpdateMonitors.length - updatedCount;
- let noChangeMessage = '';
- if (noChanges > 0) {
- noChangeMessage = `${noChanges} monitor${noChanges > 1 ? 's' : ''} found with no changes.`;
- }
-
- this.handleStreamingMessage({
- message: `${updateMessage} ${noChangeMessage}`,
- });
- }
-
- await this.handleStaleMonitors();
+ await this.updateMonitorsBulk(normalizedUpdateMonitors);
};
validatePermissions = async ({ monitor }: { monitor: ProjectMonitor }) => {
@@ -210,9 +206,6 @@ export class ProjectMonitorFormatter {
if (errors.length) {
this.failedMonitors.push(...errors);
- this.handleStreamingMessage({
- message: `${monitor.id}: failed to create or update monitor`,
- });
return null;
}
@@ -244,36 +237,13 @@ export class ProjectMonitorFormatter {
this.server.logger.error(e);
this.failedMonitors.push({
id: monitor.id,
- reason: 'Failed to create or update monitor',
+ reason: FAILED_TO_UPDATE_MONITOR,
details: e.message,
payload: monitor,
});
- this.handleStreamingMessage({ message: `${monitor.id}: failed to create or update monitor` });
- if (this.staleMonitorsMap[monitor.id]) {
- this.staleMonitorsMap[monitor.id].stale = false;
- }
}
};
- private getStaleMonitorsMap = async (
- existingMonitors: Array>
- ): Promise => {
- const staleMonitors: StaleMonitorMap = {};
-
- existingMonitors.forEach((savedObject) => {
- const journeyId = (savedObject.attributes as SyntheticsMonitor)[ConfigKey.JOURNEY_ID];
- if (journeyId) {
- staleMonitors[journeyId] = {
- stale: true,
- savedObjectId: savedObject.id,
- journeyId,
- };
- }
- });
-
- return staleMonitors;
- };
-
public getProjectMonitorsForProject = async () => {
const finder = this.savedObjectsClient.createPointInTimeFinder({
type: syntheticsMonitorType,
@@ -308,32 +278,34 @@ export class ProjectMonitorFormatter {
if (newMonitors && newMonitors.length === monitors.length) {
this.createdMonitors.push(...monitors.map((monitor) => monitor[ConfigKey.JOURNEY_ID]!));
- this.handleStreamingMessage({
- message: `${monitors.length} monitor${
- monitors.length > 1 ? 's' : ''
- } created successfully.`,
- });
} else {
this.failedMonitors.push({
- reason: `Failed to create ${monitors.length} monitors`,
- details: 'Failed to create monitors',
+ reason: i18n.translate(
+ 'xpack.synthetics.service.projectMonitors.failedToCreateXMonitors',
+ {
+ defaultMessage: 'Failed to create {length} monitors',
+ values: {
+ length: monitors.length,
+ },
+ }
+ ),
+ details: FAILED_TO_UPDATE_MONITORS,
payload: monitors,
});
- this.handleStreamingMessage({
- message: `Failed to create ${monitors.length} monitors`,
- });
}
}
} catch (e) {
this.server.logger.error(e);
this.failedMonitors.push({
- reason: `Failed to create ${monitors.length} monitors`,
+ reason: i18n.translate('xpack.synthetics.service.projectMonitors.failedToCreateXMonitors', {
+ defaultMessage: 'Failed to create {length} monitors',
+ values: {
+ length: monitors.length,
+ },
+ }),
details: e.message,
payload: monitors,
});
- this.handleStreamingMessage({
- message: `Failed to create ${monitors.length} monitors`,
- });
}
};
@@ -375,27 +347,21 @@ export class ProjectMonitorFormatter {
const previousMonitor = monitors[i].previousMonitor;
const normalizedMonitor = monitors[i].monitor;
- const keysToOmit = [ConfigKey.REVISION, ConfigKey.MONITOR_QUERY_ID, ConfigKey.CONFIG_ID];
- const { attributes: normalizedPreviousMonitorAttributes } =
- normalizeSecrets(decryptedPreviousMonitor);
- const hasMonitorBeenEdited = !isEqual(
- omit(normalizedMonitor, keysToOmit),
- omit(normalizedPreviousMonitorAttributes, keysToOmit)
- );
+ const {
+ attributes: { [ConfigKey.REVISION]: _, ...normalizedPreviousMonitorAttributes },
+ } = normalizeSecrets(decryptedPreviousMonitor);
- if (hasMonitorBeenEdited) {
- const monitorWithRevision = formatSecrets({
- ...normalizedPreviousMonitorAttributes,
- ...normalizedMonitor,
- revision: (previousMonitor.attributes[ConfigKey.REVISION] || 0) + 1,
- });
- monitorsToUpdate.push({
- normalizedMonitor,
- previousMonitor,
- monitorWithRevision,
- decryptedPreviousMonitor,
- });
- }
+ const monitorWithRevision = formatSecrets({
+ ...normalizedPreviousMonitorAttributes,
+ ...normalizedMonitor,
+ revision: (previousMonitor.attributes[ConfigKey.REVISION] || 0) + 1,
+ });
+ monitorsToUpdate.push({
+ normalizedMonitor,
+ previousMonitor,
+ monitorWithRevision,
+ decryptedPreviousMonitor,
+ });
}
const { editedMonitors } = await syncEditedMonitorBulk({
@@ -414,108 +380,6 @@ export class ProjectMonitorFormatter {
};
};
- private handleStaleMonitors = async () => {
- try {
- const staleMonitorsList = Object.values(this.staleMonitorsMap).filter(
- (monitor) => monitor.stale === true
- );
-
- const encryptedMonitors = await this.savedObjectsClient.bulkGet(
- staleMonitorsList.map((staleMonitor) => ({
- id: staleMonitor.savedObjectId,
- type: syntheticsMonitorType,
- }))
- );
-
- let monitors = encryptedMonitors.saved_objects;
-
- const hasPrivateMonitor = monitors.some((monitor) =>
- monitor.attributes.locations.some((location) => !location.isServiceManaged)
- );
-
- if (hasPrivateMonitor) {
- const {
- integrations: { writeIntegrationPolicies },
- } = await this.server.fleet.authz.fromRequest(this.request);
- if (!writeIntegrationPolicies) {
- monitors = monitors.filter((monitor) => {
- const hasPrivateLocation = monitor.attributes.locations.some(
- (location) => !location.isServiceManaged
- );
- if (hasPrivateLocation) {
- const journeyId = (monitor.attributes as MonitorFields)[ConfigKey.JOURNEY_ID]!;
- const monitorName = (monitor.attributes as MonitorFields)[ConfigKey.NAME]!;
- this.handleStreamingMessage({
- message: `Monitor ${journeyId} could not be deleted`,
- });
- this.failedStaleMonitors.push({
- id: journeyId,
- reason: 'Failed to delete stale monitor',
- details: `Unable to delete Synthetics package policy for monitor ${monitorName}. Fleet write permissions are needed to use Synthetics private locations.`,
- });
- }
- return !hasPrivateLocation;
- });
- }
- }
-
- const chunkSize = 100;
- for (let i = 0; i < monitors.length; i += chunkSize) {
- const chunkMonitors = monitors.slice(i, i + chunkSize);
- try {
- if (!this.keepStale) {
- await deleteMonitorBulk({
- monitors: chunkMonitors,
- savedObjectsClient: this.savedObjectsClient,
- server: this.server,
- syntheticsMonitorClient: this.syntheticsMonitorClient,
- request: this.request,
- });
-
- for (const sm of chunkMonitors) {
- const journeyId = (sm.attributes as MonitorFields)[ConfigKey.JOURNEY_ID]!;
-
- this.deletedMonitors.push(journeyId);
- this.handleStreamingMessage({
- message: `Monitor ${journeyId} deleted successfully`,
- });
- }
- } else {
- chunkMonitors.forEach((sm) => {
- const journeyId = (sm.attributes as MonitorFields)[ConfigKey.JOURNEY_ID]!;
- this.staleMonitors.push(journeyId);
- });
- }
- } catch (e) {
- chunkMonitors.forEach((sm) => {
- const journeyId = (sm.attributes as MonitorFields)[ConfigKey.JOURNEY_ID]!;
-
- this.handleStreamingMessage({
- message: `Monitor ${journeyId} could not be deleted`,
- });
- this.failedStaleMonitors.push({
- id: journeyId,
- reason: 'Failed to delete stale monitor',
- details: e.message,
- payload: staleMonitorsList.find(
- (staleMonitor) => staleMonitor.savedObjectId === sm.id
- ),
- });
- });
- this.server.logger.error(e);
- }
- }
- } catch (e) {
- this.server.logger.error(e);
- }
- };
-
- private handleStreamingMessage = ({ message }: { message: string }) => {
- if (this.subject) {
- this.subject?.next(message);
- }
- };
-
private validateMonitor = ({
validationResult,
monitorId,
@@ -531,9 +395,6 @@ export class ProjectMonitorFormatter {
details,
payload: validationPayload,
});
- if (this.staleMonitorsMap[monitorId]) {
- this.staleMonitorsMap[monitorId].stale = false;
- }
}
return validationResult;
};
diff --git a/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter_legacy.test.ts b/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter_legacy.test.ts
new file mode 100644
index 0000000000000..14df60edfc4e2
--- /dev/null
+++ b/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter_legacy.test.ts
@@ -0,0 +1,653 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+import { loggerMock } from '@kbn/logging-mocks';
+import { savedObjectsClientMock } from '@kbn/core/server/mocks';
+import {
+ INSUFFICIENT_FLEET_PERMISSIONS,
+ ProjectMonitorFormatterLegacy,
+} from './project_monitor_formatter_legacy';
+import { ConfigKey, DataStream, LocationStatus } from '../../../common/runtime_types';
+import { DEFAULT_FIELDS } from '../../../common/constants/monitor_defaults';
+import { times } from 'lodash';
+import { SyntheticsService } from '../synthetics_service';
+import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters';
+import { encryptedSavedObjectsMock } from '@kbn/encrypted-saved-objects-plugin/server/mocks';
+import { SyntheticsMonitorClient } from '../synthetics_monitor/synthetics_monitor_client';
+import { httpServerMock } from '@kbn/core-http-server-mocks';
+import { Subject } from 'rxjs';
+import { formatSecrets } from '../utils';
+
+import * as telemetryHooks from '../../routes/telemetry/monitor_upgrade_sender';
+
+const testMonitors = [
+ {
+ type: 'browser',
+ throttling: { download: 5, upload: 3, latency: 20 },
+ schedule: 3,
+ locations: [],
+ privateLocations: ['Test private location'],
+ params: { url: 'http://localhost:8080' },
+ playwrightOptions: {
+ userAgent:
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
+ viewport: { width: 375, height: 667 },
+ deviceScaleFactor: 2,
+ isMobile: true,
+ hasTouch: true,
+ headless: true,
+ },
+ name: 'check if title is present 10 0',
+ id: 'check if title is present 10 0',
+ tags: [],
+ content:
+ 'UEsDBBQACAAIAAAAIQAAAAAAAAAAAAAAAAAQAAAAYmFzaWMuam91cm5leS50c2WQQU7DQAxF9znFV8QiUUOmXcCCUMQl2NdMnWbKJDMaO6Ilyt0JASQkNv9Z1teTZWNAIqwP5kU4iZGOug863u7uDXsSddbIddCOl0kMX6iPnsVoOAYxryTO1ucwpoGvtUrm+hiSYsLProIoxwp8iWwVM9oUeuTP/9V5k7UhofCscNhj2yx4xN2CzabElOHXWRxsx/YNroU69QwniImFB8Vui5vJzYcKxYRIJ66WTNQL5hL7p1WD9aYi9zQOtgPFGPNqecJ1sCj+tAB6J6erpj4FDcW3qh6TL5u1Mq/8yjn7BFBLBwhGDIWc4QAAAEkBAABQSwECLQMUAAgACAAAACEARgyFnOEAAABJAQAAEAAAAAAAAAAAACAApIEAAAAAYmFzaWMuam91cm5leS50c1BLBQYAAAAAAQABAD4AAAAfAQAAAAA=',
+ filter: { match: 'check if title is present 10 0' },
+ hash: 'lleklrkelkj',
+ },
+ {
+ type: 'browser',
+ throttling: { download: 5, upload: 3, latency: 20 },
+ schedule: 3,
+ locations: [],
+ privateLocations: ['Test private location'],
+ params: { url: 'http://localhost:8080' },
+ playwrightOptions: {
+ userAgent:
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
+ viewport: { width: 375, height: 667 },
+ deviceScaleFactor: 2,
+ isMobile: true,
+ hasTouch: true,
+ headless: true,
+ },
+ name: 'check if title is present 10 1',
+ id: 'check if title is present 10 1',
+ tags: [],
+ content:
+ 'UEsDBBQACAAIAAAAIQAAAAAAAAAAAAAAAAAQAAAAYmFzaWMuam91cm5leS50c2WQQU7DQAxF9znFV8QiUUOmXcCCUMQl2NdMnWbKJDMaO6Ilyt0JASQkNv9Z1teTZWNAIqwP5kU4iZGOug863u7uDXsSddbIddCOl0kMX6iPnsVoOAYxryTO1ucwpoGvtUrm+hiSYsLProIoxwp8iWwVM9oUeuTP/9V5k7UhofCscNhj2yx4xN2CzabElOHXWRxsx/YNroU69QwniImFB8Vui5vJzYcKxYRIJ66WTNQL5hL7p1WD9aYi9zQOtgPFGPNqecJ1sCj+tAB6J6erpj4FDcW3qh6TL5u1Mq/8yjn7BFBLBwhGDIWc4QAAAEkBAABQSwECLQMUAAgACAAAACEARgyFnOEAAABJAQAAEAAAAAAAAAAAACAApIEAAAAAYmFzaWMuam91cm5leS50c1BLBQYAAAAAAQABAD4AAAAfAQAAAAA=',
+ filter: { match: 'check if title is present 10 1' },
+ hash: 'lleklrkelkj',
+ },
+];
+
+const privateLocations = times(1).map((n) => {
+ return {
+ id: `loc-${n}`,
+ label: 'Test private location',
+ geo: {
+ lat: 0,
+ lon: 0,
+ },
+ isServiceManaged: false,
+ agentPolicyId: `loc-${n}`,
+ concurrentMonitors: 1,
+ };
+});
+
+describe('ProjectMonitorFormatterLegacy', () => {
+ const mockEsClient = {
+ search: jest.fn(),
+ };
+ const logger = loggerMock.create();
+
+ const kibanaRequest = httpServerMock.createKibanaRequest();
+
+ const soClient = savedObjectsClientMock.create();
+
+ const serverMock: UptimeServerSetup = {
+ logger,
+ uptimeEsClient: mockEsClient,
+ authSavedObjectsClient: soClient,
+ config: {
+ service: {
+ username: 'dev',
+ password: '12345',
+ manifestUrl: 'http://localhost:8080/api/manifest',
+ },
+ },
+ spaces: {
+ spacesService: {
+ getSpaceId: jest.fn().mockReturnValue('test-space'),
+ },
+ },
+ } as unknown as UptimeServerSetup;
+
+ const syntheticsService = new SyntheticsService(serverMock);
+
+ syntheticsService.addConfig = jest.fn();
+ syntheticsService.editConfig = jest.fn();
+ syntheticsService.deleteConfigs = jest.fn();
+
+ const encryptedSavedObjectsClient = encryptedSavedObjectsMock.createStart().getClient();
+
+ const locations = times(3).map((n) => {
+ return {
+ id: `loc-${n}`,
+ label: `Location ${n}`,
+ url: `https://example.com/${n}`,
+ geo: {
+ lat: 0,
+ lon: 0,
+ },
+ isServiceManaged: true,
+ status: LocationStatus.GA,
+ };
+ });
+
+ const monitorClient = new SyntheticsMonitorClient(syntheticsService, serverMock);
+
+ it('should return errors', async () => {
+ const testSubject = new Subject();
+
+ testSubject.next = jest.fn();
+
+ const pushMonitorFormatter = new ProjectMonitorFormatterLegacy({
+ projectId: 'test-project',
+ spaceId: 'default-space',
+ keepStale: false,
+ locations,
+ privateLocations,
+ encryptedSavedObjectsClient,
+ savedObjectsClient: soClient,
+ monitors: testMonitors,
+ server: serverMock,
+ syntheticsMonitorClient: monitorClient,
+ request: kibanaRequest,
+ subject: testSubject,
+ });
+
+ pushMonitorFormatter.getProjectMonitorsForProject = jest.fn().mockResolvedValue([]);
+
+ await pushMonitorFormatter.configureAllProjectMonitors();
+
+ expect(testSubject.next).toHaveBeenNthCalledWith(
+ 1,
+ 'check if title is present 10 0: failed to create or update monitor'
+ );
+ expect(testSubject.next).toHaveBeenNthCalledWith(
+ 2,
+ 'check if title is present 10 1: failed to create or update monitor'
+ );
+
+ expect({
+ createdMonitors: pushMonitorFormatter.createdMonitors,
+ updatedMonitors: pushMonitorFormatter.updatedMonitors,
+ staleMonitors: pushMonitorFormatter.staleMonitors,
+ deletedMonitors: pushMonitorFormatter.deletedMonitors,
+ failedMonitors: pushMonitorFormatter.failedMonitors,
+ failedStaleMonitors: pushMonitorFormatter.failedStaleMonitors,
+ }).toStrictEqual({
+ createdMonitors: [],
+ deletedMonitors: [],
+ failedMonitors: [
+ {
+ details: "Cannot read properties of undefined (reading 'authz')",
+ id: 'check if title is present 10 0',
+ payload: testMonitors[0],
+ reason: 'Failed to create or update monitor',
+ },
+ {
+ details: "Cannot read properties of undefined (reading 'authz')",
+ id: 'check if title is present 10 1',
+ payload: testMonitors[1],
+ reason: 'Failed to create or update monitor',
+ },
+ ],
+ failedStaleMonitors: [],
+ staleMonitors: [],
+ updatedMonitors: [],
+ });
+ });
+
+ it('throws fleet permission error', async () => {
+ const testSubject = new Subject();
+
+ serverMock.fleet = {
+ authz: {
+ fromRequest: jest
+ .fn()
+ .mockResolvedValue({ integrations: { writeIntegrationPolicies: false } }),
+ },
+ } as any;
+
+ const pushMonitorFormatter = new ProjectMonitorFormatterLegacy({
+ projectId: 'test-project',
+ spaceId: 'default-space',
+ keepStale: false,
+ locations,
+ privateLocations,
+ encryptedSavedObjectsClient,
+ savedObjectsClient: soClient,
+ monitors: testMonitors,
+ server: serverMock,
+ syntheticsMonitorClient: monitorClient,
+ request: kibanaRequest,
+ subject: testSubject,
+ });
+
+ pushMonitorFormatter.getProjectMonitorsForProject = jest.fn().mockResolvedValue([]);
+
+ await pushMonitorFormatter.configureAllProjectMonitors();
+
+ expect({
+ createdMonitors: pushMonitorFormatter.createdMonitors,
+ updatedMonitors: pushMonitorFormatter.updatedMonitors,
+ staleMonitors: pushMonitorFormatter.staleMonitors,
+ deletedMonitors: pushMonitorFormatter.deletedMonitors,
+ failedMonitors: pushMonitorFormatter.failedMonitors,
+ failedStaleMonitors: pushMonitorFormatter.failedStaleMonitors,
+ }).toStrictEqual({
+ createdMonitors: [],
+ deletedMonitors: [],
+ failedMonitors: [
+ {
+ details: INSUFFICIENT_FLEET_PERMISSIONS,
+ id: 'check if title is present 10 0',
+ payload: testMonitors[0],
+ reason: 'Failed to create or update monitor',
+ },
+ {
+ details: INSUFFICIENT_FLEET_PERMISSIONS,
+ id: 'check if title is present 10 1',
+ payload: testMonitors[1],
+ reason: 'Failed to create or update monitor',
+ },
+ ],
+ failedStaleMonitors: [],
+ staleMonitors: [],
+ updatedMonitors: [],
+ });
+ });
+
+ it('catches errors from bulk edit method', async () => {
+ const testSubject = new Subject();
+
+ serverMock.fleet = {
+ authz: {
+ fromRequest: jest
+ .fn()
+ .mockResolvedValue({ integrations: { writeIntegrationPolicies: true } }),
+ },
+ } as any;
+
+ const pushMonitorFormatter = new ProjectMonitorFormatterLegacy({
+ projectId: 'test-project',
+ spaceId: 'default-space',
+ keepStale: false,
+ locations,
+ privateLocations,
+ encryptedSavedObjectsClient,
+ savedObjectsClient: soClient,
+ monitors: testMonitors,
+ server: serverMock,
+ syntheticsMonitorClient: monitorClient,
+ request: kibanaRequest,
+ subject: testSubject,
+ });
+
+ pushMonitorFormatter.getProjectMonitorsForProject = jest.fn().mockResolvedValue([]);
+
+ await pushMonitorFormatter.configureAllProjectMonitors();
+
+ expect({
+ createdMonitors: pushMonitorFormatter.createdMonitors,
+ updatedMonitors: pushMonitorFormatter.updatedMonitors,
+ staleMonitors: pushMonitorFormatter.staleMonitors,
+ deletedMonitors: pushMonitorFormatter.deletedMonitors,
+ failedMonitors: pushMonitorFormatter.failedMonitors,
+ failedStaleMonitors: pushMonitorFormatter.failedStaleMonitors,
+ }).toEqual({
+ createdMonitors: [],
+ updatedMonitors: [],
+ staleMonitors: [],
+ deletedMonitors: [],
+ failedMonitors: [
+ {
+ details: "Cannot read properties of undefined (reading 'buildPackagePolicyFromPackage')",
+ payload: payloadData,
+ reason: 'Failed to create 2 monitors',
+ },
+ ],
+ failedStaleMonitors: [],
+ });
+ });
+
+ it('configures project monitors when there are errors', async () => {
+ const testSubject = new Subject();
+
+ serverMock.fleet = {
+ authz: {
+ fromRequest: jest
+ .fn()
+ .mockResolvedValue({ integrations: { writeIntegrationPolicies: true } }),
+ },
+ } as any;
+
+ soClient.bulkCreate = jest.fn().mockResolvedValue({ saved_objects: [] });
+
+ const pushMonitorFormatter = new ProjectMonitorFormatterLegacy({
+ projectId: 'test-project',
+ spaceId: 'default-space',
+ keepStale: false,
+ locations,
+ privateLocations,
+ encryptedSavedObjectsClient,
+ savedObjectsClient: soClient,
+ monitors: testMonitors,
+ server: serverMock,
+ syntheticsMonitorClient: monitorClient,
+ request: kibanaRequest,
+ subject: testSubject,
+ });
+
+ pushMonitorFormatter.getProjectMonitorsForProject = jest.fn().mockResolvedValue([]);
+
+ await pushMonitorFormatter.configureAllProjectMonitors();
+
+ expect({
+ createdMonitors: pushMonitorFormatter.createdMonitors,
+ updatedMonitors: pushMonitorFormatter.updatedMonitors,
+ staleMonitors: pushMonitorFormatter.staleMonitors,
+ deletedMonitors: pushMonitorFormatter.deletedMonitors,
+ failedMonitors: pushMonitorFormatter.failedMonitors,
+ failedStaleMonitors: pushMonitorFormatter.failedStaleMonitors,
+ }).toEqual({
+ createdMonitors: [],
+ updatedMonitors: [],
+ staleMonitors: [],
+ deletedMonitors: [],
+ failedMonitors: [
+ {
+ details: "Cannot read properties of undefined (reading 'buildPackagePolicyFromPackage')",
+ payload: payloadData,
+ reason: 'Failed to create 2 monitors',
+ },
+ ],
+ failedStaleMonitors: [],
+ });
+ });
+
+ it('shows errors thrown by fleet api', async () => {
+ const testSubject = new Subject();
+
+ serverMock.fleet = {
+ authz: {
+ fromRequest: jest
+ .fn()
+ .mockResolvedValue({ integrations: { writeIntegrationPolicies: true } }),
+ },
+ packagePolicyService: {},
+ } as any;
+
+ soClient.bulkCreate = jest.fn().mockResolvedValue({ saved_objects: soResult });
+
+ const pushMonitorFormatter = new ProjectMonitorFormatterLegacy({
+ projectId: 'test-project',
+ spaceId: 'default-space',
+ keepStale: false,
+ locations,
+ privateLocations,
+ encryptedSavedObjectsClient,
+ savedObjectsClient: soClient,
+ monitors: testMonitors,
+ server: serverMock,
+ syntheticsMonitorClient: monitorClient,
+ request: kibanaRequest,
+ subject: testSubject,
+ });
+
+ pushMonitorFormatter.getProjectMonitorsForProject = jest.fn().mockResolvedValue([]);
+
+ await pushMonitorFormatter.configureAllProjectMonitors();
+
+ expect({
+ createdMonitors: pushMonitorFormatter.createdMonitors,
+ updatedMonitors: pushMonitorFormatter.updatedMonitors,
+ staleMonitors: pushMonitorFormatter.staleMonitors,
+ deletedMonitors: pushMonitorFormatter.deletedMonitors,
+ failedMonitors: pushMonitorFormatter.failedMonitors,
+ failedStaleMonitors: pushMonitorFormatter.failedStaleMonitors,
+ }).toEqual({
+ createdMonitors: [],
+ updatedMonitors: [],
+ staleMonitors: [],
+ deletedMonitors: [],
+ failedMonitors: [
+ {
+ details:
+ 'this.server.fleet.packagePolicyService.buildPackagePolicyFromPackage is not a function',
+ reason: 'Failed to create 2 monitors',
+ payload: payloadData,
+ },
+ ],
+ failedStaleMonitors: [],
+ });
+ });
+
+ it('creates project monitors when no errors', async () => {
+ const testSubject = new Subject();
+
+ serverMock.fleet = {
+ authz: {
+ fromRequest: jest
+ .fn()
+ .mockResolvedValue({ integrations: { writeIntegrationPolicies: true } }),
+ },
+ } as any;
+
+ soClient.bulkCreate = jest.fn().mockResolvedValue({ saved_objects: soResult });
+
+ monitorClient.addMonitors = jest.fn().mockReturnValue({});
+
+ const telemetrySpy = jest
+ .spyOn(telemetryHooks, 'sendTelemetryEvents')
+ .mockImplementation(jest.fn());
+
+ const pushMonitorFormatter = new ProjectMonitorFormatterLegacy({
+ projectId: 'test-project',
+ spaceId: 'default-space',
+ keepStale: false,
+ locations,
+ privateLocations,
+ encryptedSavedObjectsClient,
+ savedObjectsClient: soClient,
+ monitors: testMonitors,
+ server: serverMock,
+ syntheticsMonitorClient: monitorClient,
+ request: kibanaRequest,
+ subject: testSubject,
+ });
+
+ pushMonitorFormatter.getProjectMonitorsForProject = jest.fn().mockResolvedValue([]);
+
+ await pushMonitorFormatter.configureAllProjectMonitors();
+
+ expect(soClient.bulkCreate).toHaveBeenCalledWith(
+ expect.arrayContaining([
+ expect.objectContaining({
+ ...soData[0],
+ attributes: {
+ ...soData[0].attributes,
+ [ConfigKey.MONITOR_QUERY_ID]: expect.any(String),
+ [ConfigKey.CONFIG_ID]: expect.any(String),
+ },
+ }),
+ expect.objectContaining({
+ ...soData[1],
+ attributes: {
+ ...soData[1].attributes,
+ [ConfigKey.MONITOR_QUERY_ID]: expect.any(String),
+ [ConfigKey.CONFIG_ID]: expect.any(String),
+ },
+ }),
+ ])
+ );
+
+ expect(telemetrySpy).toHaveBeenCalledTimes(2);
+
+ expect({
+ createdMonitors: pushMonitorFormatter.createdMonitors,
+ updatedMonitors: pushMonitorFormatter.updatedMonitors,
+ staleMonitors: pushMonitorFormatter.staleMonitors,
+ deletedMonitors: pushMonitorFormatter.deletedMonitors,
+ failedMonitors: pushMonitorFormatter.failedMonitors,
+ failedStaleMonitors: pushMonitorFormatter.failedStaleMonitors,
+ }).toEqual({
+ createdMonitors: ['check if title is present 10 0', 'check if title is present 10 1'],
+ updatedMonitors: [],
+ staleMonitors: [],
+ deletedMonitors: [],
+ failedMonitors: [],
+ failedStaleMonitors: [],
+ });
+ });
+});
+
+const payloadData = [
+ {
+ ...DEFAULT_FIELDS[DataStream.BROWSER],
+ __ui: {
+ is_zip_url_tls_enabled: false,
+ script_source: {
+ file_name: '',
+ is_generated_script: false,
+ },
+ },
+ config_id: '',
+ custom_heartbeat_id: 'check if title is present 10 0-test-project-default-space',
+ enabled: true,
+ 'filter_journeys.match': 'check if title is present 10 0',
+ 'filter_journeys.tags': [],
+ form_monitor_type: 'multistep',
+ ignore_https_errors: false,
+ journey_id: 'check if title is present 10 0',
+ locations: privateLocations,
+ name: 'check if title is present 10 0',
+ namespace: 'default_space',
+ origin: 'project',
+ original_space: 'default-space',
+ params: '{"url":"http://localhost:8080"}',
+ playwright_options:
+ '{"userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1","viewport":{"width":375,"height":667},"deviceScaleFactor":2,"isMobile":true,"hasTouch":true,"headless":true}',
+ playwright_text_assertion: '',
+ project_id: 'test-project',
+ schedule: {
+ number: '3',
+ unit: 'm',
+ },
+ screenshots: 'on',
+ 'service.name': '',
+ 'source.inline.script': '',
+ 'source.project.content':
+ 'UEsDBBQACAAIAAAAIQAAAAAAAAAAAAAAAAAQAAAAYmFzaWMuam91cm5leS50c2WQQU7DQAxF9znFV8QiUUOmXcCCUMQl2NdMnWbKJDMaO6Ilyt0JASQkNv9Z1teTZWNAIqwP5kU4iZGOug863u7uDXsSddbIddCOl0kMX6iPnsVoOAYxryTO1ucwpoGvtUrm+hiSYsLProIoxwp8iWwVM9oUeuTP/9V5k7UhofCscNhj2yx4xN2CzabElOHXWRxsx/YNroU69QwniImFB8Vui5vJzYcKxYRIJ66WTNQL5hL7p1WD9aYi9zQOtgPFGPNqecJ1sCj+tAB6J6erpj4FDcW3qh6TL5u1Mq/8yjn7BFBLBwhGDIWc4QAAAEkBAABQSwECLQMUAAgACAAAACEARgyFnOEAAABJAQAAEAAAAAAAAAAAACAApIEAAAAAYmFzaWMuam91cm5leS50c1BLBQYAAAAAAQABAD4AAAAfAQAAAAA=',
+ 'source.zip_url.folder': '',
+ 'source.zip_url.password': '',
+ 'source.zip_url.proxy_url': '',
+ 'source.zip_url.url': '',
+ 'source.zip_url.ssl.certificate': undefined,
+ 'source.zip_url.username': '',
+ 'ssl.certificate': '',
+ 'ssl.certificate_authorities': '',
+ 'ssl.key': '',
+ 'ssl.key_passphrase': '',
+ 'ssl.supported_protocols': ['TLSv1.1', 'TLSv1.2', 'TLSv1.3'],
+ 'ssl.verification_mode': 'full',
+ synthetics_args: [],
+ tags: [],
+ 'throttling.config': '5d/3u/20l',
+ 'throttling.download_speed': '5',
+ 'throttling.is_enabled': true,
+ 'throttling.latency': '20',
+ 'throttling.upload_speed': '3',
+ timeout: null,
+ type: 'browser',
+ 'url.port': null,
+ urls: '',
+ id: '',
+ hash: 'lleklrkelkj',
+ },
+ {
+ ...DEFAULT_FIELDS[DataStream.BROWSER],
+ __ui: {
+ is_zip_url_tls_enabled: false,
+ script_source: {
+ file_name: '',
+ is_generated_script: false,
+ },
+ },
+ config_id: '',
+ custom_heartbeat_id: 'check if title is present 10 1-test-project-default-space',
+ enabled: true,
+ 'filter_journeys.match': 'check if title is present 10 1',
+ 'filter_journeys.tags': [],
+ form_monitor_type: 'multistep',
+ ignore_https_errors: false,
+ journey_id: 'check if title is present 10 1',
+ locations: privateLocations,
+ name: 'check if title is present 10 1',
+ namespace: 'default_space',
+ origin: 'project',
+ original_space: 'default-space',
+ params: '{"url":"http://localhost:8080"}',
+ playwright_options:
+ '{"userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1","viewport":{"width":375,"height":667},"deviceScaleFactor":2,"isMobile":true,"hasTouch":true,"headless":true}',
+ playwright_text_assertion: '',
+ project_id: 'test-project',
+ schedule: {
+ number: '3',
+ unit: 'm',
+ },
+ screenshots: 'on',
+ 'service.name': '',
+ 'source.inline.script': '',
+ 'source.project.content':
+ 'UEsDBBQACAAIAAAAIQAAAAAAAAAAAAAAAAAQAAAAYmFzaWMuam91cm5leS50c2WQQU7DQAxF9znFV8QiUUOmXcCCUMQl2NdMnWbKJDMaO6Ilyt0JASQkNv9Z1teTZWNAIqwP5kU4iZGOug863u7uDXsSddbIddCOl0kMX6iPnsVoOAYxryTO1ucwpoGvtUrm+hiSYsLProIoxwp8iWwVM9oUeuTP/9V5k7UhofCscNhj2yx4xN2CzabElOHXWRxsx/YNroU69QwniImFB8Vui5vJzYcKxYRIJ66WTNQL5hL7p1WD9aYi9zQOtgPFGPNqecJ1sCj+tAB6J6erpj4FDcW3qh6TL5u1Mq/8yjn7BFBLBwhGDIWc4QAAAEkBAABQSwECLQMUAAgACAAAACEARgyFnOEAAABJAQAAEAAAAAAAAAAAACAApIEAAAAAYmFzaWMuam91cm5leS50c1BLBQYAAAAAAQABAD4AAAAfAQAAAAA=',
+ 'source.zip_url.folder': '',
+ 'source.zip_url.password': '',
+ 'source.zip_url.proxy_url': '',
+ 'source.zip_url.url': '',
+ 'source.zip_url.username': '',
+ 'ssl.certificate': '',
+ 'ssl.certificate_authorities': '',
+ 'ssl.key': '',
+ 'ssl.key_passphrase': '',
+ 'ssl.supported_protocols': ['TLSv1.1', 'TLSv1.2', 'TLSv1.3'],
+ 'ssl.verification_mode': 'full',
+ synthetics_args: [],
+ tags: [],
+ 'throttling.config': '5d/3u/20l',
+ 'throttling.download_speed': '5',
+ 'throttling.is_enabled': true,
+ 'throttling.latency': '20',
+ 'throttling.upload_speed': '3',
+ timeout: null,
+ type: 'browser',
+ 'url.port': null,
+ urls: '',
+ id: '',
+ hash: 'lleklrkelkj',
+ },
+];
+
+const soData = [
+ {
+ attributes: formatSecrets({
+ ...payloadData[0],
+ revision: 1,
+ } as any),
+ type: 'synthetics-monitor',
+ },
+ {
+ attributes: formatSecrets({
+ ...payloadData[1],
+ revision: 1,
+ } as any),
+ type: 'synthetics-monitor',
+ },
+];
+
+const soResult = soData.map((so) => ({ id: 'test-id', ...so }));
diff --git a/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter_legacy.ts b/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter_legacy.ts
new file mode 100644
index 0000000000000..82b29fe069c06
--- /dev/null
+++ b/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter_legacy.ts
@@ -0,0 +1,534 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license 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 { Subject } from 'rxjs';
+import { omit, isEqual } from 'lodash';
+import { KibanaRequest } from '@kbn/core/server';
+import {
+ SavedObjectsUpdateResponse,
+ SavedObjectsClientContract,
+ SavedObjectsFindResult,
+} from '@kbn/core/server';
+import pMap from 'p-map';
+import { EncryptedSavedObjectsClient } from '@kbn/encrypted-saved-objects-plugin/server';
+import { syncNewMonitorBulk } from '../../routes/monitor_cruds/bulk_cruds/add_monitor_bulk';
+import { deleteMonitorBulk } from '../../routes/monitor_cruds/bulk_cruds/delete_monitor_bulk';
+import { SyntheticsMonitorClient } from '../synthetics_monitor/synthetics_monitor_client';
+import { syncEditedMonitorBulk } from '../../routes/monitor_cruds/bulk_cruds/edit_monitor_bulk';
+import {
+ ConfigKey,
+ SyntheticsMonitorWithSecrets,
+ EncryptedSyntheticsMonitor,
+ ServiceLocationErrors,
+ ProjectMonitor,
+ Locations,
+ SyntheticsMonitor,
+ MonitorFields,
+ PrivateLocation,
+} from '../../../common/runtime_types';
+import { syntheticsMonitorType } from '../../legacy_uptime/lib/saved_objects/synthetics_monitor';
+import type { UptimeServerSetup } from '../../legacy_uptime/lib/adapters';
+import { formatSecrets, normalizeSecrets } from '../utils/secrets';
+import {
+ validateProjectMonitor,
+ validateMonitor,
+ ValidationResult,
+} from '../../routes/monitor_cruds/monitor_validation';
+import { normalizeProjectMonitor } from './normalizers';
+
+interface StaleMonitor {
+ stale: boolean;
+ journeyId: string;
+ savedObjectId: string;
+}
+type StaleMonitorMap = Record;
+type FailedError = Array<{ id?: string; reason: string; details: string; payload?: object }>;
+
+export const INSUFFICIENT_FLEET_PERMISSIONS =
+ 'Insufficient permissions. In order to configure private locations, you must have Fleet and Integrations write permissions. To resolve, please generate a new API key with a user who has Fleet and Integrations write permissions.';
+
+export class ProjectMonitorFormatterLegacy {
+ private projectId: string;
+ private spaceId: string;
+ private keepStale: boolean;
+ private locations: Locations;
+ private privateLocations: PrivateLocation[];
+ private savedObjectsClient: SavedObjectsClientContract;
+ private encryptedSavedObjectsClient: EncryptedSavedObjectsClient;
+ private staleMonitorsMap: StaleMonitorMap = {};
+ private monitors: ProjectMonitor[] = [];
+ public createdMonitors: string[] = [];
+ public deletedMonitors: string[] = [];
+ public updatedMonitors: string[] = [];
+ public staleMonitors: string[] = [];
+ public failedMonitors: FailedError = [];
+ public failedStaleMonitors: FailedError = [];
+ private server: UptimeServerSetup;
+ private projectFilter: string;
+ private syntheticsMonitorClient: SyntheticsMonitorClient;
+ private request: KibanaRequest;
+ private subject?: Subject;
+
+ private writeIntegrationPoliciesPermissions?: boolean;
+
+ constructor({
+ locations,
+ privateLocations,
+ keepStale,
+ savedObjectsClient,
+ encryptedSavedObjectsClient,
+ projectId,
+ spaceId,
+ monitors,
+ server,
+ syntheticsMonitorClient,
+ request,
+ subject,
+ }: {
+ locations: Locations;
+ privateLocations: PrivateLocation[];
+ keepStale: boolean;
+ savedObjectsClient: SavedObjectsClientContract;
+ encryptedSavedObjectsClient: EncryptedSavedObjectsClient;
+ projectId: string;
+ spaceId: string;
+ monitors: ProjectMonitor[];
+ server: UptimeServerSetup;
+ syntheticsMonitorClient: SyntheticsMonitorClient;
+ request: KibanaRequest;
+ subject?: Subject;
+ }) {
+ this.projectId = projectId;
+ this.spaceId = spaceId;
+ this.locations = locations;
+ this.privateLocations = privateLocations;
+ this.keepStale = keepStale;
+ this.savedObjectsClient = savedObjectsClient;
+ this.encryptedSavedObjectsClient = encryptedSavedObjectsClient;
+ this.syntheticsMonitorClient = syntheticsMonitorClient;
+ this.monitors = monitors;
+ this.server = server;
+ this.projectFilter = `${syntheticsMonitorType}.attributes.${ConfigKey.PROJECT_ID}: "${this.projectId}"`;
+ this.request = request;
+ this.subject = subject;
+ }
+
+ public configureAllProjectMonitors = async () => {
+ const existingMonitors = await this.getProjectMonitorsForProject();
+ this.staleMonitorsMap = await this.getStaleMonitorsMap(existingMonitors);
+
+ const normalizedNewMonitors: SyntheticsMonitor[] = [];
+ const normalizedUpdateMonitors: Array<{
+ previousMonitor: SavedObjectsFindResult;
+ monitor: SyntheticsMonitor;
+ }> = [];
+
+ for (const monitor of this.monitors) {
+ const previousMonitor = existingMonitors.find(
+ (monitorObj) =>
+ (monitorObj.attributes as SyntheticsMonitor)[ConfigKey.JOURNEY_ID] === monitor.id
+ );
+
+ const normM = await this.validateProjectMonitor({
+ monitor,
+ });
+ if (normM) {
+ if (previousMonitor) {
+ this.updatedMonitors.push(monitor.id);
+ if (this.staleMonitorsMap[monitor.id]) {
+ this.staleMonitorsMap[monitor.id].stale = false;
+ }
+ normalizedUpdateMonitors.push({ monitor: normM as MonitorFields, previousMonitor });
+ } else {
+ normalizedNewMonitors.push(normM as MonitorFields);
+ }
+ }
+ }
+
+ await this.createMonitorsBulk(normalizedNewMonitors);
+
+ const { updatedCount } = await this.updateMonitorsBulk(normalizedUpdateMonitors);
+
+ if (normalizedUpdateMonitors.length > 0) {
+ let updateMessage = '';
+ if (updatedCount > 0) {
+ updateMessage = `${updatedCount} monitor${
+ updatedCount > 1 ? 's' : ''
+ } updated successfully.`;
+ }
+
+ const noChanges = normalizedUpdateMonitors.length - updatedCount;
+ let noChangeMessage = '';
+ if (noChanges > 0) {
+ noChangeMessage = `${noChanges} monitor${noChanges > 1 ? 's' : ''} found with no changes.`;
+ }
+
+ this.handleStreamingMessage({
+ message: `${updateMessage} ${noChangeMessage}`,
+ });
+ }
+
+ await this.handleStaleMonitors();
+ };
+
+ validatePermissions = async ({ monitor }: { monitor: ProjectMonitor }) => {
+ if (this.writeIntegrationPoliciesPermissions || (monitor.privateLocations ?? []).length === 0) {
+ return;
+ }
+ const {
+ integrations: { writeIntegrationPolicies },
+ } = await this.server.fleet.authz.fromRequest(this.request);
+
+ this.writeIntegrationPoliciesPermissions = writeIntegrationPolicies;
+
+ if (!writeIntegrationPolicies) {
+ throw new Error(INSUFFICIENT_FLEET_PERMISSIONS);
+ }
+ };
+
+ validateProjectMonitor = async ({ monitor }: { monitor: ProjectMonitor }) => {
+ try {
+ await this.validatePermissions({ monitor });
+
+ const { normalizedFields: normalizedMonitor, errors } = normalizeProjectMonitor({
+ monitor,
+ locations: this.locations,
+ privateLocations: this.privateLocations,
+ projectId: this.projectId,
+ namespace: this.spaceId,
+ version: this.server.stackVersion,
+ });
+
+ if (errors.length) {
+ this.failedMonitors.push(...errors);
+ this.handleStreamingMessage({
+ message: `${monitor.id}: failed to create or update monitor`,
+ });
+ return null;
+ }
+
+ /* Validates that the payload sent from the synthetics agent is valid */
+ const { valid: isMonitorPayloadValid } = this.validateMonitor({
+ validationResult: validateProjectMonitor({
+ ...monitor,
+ type: normalizedMonitor[ConfigKey.MONITOR_TYPE],
+ }),
+ monitorId: monitor.id,
+ });
+
+ if (!isMonitorPayloadValid) {
+ return null;
+ }
+
+ /* Validates that the normalized monitor is a valid monitor saved object type */
+ const { valid: isNormalizedMonitorValid, decodedMonitor } = this.validateMonitor({
+ validationResult: validateMonitor(normalizedMonitor as MonitorFields),
+ monitorId: monitor.id,
+ });
+
+ if (!isNormalizedMonitorValid || !decodedMonitor) {
+ return null;
+ }
+
+ return decodedMonitor;
+ } catch (e) {
+ this.server.logger.error(e);
+ this.failedMonitors.push({
+ id: monitor.id,
+ reason: 'Failed to create or update monitor',
+ details: e.message,
+ payload: monitor,
+ });
+ this.handleStreamingMessage({ message: `${monitor.id}: failed to create or update monitor` });
+ if (this.staleMonitorsMap[monitor.id]) {
+ this.staleMonitorsMap[monitor.id].stale = false;
+ }
+ }
+ };
+
+ private getStaleMonitorsMap = async (
+ existingMonitors: Array>
+ ): Promise => {
+ const staleMonitors: StaleMonitorMap = {};
+
+ existingMonitors.forEach((savedObject) => {
+ const journeyId = (savedObject.attributes as SyntheticsMonitor)[ConfigKey.JOURNEY_ID];
+ if (journeyId) {
+ staleMonitors[journeyId] = {
+ stale: true,
+ savedObjectId: savedObject.id,
+ journeyId,
+ };
+ }
+ });
+
+ return staleMonitors;
+ };
+
+ public getProjectMonitorsForProject = async () => {
+ const finder = this.savedObjectsClient.createPointInTimeFinder({
+ type: syntheticsMonitorType,
+ perPage: 1000,
+ filter: this.projectFilter,
+ });
+
+ const hits: Array> = [];
+ for await (const result of finder.find()) {
+ hits.push(
+ ...(result.saved_objects as Array>)
+ );
+ }
+
+ await finder.close();
+
+ return hits;
+ };
+
+ private createMonitorsBulk = async (monitors: SyntheticsMonitor[]) => {
+ try {
+ if (monitors.length > 0) {
+ const { newMonitors } = await syncNewMonitorBulk({
+ normalizedMonitors: monitors,
+ server: this.server,
+ syntheticsMonitorClient: this.syntheticsMonitorClient,
+ soClient: this.savedObjectsClient,
+ request: this.request,
+ privateLocations: this.privateLocations,
+ spaceId: this.spaceId,
+ });
+
+ if (newMonitors && newMonitors.length === monitors.length) {
+ this.createdMonitors.push(...monitors.map((monitor) => monitor[ConfigKey.JOURNEY_ID]!));
+ this.handleStreamingMessage({
+ message: `${monitors.length} monitor${
+ monitors.length > 1 ? 's' : ''
+ } created successfully.`,
+ });
+ } else {
+ this.failedMonitors.push({
+ reason: `Failed to create ${monitors.length} monitors`,
+ details: 'Failed to create monitors',
+ payload: monitors,
+ });
+ this.handleStreamingMessage({
+ message: `Failed to create ${monitors.length} monitors`,
+ });
+ }
+ }
+ } catch (e) {
+ this.server.logger.error(e);
+ this.failedMonitors.push({
+ reason: `Failed to create ${monitors.length} monitors`,
+ details: e.message,
+ payload: monitors,
+ });
+ this.handleStreamingMessage({
+ message: `Failed to create ${monitors.length} monitors`,
+ });
+ }
+ };
+
+ private getDecryptedMonitors = async (
+ monitors: Array>
+ ) => {
+ return await pMap(
+ monitors,
+ async (monitor) =>
+ this.encryptedSavedObjectsClient.getDecryptedAsInternalUser(
+ syntheticsMonitorType,
+ monitor.id,
+ {
+ namespace: monitor.namespaces?.[0],
+ }
+ ),
+ { concurrency: 500 }
+ );
+ };
+
+ private updateMonitorsBulk = async (
+ monitors: Array<{
+ monitor: SyntheticsMonitor;
+ previousMonitor: SavedObjectsFindResult;
+ }>
+ ): Promise<{
+ editedMonitors: Array>;
+ errors: ServiceLocationErrors;
+ updatedCount: number;
+ }> => {
+ const decryptedPreviousMonitors = await this.getDecryptedMonitors(
+ monitors.map((m) => m.previousMonitor)
+ );
+
+ const monitorsToUpdate = [];
+
+ for (let i = 0; i < decryptedPreviousMonitors.length; i++) {
+ const decryptedPreviousMonitor = decryptedPreviousMonitors[i];
+ const previousMonitor = monitors[i].previousMonitor;
+ const normalizedMonitor = monitors[i].monitor;
+
+ const keysToOmit = [ConfigKey.REVISION, ConfigKey.MONITOR_QUERY_ID, ConfigKey.CONFIG_ID];
+ const { attributes: normalizedPreviousMonitorAttributes } =
+ normalizeSecrets(decryptedPreviousMonitor);
+ const hasMonitorBeenEdited = !isEqual(
+ omit(normalizedMonitor, keysToOmit),
+ omit(normalizedPreviousMonitorAttributes, keysToOmit)
+ );
+
+ if (hasMonitorBeenEdited) {
+ const monitorWithRevision = formatSecrets({
+ ...normalizedPreviousMonitorAttributes,
+ ...normalizedMonitor,
+ revision: (previousMonitor.attributes[ConfigKey.REVISION] || 0) + 1,
+ });
+ monitorsToUpdate.push({
+ normalizedMonitor,
+ previousMonitor,
+ monitorWithRevision,
+ decryptedPreviousMonitor,
+ });
+ }
+ }
+
+ const { editedMonitors } = await syncEditedMonitorBulk({
+ monitorsToUpdate,
+ server: this.server,
+ syntheticsMonitorClient: this.syntheticsMonitorClient,
+ savedObjectsClient: this.savedObjectsClient,
+ request: this.request,
+ privateLocations: this.privateLocations,
+ spaceId: this.spaceId,
+ });
+ return {
+ editedMonitors: editedMonitors ?? [],
+ errors: [],
+ updatedCount: monitorsToUpdate.length,
+ };
+ };
+
+ private handleStaleMonitors = async () => {
+ try {
+ const staleMonitorsList = Object.values(this.staleMonitorsMap).filter(
+ (monitor) => monitor.stale === true
+ );
+
+ const encryptedMonitors = await this.savedObjectsClient.bulkGet(
+ staleMonitorsList.map((staleMonitor) => ({
+ id: staleMonitor.savedObjectId,
+ type: syntheticsMonitorType,
+ }))
+ );
+
+ let monitors = encryptedMonitors.saved_objects;
+
+ const hasPrivateMonitor = monitors.some((monitor) =>
+ monitor.attributes.locations.some((location) => !location.isServiceManaged)
+ );
+
+ if (hasPrivateMonitor) {
+ const {
+ integrations: { writeIntegrationPolicies },
+ } = await this.server.fleet.authz.fromRequest(this.request);
+ if (!writeIntegrationPolicies) {
+ monitors = monitors.filter((monitor) => {
+ const hasPrivateLocation = monitor.attributes.locations.some(
+ (location) => !location.isServiceManaged
+ );
+ if (hasPrivateLocation) {
+ const journeyId = (monitor.attributes as MonitorFields)[ConfigKey.JOURNEY_ID]!;
+ const monitorName = (monitor.attributes as MonitorFields)[ConfigKey.NAME]!;
+ this.handleStreamingMessage({
+ message: `Monitor ${journeyId} could not be deleted`,
+ });
+ this.failedStaleMonitors.push({
+ id: journeyId,
+ reason: 'Failed to delete stale monitor',
+ details: `Unable to delete Synthetics package policy for monitor ${monitorName}. Fleet write permissions are needed to use Synthetics private locations.`,
+ });
+ }
+ return !hasPrivateLocation;
+ });
+ }
+ }
+
+ const chunkSize = 100;
+ for (let i = 0; i < monitors.length; i += chunkSize) {
+ const chunkMonitors = monitors.slice(i, i + chunkSize);
+ try {
+ if (!this.keepStale) {
+ await deleteMonitorBulk({
+ monitors: chunkMonitors,
+ savedObjectsClient: this.savedObjectsClient,
+ server: this.server,
+ syntheticsMonitorClient: this.syntheticsMonitorClient,
+ request: this.request,
+ });
+
+ for (const sm of chunkMonitors) {
+ const journeyId = (sm.attributes as MonitorFields)[ConfigKey.JOURNEY_ID]!;
+
+ this.deletedMonitors.push(journeyId);
+ this.handleStreamingMessage({
+ message: `Monitor ${journeyId} deleted successfully`,
+ });
+ }
+ } else {
+ chunkMonitors.forEach((sm) => {
+ const journeyId = (sm.attributes as MonitorFields)[ConfigKey.JOURNEY_ID]!;
+ this.staleMonitors.push(journeyId);
+ });
+ }
+ } catch (e) {
+ chunkMonitors.forEach((sm) => {
+ const journeyId = (sm.attributes as MonitorFields)[ConfigKey.JOURNEY_ID]!;
+
+ this.handleStreamingMessage({
+ message: `Monitor ${journeyId} could not be deleted`,
+ });
+ this.failedStaleMonitors.push({
+ id: journeyId,
+ reason: 'Failed to delete stale monitor',
+ details: e.message,
+ payload: staleMonitorsList.find(
+ (staleMonitor) => staleMonitor.savedObjectId === sm.id
+ ),
+ });
+ });
+ this.server.logger.error(e);
+ }
+ }
+ } catch (e) {
+ this.server.logger.error(e);
+ }
+ };
+
+ private handleStreamingMessage = ({ message }: { message: string }) => {
+ if (this.subject) {
+ this.subject?.next(message);
+ }
+ };
+
+ private validateMonitor = ({
+ validationResult,
+ monitorId,
+ }: {
+ validationResult: ValidationResult;
+ monitorId: string;
+ }) => {
+ const { reason: message, details, payload: validationPayload, valid } = validationResult;
+ if (!valid) {
+ this.failedMonitors.push({
+ id: monitorId,
+ reason: message,
+ details,
+ payload: validationPayload,
+ });
+ if (this.staleMonitorsMap[monitorId]) {
+ this.staleMonitorsMap[monitorId].stale = false;
+ }
+ }
+ return validationResult;
+ };
+}
diff --git a/x-pack/test/api_integration/apis/synthetics/add_monitor_project.ts b/x-pack/test/api_integration/apis/synthetics/add_monitor_project.ts
index 65e9aa759f09c..7911beea80a6e 100644
--- a/x-pack/test/api_integration/apis/synthetics/add_monitor_project.ts
+++ b/x-pack/test/api_integration/apis/synthetics/add_monitor_project.ts
@@ -4,15 +4,14 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
-import fetch, { BodyInit, HeadersInit, Response } from 'node-fetch';
import uuid from 'uuid';
-import { format as formatUrl } from 'url';
+import expect from '@kbn/expect';
import { ConfigKey, ProjectMonitorsRequest } from '@kbn/synthetics-plugin/common/runtime_types';
import { API_URLS } from '@kbn/synthetics-plugin/common/constants';
import { formatKibanaNamespace } from '@kbn/synthetics-plugin/common/formatters';
import { syntheticsMonitorType } from '@kbn/synthetics-plugin/server/legacy_uptime/lib/saved_objects/synthetics_monitor';
+import { REQUEST_TOO_LARGE } from '@kbn/synthetics-plugin/server/routes/monitor_cruds/add_monitor_project';
import { PackagePolicy } from '@kbn/fleet-plugin/common';
-import expect from '@kbn/expect';
import { FtrProviderContext } from '../../ftr_provider_context';
import { getFixtureJson } from '../uptime/rest/helper/get_fixture_json';
import { PrivateLocationTestService } from './services/private_location_test_service';
@@ -26,12 +25,9 @@ export default function ({ getService }: FtrProviderContext) {
this.tags('skipCloud');
const supertest = getService('supertest');
- const config = getService('config');
- const kibanaServerUrl = formatUrl(config.get('servers.kibana'));
const supertestWithoutAuth = getService('supertestWithoutAuth');
const security = getService('security');
const kibanaServer = getService('kibanaServer');
- const projectMonitorEndpoint = kibanaServerUrl + API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY;
let projectMonitors: ProjectMonitorsRequest;
let httpProjectMonitors: ProjectMonitorsRequest;
@@ -51,14 +47,11 @@ export default function ({ getService }: FtrProviderContext) {
const deleteMonitor = async (
journeyId: string,
projectId: string,
- space: string = 'default',
- username: string = '',
- password: string = ''
+ space: string = 'default'
) => {
try {
const response = await supertest
.get(`/s/${space}${API_URLS.SYNTHETICS_MONITORS}`)
- .auth(username, password)
.query({
filter: `${syntheticsMonitorType}.attributes.journey_id: "${journeyId}" AND ${syntheticsMonitorType}.attributes.project_id: "${projectId}"`,
})
@@ -93,25 +86,35 @@ export default function ({ getService }: FtrProviderContext) {
});
beforeEach(() => {
- projectMonitors = setUniqueIds(getFixtureJson('project_browser_monitor'));
- httpProjectMonitors = setUniqueIds(getFixtureJson('project_http_monitor'));
- tcpProjectMonitors = setUniqueIds(getFixtureJson('project_tcp_monitor'));
- icmpProjectMonitors = setUniqueIds(getFixtureJson('project_icmp_monitor'));
+ projectMonitors = setUniqueIds({
+ monitors: getFixtureJson('project_browser_monitor').monitors,
+ });
+ httpProjectMonitors = setUniqueIds({
+ monitors: getFixtureJson('project_http_monitor').monitors,
+ });
+ tcpProjectMonitors = setUniqueIds({
+ monitors: getFixtureJson('project_tcp_monitor').monitors,
+ });
+ icmpProjectMonitors = setUniqueIds({
+ monitors: getFixtureJson('project_icmp_monitor').monitors,
+ });
});
it('project monitors - handles browser monitors', async () => {
const successfulMonitors = [projectMonitors.monitors[0]];
+ const project = `test-project-${uuid.v4()}`;
try {
- const messages = await parseStreamApiResponse(
- projectMonitorEndpoint,
- JSON.stringify(projectMonitors)
- );
-
- expect(messages).to.have.length(2);
- expect(messages[1].updatedMonitors).eql([]);
- expect(messages[1].createdMonitors).eql(successfulMonitors.map((monitor) => monitor.id));
- expect(messages[1].failedMonitors).eql([]);
+ const { body } = await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
+ .set('kbn-xsrf', 'true')
+ .send(projectMonitors)
+ .expect(200);
+ expect(body).eql({
+ updatedMonitors: [],
+ createdMonitors: successfulMonitors.map((monitor) => monitor.id),
+ failedMonitors: [],
+ });
for (const monitor of successfulMonitors) {
const journeyId = monitor.id;
@@ -135,7 +138,7 @@ export default function ({ getService }: FtrProviderContext) {
},
},
config_id: decryptedCreatedMonitor.body.id,
- custom_heartbeat_id: `${journeyId}-test-suite-default`,
+ custom_heartbeat_id: `${journeyId}-${project}-default`,
enabled: true,
'filter_journeys.match': 'check if title is present',
'filter_journeys.tags': [],
@@ -162,7 +165,7 @@ export default function ({ getService }: FtrProviderContext) {
original_space: 'default',
playwright_options: '{"headless":true,"chromiumSandbox":false}',
playwright_text_assertion: '',
- project_id: 'test-suite',
+ project_id: project,
params: '',
revision: 1,
schedule: {
@@ -196,14 +199,14 @@ export default function ({ getService }: FtrProviderContext) {
type: 'browser',
'url.port': null,
urls: '',
- id: `${journeyId}-test-suite-default`,
+ id: `${journeyId}-${project}-default`,
hash: 'ekrjelkjrelkjre',
});
}
} finally {
await Promise.all([
successfulMonitors.map((monitor) => {
- return deleteMonitor(monitor.id, httpProjectMonitors.project);
+ return deleteMonitor(monitor.id, project);
}),
]);
}
@@ -212,28 +215,31 @@ export default function ({ getService }: FtrProviderContext) {
it('project monitors - handles http monitors', async () => {
const kibanaVersion = await kibanaServer.version.get();
const successfulMonitors = [httpProjectMonitors.monitors[1]];
+ const project = `test-project-${uuid.v4()}`;
try {
- const messages = await parseStreamApiResponse(
- projectMonitorEndpoint,
- JSON.stringify(httpProjectMonitors)
- );
+ const { body } = await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
+ .set('kbn-xsrf', 'true')
+ .send(httpProjectMonitors)
+ .expect(200);
- expect(messages).to.have.length(3);
- expect(messages[2].updatedMonitors).eql([]);
- expect(messages[2].createdMonitors).eql(successfulMonitors.map((monitor) => monitor.id));
- expect(messages[2].failedMonitors).eql([
- {
- id: httpProjectMonitors.monitors[0].id,
- details: `Multiple urls are not supported for http project monitors in ${kibanaVersion}. Please set only 1 url per monitor. You monitor was not created or updated.`,
- reason: 'Unsupported Heartbeat option',
- },
- {
- id: httpProjectMonitors.monitors[0].id,
- details: `The following Heartbeat options are not supported for ${httpProjectMonitors.monitors[0].type} project monitors in ${kibanaVersion}: check.response.body|unsupportedKey.nestedUnsupportedKey. You monitor was not created or updated.`,
- reason: 'Unsupported Heartbeat option',
- },
- ]);
+ expect(body).eql({
+ updatedMonitors: [],
+ createdMonitors: successfulMonitors.map((monitor) => monitor.id),
+ failedMonitors: [
+ {
+ id: httpProjectMonitors.monitors[0].id,
+ details: `Multiple urls are not supported for http project monitors in ${kibanaVersion}. Please set only 1 url per monitor. You monitor was not created or updated.`,
+ reason: 'Unsupported Heartbeat option',
+ },
+ {
+ id: httpProjectMonitors.monitors[0].id,
+ details: `The following Heartbeat options are not supported for ${httpProjectMonitors.monitors[0].type} project monitors in ${kibanaVersion}: check.response.body|unsupportedKey.nestedUnsupportedKey. You monitor was not created or updated.`,
+ reason: 'Unsupported Heartbeat option',
+ },
+ ],
+ });
for (const monitor of successfulMonitors) {
const journeyId = monitor.id;
@@ -255,7 +261,7 @@ export default function ({ getService }: FtrProviderContext) {
'check.request.method': 'POST',
'check.response.status': ['200'],
config_id: decryptedCreatedMonitor.body.id,
- custom_heartbeat_id: `${journeyId}-test-suite-default`,
+ custom_heartbeat_id: `${journeyId}-${project}-default`,
'check.response.body.negative': [],
'check.response.body.positive': ['Saved', 'saved'],
'check.response.headers': {},
@@ -288,7 +294,7 @@ export default function ({ getService }: FtrProviderContext) {
namespace: 'default',
origin: 'project',
original_space: 'default',
- project_id: 'test-suite',
+ project_id: project,
username: '',
password: '',
proxy_url: '',
@@ -311,14 +317,14 @@ export default function ({ getService }: FtrProviderContext) {
type: 'http',
urls: Array.isArray(monitor.urls) ? monitor.urls?.[0] : monitor.urls,
'url.port': null,
- id: `${journeyId}-test-suite-default`,
+ id: `${journeyId}-${project}-default`,
hash: 'ekrjelkjrelkjre',
});
}
} finally {
await Promise.all([
successfulMonitors.map((monitor) => {
- return deleteMonitor(monitor.id, httpProjectMonitors.project);
+ return deleteMonitor(monitor.id, project);
}),
]);
}
@@ -327,28 +333,31 @@ export default function ({ getService }: FtrProviderContext) {
it('project monitors - handles tcp monitors', async () => {
const successfulMonitors = [tcpProjectMonitors.monitors[0], tcpProjectMonitors.monitors[1]];
const kibanaVersion = await kibanaServer.version.get();
+ const project = `test-project-${uuid.v4()}`;
try {
- const messages = await parseStreamApiResponse(
- projectMonitorEndpoint,
- JSON.stringify(tcpProjectMonitors)
- );
+ const { body } = await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
+ .set('kbn-xsrf', 'true')
+ .send(tcpProjectMonitors)
+ .expect(200);
- expect(messages).to.have.length(3);
- expect(messages[2].updatedMonitors).eql([]);
- expect(messages[2].createdMonitors).eql(successfulMonitors.map((monitor) => monitor.id));
- expect(messages[2].failedMonitors).eql([
- {
- id: tcpProjectMonitors.monitors[2].id,
- details: `Multiple hosts are not supported for tcp project monitors in ${kibanaVersion}. Please set only 1 host per monitor. You monitor was not created or updated.`,
- reason: 'Unsupported Heartbeat option',
- },
- {
- id: tcpProjectMonitors.monitors[2].id,
- details: `The following Heartbeat options are not supported for ${tcpProjectMonitors.monitors[0].type} project monitors in ${kibanaVersion}: ports|unsupportedKey.nestedUnsupportedKey. You monitor was not created or updated.`,
- reason: 'Unsupported Heartbeat option',
- },
- ]);
+ expect(body).eql({
+ updatedMonitors: [],
+ createdMonitors: successfulMonitors.map((monitor) => monitor.id),
+ failedMonitors: [
+ {
+ id: tcpProjectMonitors.monitors[2].id,
+ details: `Multiple hosts are not supported for tcp project monitors in ${kibanaVersion}. Please set only 1 host per monitor. You monitor was not created or updated.`,
+ reason: 'Unsupported Heartbeat option',
+ },
+ {
+ id: tcpProjectMonitors.monitors[2].id,
+ details: `The following Heartbeat options are not supported for ${tcpProjectMonitors.monitors[0].type} project monitors in ${kibanaVersion}: ports|unsupportedKey.nestedUnsupportedKey. You monitor was not created or updated.`,
+ reason: 'Unsupported Heartbeat option',
+ },
+ ],
+ });
for (const monitor of successfulMonitors) {
const journeyId = monitor.id;
@@ -368,7 +377,7 @@ export default function ({ getService }: FtrProviderContext) {
is_tls_enabled: false,
},
config_id: decryptedCreatedMonitor.body.id,
- custom_heartbeat_id: `${journeyId}-test-suite-default`,
+ custom_heartbeat_id: `${journeyId}-${project}-default`,
'check.receive': '',
'check.send': '',
enabled: true,
@@ -392,7 +401,7 @@ export default function ({ getService }: FtrProviderContext) {
namespace: 'default',
origin: 'project',
original_space: 'default',
- project_id: 'test-suite',
+ project_id: project,
revision: 1,
schedule: {
number: '1',
@@ -413,14 +422,14 @@ export default function ({ getService }: FtrProviderContext) {
hosts: Array.isArray(monitor.hosts) ? monitor.hosts?.[0] : monitor.hosts,
'url.port': null,
urls: '',
- id: `${journeyId}-test-suite-default`,
+ id: `${journeyId}-${project}-default`,
hash: 'ekrjelkjrelkjre',
});
}
} finally {
await Promise.all([
successfulMonitors.map((monitor) => {
- return deleteMonitor(monitor.id, tcpProjectMonitors.project);
+ return deleteMonitor(monitor.id, project);
}),
]);
}
@@ -429,28 +438,30 @@ export default function ({ getService }: FtrProviderContext) {
it('project monitors - handles icmp monitors', async () => {
const successfulMonitors = [icmpProjectMonitors.monitors[0], icmpProjectMonitors.monitors[1]];
const kibanaVersion = await kibanaServer.version.get();
+ const project = `test-project-${uuid.v4()}`;
try {
- const messages = await parseStreamApiResponse(
- projectMonitorEndpoint,
- JSON.stringify(icmpProjectMonitors)
- );
-
- expect(messages).to.have.length(3);
- expect(messages[2].updatedMonitors).eql([]);
- expect(messages[2].createdMonitors).eql(successfulMonitors.map((monitor) => monitor.id));
- expect(messages[2].failedMonitors).eql([
- {
- id: icmpProjectMonitors.monitors[2].id,
- details: `Multiple hosts are not supported for icmp project monitors in ${kibanaVersion}. Please set only 1 host per monitor. You monitor was not created or updated.`,
- reason: 'Unsupported Heartbeat option',
- },
- {
- id: icmpProjectMonitors.monitors[2].id,
- details: `The following Heartbeat options are not supported for ${icmpProjectMonitors.monitors[0].type} project monitors in ${kibanaVersion}: unsupportedKey.nestedUnsupportedKey. You monitor was not created or updated.`,
- reason: 'Unsupported Heartbeat option',
- },
- ]);
+ const { body } = await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
+ .set('kbn-xsrf', 'true')
+ .send(icmpProjectMonitors)
+ .expect(200);
+ expect(body).eql({
+ updatedMonitors: [],
+ createdMonitors: successfulMonitors.map((monitor) => monitor.id),
+ failedMonitors: [
+ {
+ id: icmpProjectMonitors.monitors[2].id,
+ details: `Multiple hosts are not supported for icmp project monitors in ${kibanaVersion}. Please set only 1 host per monitor. You monitor was not created or updated.`,
+ reason: 'Unsupported Heartbeat option',
+ },
+ {
+ id: icmpProjectMonitors.monitors[2].id,
+ details: `The following Heartbeat options are not supported for ${icmpProjectMonitors.monitors[0].type} project monitors in ${kibanaVersion}: unsupportedKey.nestedUnsupportedKey. You monitor was not created or updated.`,
+ reason: 'Unsupported Heartbeat option',
+ },
+ ],
+ });
for (const monitor of successfulMonitors) {
const journeyId = monitor.id;
@@ -467,7 +478,7 @@ export default function ({ getService }: FtrProviderContext) {
expect(decryptedCreatedMonitor.body.attributes).to.eql({
config_id: decryptedCreatedMonitor.body.id,
- custom_heartbeat_id: `${journeyId}-test-suite-default`,
+ custom_heartbeat_id: `${journeyId}-${project}-default`,
enabled: true,
form_monitor_type: 'icmp',
journey_id: journeyId,
@@ -501,7 +512,7 @@ export default function ({ getService }: FtrProviderContext) {
namespace: 'default',
origin: 'project',
original_space: 'default',
- project_id: 'test-suite',
+ project_id: project,
revision: 1,
schedule: {
number: '1',
@@ -516,496 +527,181 @@ export default function ({ getService }: FtrProviderContext) {
monitor.wait?.slice(-1) === 's'
? monitor.wait?.slice(0, -1)
: `${parseInt(monitor.wait?.slice(0, -1) || '1', 10) * 60}`,
- id: `${journeyId}-test-suite-default`,
+ id: `${journeyId}-${project}-default`,
hash: 'ekrjelkjrelkjre',
});
}
} finally {
await Promise.all([
successfulMonitors.map((monitor) => {
- return deleteMonitor(monitor.id, icmpProjectMonitors.project);
+ return deleteMonitor(monitor.id, project);
}),
]);
}
});
it('project monitors - returns a list of successfully created monitors', async () => {
+ const project = `test-project-${uuid.v4()}`;
try {
- const messages = await parseStreamApiResponse(
- projectMonitorEndpoint,
- JSON.stringify(projectMonitors)
- );
+ const { body } = await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
+ .set('kbn-xsrf', 'true')
+ .send(projectMonitors)
+ .expect(200);
- expect(messages).to.have.length(2);
- expect(messages[1].updatedMonitors).eql([]);
- expect(messages[1].failedMonitors).eql([]);
- expect(messages[1].createdMonitors).eql(
- projectMonitors.monitors.map((monitor) => monitor.id)
- );
+ expect(body).eql({
+ updatedMonitors: [],
+ failedMonitors: [],
+ createdMonitors: projectMonitors.monitors.map((monitor) => monitor.id),
+ });
} finally {
await Promise.all([
projectMonitors.monitors.map((monitor) => {
- return deleteMonitor(monitor.id, projectMonitors.project);
+ return deleteMonitor(monitor.id, project);
}),
]);
}
});
it('project monitors - returns a list of successfully updated monitors', async () => {
- try {
- await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
- .set('kbn-xsrf', 'true')
- .send(projectMonitors);
-
- const messages = await parseStreamApiResponse(
- projectMonitorEndpoint,
- JSON.stringify(projectMonitors)
- );
-
- expect(messages).to.have.length(2);
- expect(messages[0]).eql(' 1 monitor found with no changes.');
- expect(messages[1].createdMonitors).eql([]);
- expect(messages[1].failedMonitors).eql([]);
- expect(messages[1].updatedMonitors).eql(
- projectMonitors.monitors.map((monitor) => monitor.id)
- );
- } finally {
- await Promise.all([
- projectMonitors.monitors.map((monitor) => {
- return deleteMonitor(monitor.id, projectMonitors.project);
- }),
- ]);
- }
- });
+ const project = `test-project-${uuid.v4()}`;
- it('project monitors - does not increment monitor revision unless a change has been made', async () => {
try {
await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
- .set('kbn-xsrf', 'true')
- .send(projectMonitors);
-
- await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
- .send(projectMonitors);
-
- const updatedMonitorsResponse = await Promise.all(
- projectMonitors.monitors.map((monitor) => {
- return supertest
- .get(API_URLS.SYNTHETICS_MONITORS)
- .query({ filter: `${syntheticsMonitorType}.attributes.journey_id: ${monitor.id}` })
- .set('kbn-xsrf', 'true')
- .expect(200);
- })
- );
-
- updatedMonitorsResponse.forEach((response) => {
- expect(response.body.monitors[0].attributes.revision).eql(1);
- });
- } finally {
- await Promise.all([
- projectMonitors.monitors.map((monitor) => {
- return deleteMonitor(monitor.id, projectMonitors.project);
- }),
- ]);
- }
- });
-
- it('project monitors - increments monitor revision when a change has been made', async () => {
- try {
- await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .send(projectMonitors)
+ .expect(200);
+ const { body } = await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
- .send(projectMonitors);
-
- const editedMonitors = {
- ...projectMonitors,
- monitors: projectMonitors.monitors.map((monitor) => ({
- ...monitor,
- content: 'changed content',
- })),
- };
-
- const messages = await parseStreamApiResponse(
- projectMonitorEndpoint,
- JSON.stringify(editedMonitors)
- );
-
- const updatedMonitorsResponse = await Promise.all(
- projectMonitors.monitors.map((monitor) => {
- return supertest
- .get(API_URLS.SYNTHETICS_MONITORS)
- .query({ filter: `${syntheticsMonitorType}.attributes.journey_id: ${monitor.id}` })
- .set('kbn-xsrf', 'true')
- .expect(200);
- })
- );
+ .send(projectMonitors)
+ .expect(200);
- updatedMonitorsResponse.forEach((response) => {
- expect(response.body.monitors[0].attributes.revision).eql(2);
+ expect(body).eql({
+ createdMonitors: [],
+ failedMonitors: [],
+ updatedMonitors: projectMonitors.monitors.map((monitor) => monitor.id),
});
- expect(messages[0]).eql('1 monitor updated successfully. ');
} finally {
await Promise.all([
projectMonitors.monitors.map((monitor) => {
- return deleteMonitor(monitor.id, projectMonitors.project);
+ return deleteMonitor(monitor.id, project);
}),
]);
}
});
- it('project monitors - does not delete monitors when keep stale is true', async () => {
- const secondMonitor = { ...projectMonitors.monitors[0], id: 'test-id-2' };
- const testMonitors = [projectMonitors.monitors[0], secondMonitor];
+ it('project monitors - validates monitor type', async () => {
+ const project = `test-project-${uuid.v4()}`;
try {
- await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
- .set('kbn-xsrf', 'true')
- .send({
- ...projectMonitors,
- monitors: testMonitors,
- });
-
- const messages = await parseStreamApiResponse(
- projectMonitorEndpoint,
- JSON.stringify(projectMonitors)
- );
-
- expect(messages).to.have.length(2);
- expect(messages[0]).eql(' 1 monitor found with no changes.');
- expect(messages[1].createdMonitors).eql([]);
- expect(messages[1].failedMonitors).eql([]);
- expect(messages[1].deletedMonitors).eql([]);
- expect(messages[1].updatedMonitors).eql([projectMonitors.monitors[0].id]);
- expect(messages[1].staleMonitors).eql([secondMonitor.id]);
- // does not delete the stale monitor
- const getResponse = await supertest
- .get(API_URLS.SYNTHETICS_MONITORS)
- .query({
- filter: `${syntheticsMonitorType}.attributes.journey_id: ${secondMonitor.id}`,
- })
+ const { body } = await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
+ .send({ monitors: [{ ...projectMonitors.monitors[0], schedule: '3m', tags: '' }] })
.expect(200);
- const { monitors } = getResponse.body;
-
- expect(monitors.length).eql(1);
+ expect(body).eql({
+ updatedMonitors: [],
+ failedMonitors: [
+ {
+ details: 'Invalid value "3m" supplied to "schedule"',
+ id: projectMonitors.monitors[0].id,
+ payload: {
+ content:
+ 'UEsDBBQACAAIAON5qVQAAAAAAAAAAAAAAAAfAAAAZXhhbXBsZXMvdG9kb3MvYmFzaWMuam91cm5leS50c22Q0WrDMAxF3/sVF7MHB0LMXlc6RvcN+wDPVWNviW0sdUsp/fe5SSiD7UFCWFfHujIGlpnkybwxFTZfoY/E3hsaLEtwhs9RPNWKDU12zAOxkXRIbN4tB9d9pFOJdO6EN2HMqQguWN9asFBuQVMmJ7jiWNII9fIXrbabdUYr58l9IhwhQQZCYORCTFFUC31Btj21NRc7Mq4Nds+4bDD/pNVgT9F52Jyr2Fa+g75LAPttg8yErk+S9ELpTmVotlVwnfNCuh2lepl3+JflUmSBJ3uggt1v9INW/lHNLKze9dJe1J3QJK8pSvWkm6aTtCet5puq+x63+AFQSwcIAPQ3VfcAAACcAQAAUEsBAi0DFAAIAAgA43mpVAD0N1X3AAAAnAEAAB8AAAAAAAAAAAAgAKSBAAAAAGV4YW1wbGVzL3RvZG9zL2Jhc2ljLmpvdXJuZXkudHNQSwUGAAAAAAEAAQBNAAAARAEAAAAA',
+ filter: {
+ match: 'check if title is present',
+ },
+ id: projectMonitors.monitors[0].id,
+ locations: ['localhost'],
+ name: 'check if title is present',
+ params: {},
+ playwrightOptions: {
+ chromiumSandbox: false,
+ headless: true,
+ },
+ schedule: '3m',
+ tags: '',
+ throttling: {
+ download: 5,
+ latency: 20,
+ upload: 3,
+ },
+ type: 'browser',
+ hash: 'ekrjelkjrelkjre',
+ },
+ reason: 'Failed to save or update monitor. Configuration is not valid',
+ },
+ ],
+ createdMonitors: [],
+ });
} finally {
await Promise.all([
- testMonitors.map((monitor) => {
- return deleteMonitor(monitor.id, projectMonitors.project);
+ projectMonitors.monitors.map((monitor) => {
+ return deleteMonitor(monitor.id, project);
}),
]);
}
});
- it('project monitors - deletes monitors when keep stale is false', async () => {
- const secondMonitor = { ...projectMonitors.monitors[0], id: 'test-id-2' };
- const testMonitors = [projectMonitors.monitors[0], secondMonitor];
-
+ it('project monitors - saves space as data stream namespace', async () => {
+ const project = `test-project-${uuid.v4()}`;
+ const username = 'admin';
+ const roleName = `synthetics_admin`;
+ const password = `${username}-password`;
+ const SPACE_ID = `test-space-${uuid.v4()}`;
+ const SPACE_NAME = `test-space-name ${uuid.v4()}`;
+ await kibanaServer.spaces.create({ id: SPACE_ID, name: SPACE_NAME });
try {
- await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
- .set('kbn-xsrf', 'true')
- .send({
- ...projectMonitors,
- keep_stale: false,
- monitors: testMonitors,
- project: 'test-project-2',
- });
-
- const messages = await parseStreamApiResponse(
- projectMonitorEndpoint,
- JSON.stringify({
- ...projectMonitors,
- keep_stale: false,
- project: 'test-project-2',
- })
- );
-
- expect(messages).to.have.length(3);
-
- // expect monitor to have been deleted
- const getResponse = await supertest
- .get(API_URLS.SYNTHETICS_MONITORS)
- .query({
- filter: `${syntheticsMonitorType}.attributes.journey_id: ${secondMonitor.id}`,
- })
+ await security.role.create(roleName, {
+ kibana: [
+ {
+ feature: {
+ uptime: ['all'],
+ },
+ spaces: ['*'],
+ },
+ ],
+ });
+ await security.user.create(username, {
+ password,
+ roles: [roleName],
+ full_name: 'a kibana user',
+ });
+ await supertestWithoutAuth
+ .put(
+ `/s/${SPACE_ID}${API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace(
+ '{projectName}',
+ project
+ )}`
+ )
+ .auth(username, password)
.set('kbn-xsrf', 'true')
+ .send(projectMonitors)
.expect(200);
-
- const { monitors } = getResponse.body;
- expect(monitors[0]).eql(undefined);
- expect(messages[0]).eql(` 1 monitor found with no changes.`);
- expect(messages[1]).eql(`Monitor ${secondMonitor.id} deleted successfully`);
- expect(messages[2].createdMonitors).eql([]);
- expect(messages[2].failedMonitors).eql([]);
- expect(messages[2].updatedMonitors).eql([projectMonitors.monitors[0].id]);
- expect(messages[2].deletedMonitors).eql([secondMonitor.id]);
- expect(messages[2].staleMonitors).eql([]);
- } finally {
- await Promise.all([
- testMonitors.map((monitor) => {
- return deleteMonitor(monitor.id, projectMonitors.project);
- }),
- ]);
- }
- });
-
- it('project monitors - does not delete monitors from different suites when keep stale is false', async () => {
- const secondMonitor = { ...projectMonitors.monitors[0], id: 'test-id-2' };
- const testMonitors = [projectMonitors.monitors[0], secondMonitor];
- const testprojectId = 'test-suite-2';
- try {
- await parseStreamApiResponse(
- projectMonitorEndpoint,
- JSON.stringify({
- ...projectMonitors,
- keep_stale: false,
- monitors: testMonitors,
- })
- );
-
- const messages = await parseStreamApiResponse(
- projectMonitorEndpoint,
- JSON.stringify({
- ...projectMonitors,
- keep_stale: false,
- project: testprojectId,
- })
- );
-
- expect(messages).to.have.length(2);
- expect(messages[1].createdMonitors).eql([projectMonitors.monitors[0].id]);
- expect(messages[1].failedMonitors).eql([]);
- expect(messages[1].deletedMonitors).eql([]);
- expect(messages[1].updatedMonitors).eql([]);
- expect(messages[1].staleMonitors).eql([]);
-
// expect monitor not to have been deleted
- const getResponse = await supertest
- .get(API_URLS.SYNTHETICS_MONITORS)
+ const getResponse = await supertestWithoutAuth
+ .get(`/s/${SPACE_ID}${API_URLS.SYNTHETICS_MONITORS}`)
+ .auth(username, password)
.query({
- filter: `${syntheticsMonitorType}.attributes.journey_id: ${secondMonitor.id}`,
+ filter: `${syntheticsMonitorType}.attributes.journey_id: ${projectMonitors.monitors[0].id}`,
})
.set('kbn-xsrf', 'true')
.expect(200);
-
const { monitors } = getResponse.body;
-
expect(monitors.length).eql(1);
+ expect(monitors[0].attributes[ConfigKey.NAMESPACE]).eql(formatKibanaNamespace(SPACE_ID));
} finally {
- await Promise.all([
- testMonitors.map((monitor) => {
- return deleteMonitor(monitor.id, projectMonitors.project);
- }),
- ]);
-
- await Promise.all([
- testMonitors.map((monitor) => {
- return deleteMonitor(monitor.id, testprojectId);
- }),
- ]);
+ await deleteMonitor(projectMonitors.monitors[0].id, project, SPACE_ID);
+ await security.user.delete(username);
+ await security.role.delete(roleName);
}
});
- it('project monitors - does not delete a monitor from the same suite in a different space', async () => {
- const secondMonitor = { ...projectMonitors.monitors[0], id: 'test-id-2' };
- const testMonitors = [projectMonitors.monitors[0], secondMonitor];
- const username = 'admin';
- const roleName = `synthetics_admin`;
- const password = `${username}-password`;
- const SPACE_ID = `test-space-${uuid.v4()}`;
- const SPACE_NAME = `test-space-name ${uuid.v4()}`;
- await kibanaServer.spaces.create({ id: SPACE_ID, name: SPACE_NAME });
- try {
- await security.role.create(roleName, {
- kibana: [
- {
- feature: {
- uptime: ['all'],
- },
- spaces: ['*'],
- },
- ],
- });
- await security.user.create(username, {
- password,
- roles: [roleName],
- full_name: 'a kibana user',
- });
- await parseStreamApiResponse(
- projectMonitorEndpoint,
- JSON.stringify({ ...projectMonitors, keep_stale: false, monitors: testMonitors }),
- {
- Authorization:
- 'Basic ' + Buffer.from(`${username}:${password}`, 'binary').toString('base64'),
- }
- );
-
- const spaceUrl =
- kibanaServerUrl + `/s/${SPACE_ID}${API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY}`;
-
- const messages = await parseStreamApiResponse(
- spaceUrl,
- JSON.stringify({ ...projectMonitors, keep_stale: false }),
- {
- Authorization:
- 'Basic ' + Buffer.from(`${username}:${password}`, 'binary').toString('base64'),
- }
- );
- expect(messages).to.have.length(2);
- expect(messages[1].createdMonitors).eql([projectMonitors.monitors[0].id]);
- expect(messages[1].failedMonitors).eql([]);
- expect(messages[1].deletedMonitors).eql([]);
- expect(messages[1].updatedMonitors).eql([]);
- expect(messages[1].staleMonitors).eql([]);
-
- const getResponse = await supertestWithoutAuth
- .get(API_URLS.SYNTHETICS_MONITORS)
- .auth(username, password)
- .query({
- filter: `${syntheticsMonitorType}.attributes.journey_id: ${secondMonitor.id}`,
- })
- .set('kbn-xsrf', 'true')
- .expect(200);
- const { monitors } = getResponse.body;
- expect(monitors.length).eql(1);
- } finally {
- await Promise.all([
- testMonitors.map((monitor) => {
- return deleteMonitor(
- monitor.id,
- projectMonitors.project,
- 'default',
- username,
- password
- );
- }),
- ]);
- await deleteMonitor(
- projectMonitors.monitors[0].id,
- projectMonitors.project,
- SPACE_ID,
- username,
- password
- );
- await security.user.delete(username);
- await security.role.delete(roleName);
- }
- });
-
- it('project monitors - validates monitor type', async () => {
- try {
- const messages = await parseStreamApiResponse(
- projectMonitorEndpoint,
- JSON.stringify({
- ...projectMonitors,
- monitors: [{ ...projectMonitors.monitors[0], schedule: '3m', tags: '' }],
- })
- );
-
- expect(messages).to.have.length(1);
- expect(messages[0].updatedMonitors).eql([]);
- expect(messages[0].failedMonitors).eql([
- {
- details: 'Invalid value "3m" supplied to "schedule"',
- id: projectMonitors.monitors[0].id,
- payload: {
- content:
- 'UEsDBBQACAAIAON5qVQAAAAAAAAAAAAAAAAfAAAAZXhhbXBsZXMvdG9kb3MvYmFzaWMuam91cm5leS50c22Q0WrDMAxF3/sVF7MHB0LMXlc6RvcN+wDPVWNviW0sdUsp/fe5SSiD7UFCWFfHujIGlpnkybwxFTZfoY/E3hsaLEtwhs9RPNWKDU12zAOxkXRIbN4tB9d9pFOJdO6EN2HMqQguWN9asFBuQVMmJ7jiWNII9fIXrbabdUYr58l9IhwhQQZCYORCTFFUC31Btj21NRc7Mq4Nds+4bDD/pNVgT9F52Jyr2Fa+g75LAPttg8yErk+S9ELpTmVotlVwnfNCuh2lepl3+JflUmSBJ3uggt1v9INW/lHNLKze9dJe1J3QJK8pSvWkm6aTtCet5puq+x63+AFQSwcIAPQ3VfcAAACcAQAAUEsBAi0DFAAIAAgA43mpVAD0N1X3AAAAnAEAAB8AAAAAAAAAAAAgAKSBAAAAAGV4YW1wbGVzL3RvZG9zL2Jhc2ljLmpvdXJuZXkudHNQSwUGAAAAAAEAAQBNAAAARAEAAAAA',
- filter: {
- match: 'check if title is present',
- },
- id: projectMonitors.monitors[0].id,
- locations: ['localhost'],
- name: 'check if title is present',
- params: {},
- playwrightOptions: {
- chromiumSandbox: false,
- headless: true,
- },
- schedule: '3m',
- tags: '',
- throttling: {
- download: 5,
- latency: 20,
- upload: 3,
- },
- type: 'browser',
- hash: 'ekrjelkjrelkjre',
- },
- reason: 'Failed to save or update monitor. Configuration is not valid',
- },
- ]);
- expect(messages[0].createdMonitors).eql([]);
- } finally {
- await Promise.all([
- projectMonitors.monitors.map((monitor) => {
- return deleteMonitor(monitor.id, projectMonitors.project);
- }),
- ]);
- }
- });
-
- it('project monitors - saves space as data stream namespace', async () => {
- const username = 'admin';
- const roleName = `synthetics_admin`;
- const password = `${username}-password`;
- const SPACE_ID = `test-space-${uuid.v4()}`;
- const SPACE_NAME = `test-space-name ${uuid.v4()}`;
- await kibanaServer.spaces.create({ id: SPACE_ID, name: SPACE_NAME });
- try {
- await security.role.create(roleName, {
- kibana: [
- {
- feature: {
- uptime: ['all'],
- },
- spaces: ['*'],
- },
- ],
- });
- await security.user.create(username, {
- password,
- roles: [roleName],
- full_name: 'a kibana user',
- });
- await supertestWithoutAuth
- .put(`/s/${SPACE_ID}${API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY}`)
- .auth(username, password)
- .set('kbn-xsrf', 'true')
- .send(projectMonitors)
- .expect(200);
- // expect monitor not to have been deleted
- const getResponse = await supertestWithoutAuth
- .get(`/s/${SPACE_ID}${API_URLS.SYNTHETICS_MONITORS}`)
- .auth(username, password)
- .query({
- filter: `${syntheticsMonitorType}.attributes.journey_id: ${projectMonitors.monitors[0].id}`,
- })
- .set('kbn-xsrf', 'true')
- .expect(200);
- const { monitors } = getResponse.body;
- expect(monitors.length).eql(1);
- expect(monitors[0].attributes[ConfigKey.NAMESPACE]).eql(formatKibanaNamespace(SPACE_ID));
- } finally {
- await deleteMonitor(
- projectMonitors.monitors[0].id,
- projectMonitors.project,
- SPACE_ID,
- username,
- password
- );
- await security.user.delete(username);
- await security.role.delete(roleName);
- }
- });
-
- it('project monitors - formats custom id appropriately', async () => {
+ it('project monitors - formats custom id appropriately', async () => {
+ const project = `test project ${uuid.v4()}`;
const username = 'admin';
const roleName = `synthetics_admin`;
const password = `${username}-password`;
@@ -1029,12 +725,16 @@ export default function ({ getService }: FtrProviderContext) {
full_name: 'a kibana user',
});
await supertestWithoutAuth
- .put(`/s/${SPACE_ID}${API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY}`)
+ .put(
+ `/s/${SPACE_ID}${API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace(
+ '{projectName}',
+ project
+ )}`
+ )
.auth(username, password)
.set('kbn-xsrf', 'true')
.send(projectMonitors)
.expect(200);
- // expect monitor not to have been deleted
const getResponse = await supertestWithoutAuth
.get(`/s/${SPACE_ID}${API_URLS.SYNTHETICS_MONITORS}`)
.auth(username, password)
@@ -1046,27 +746,23 @@ export default function ({ getService }: FtrProviderContext) {
const { monitors } = getResponse.body;
expect(monitors.length).eql(1);
expect(monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID]).eql(
- `${projectMonitors.monitors[0].id}-${projectMonitors.project}-${SPACE_ID}`
+ `${projectMonitors.monitors[0].id}-${project}-${SPACE_ID}`
);
} finally {
- await deleteMonitor(
- projectMonitors.monitors[0].id,
- projectMonitors.project,
- SPACE_ID,
- username,
- password
- );
+ await deleteMonitor(projectMonitors.monitors[0].id, project, SPACE_ID);
await security.user.delete(username);
await security.role.delete(roleName);
}
});
it('project monitors - is able to decrypt monitor when updated after hydration', async () => {
+ const project = `test-project-${uuid.v4()}`;
try {
await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
- .send(projectMonitors);
+ .send(projectMonitors)
+ .expect(200);
const response = await supertest
.get(API_URLS.SYNTHETICS_MONITORS)
@@ -1093,13 +789,17 @@ export default function ({ getService }: FtrProviderContext) {
.expect(200);
// update project monitor via push api
- const messages = await parseStreamApiResponse(
- projectMonitorEndpoint,
- JSON.stringify(projectMonitors)
- );
- expect(messages).to.have.length(2);
- expect(messages[0]).eql('1 monitor updated successfully. ');
- expect(messages[1].updatedMonitors).eql([projectMonitors.monitors[0].id]);
+ const { body } = await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
+ .set('kbn-xsrf', 'true')
+ .send(projectMonitors)
+ .expect(200);
+
+ expect(body).eql({
+ updatedMonitors: [projectMonitors.monitors[0].id],
+ createdMonitors: [],
+ failedMonitors: [],
+ });
// ensure that monitor can still be decrypted
await supertest
@@ -1109,21 +809,23 @@ export default function ({ getService }: FtrProviderContext) {
} finally {
await Promise.all([
projectMonitors.monitors.map((monitor) => {
- return deleteMonitor(monitor.id, projectMonitors.project);
+ return deleteMonitor(monitor.id, project);
}),
]);
}
});
it('project monitors - is able to enable and disable monitors', async () => {
+ const project = `test-project-${uuid.v4()}`;
+
try {
await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
.send(projectMonitors);
await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
.send({
...projectMonitors,
@@ -1147,13 +849,15 @@ export default function ({ getService }: FtrProviderContext) {
} finally {
await Promise.all([
projectMonitors.monitors.map((monitor) => {
- return deleteMonitor(monitor.id, projectMonitors.project);
+ return deleteMonitor(monitor.id, project);
}),
]);
}
});
it('project monitors - returns a failed monitor when user defines a private location without fleet permissions', async () => {
+ const project = `test-project-${uuid.v4()}`;
+
const secondMonitor = {
...projectMonitors.monitors[0],
id: 'test-id-2',
@@ -1180,27 +884,16 @@ export default function ({ getService }: FtrProviderContext) {
full_name: 'a kibana user',
});
- const messages = await parseStreamApiResponse(
- kibanaServerUrl + API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY,
- JSON.stringify({
- ...projectMonitors,
- keep_stale: false,
- monitors: testMonitors,
- }),
- {
- Authorization:
- 'Basic ' + Buffer.from(`${username}:${password}`, 'binary').toString('base64'),
- }
- );
+ const { body } = await supertestWithoutAuth
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
+ .auth(username, password)
+ .set('kbn-xsrf', 'true')
+ .send({ monitors: testMonitors })
+ .expect(200);
- expect(messages).to.have.length(3);
- expect(messages[0]).to.eql('test-id-2: failed to create or update monitor');
- expect(messages[1]).to.eql(`1 monitor created successfully.`);
- expect(messages[2]).to.eql({
+ expect(body).eql({
createdMonitors: [testMonitors[0].id],
updatedMonitors: [],
- staleMonitors: [],
- deletedMonitors: [],
failedMonitors: [
{
details:
@@ -1233,126 +926,11 @@ export default function ({ getService }: FtrProviderContext) {
reason: 'Failed to create or update monitor',
},
],
- failedStaleMonitors: [],
- });
- } finally {
- await Promise.all([
- testMonitors.map((monitor) => {
- return deleteMonitor(
- monitor.id,
- projectMonitors.project,
- 'default',
- username,
- password
- );
- }),
- ]);
- await security.user.delete(username);
- await security.role.delete(roleName);
- }
- });
-
- it('project monitors - returns a failed monitor when user tries to delete a monitor without fleet permissions', async () => {
- const secondMonitor = {
- ...projectMonitors.monitors[0],
- id: 'test-id-2',
- privateLocations: ['Test private location 0'],
- };
- const testMonitors = [projectMonitors.monitors[0], secondMonitor];
- const username = 'test-username';
- const roleName = 'uptime read only';
- const password = `test-password`;
- try {
- await security.role.create(roleName, {
- kibana: [
- {
- feature: {
- uptime: ['all'],
- },
- spaces: ['*'],
- },
- ],
- });
- await security.user.create(username, {
- password,
- roles: [roleName],
- full_name: 'a kibana user',
- });
-
- await parseStreamApiResponse(
- kibanaServerUrl + API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY,
- JSON.stringify({
- ...projectMonitors,
- keep_stale: false,
- monitors: testMonitors,
- })
- );
-
- const messages = await parseStreamApiResponse(
- kibanaServerUrl + API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY,
- JSON.stringify({
- ...projectMonitors,
- keep_stale: false,
- monitors: [],
- }),
- {
- Authorization:
- 'Basic ' + Buffer.from(`${username}:${password}`, 'binary').toString('base64'),
- }
- );
-
- expect(messages).to.have.length(3);
- expect(
- messages.filter((msg) => msg === `Monitor ${testMonitors[1].id} could not be deleted`)
- ).to.have.length(1);
- expect(
- messages.filter((msg) => msg === `Monitor ${testMonitors[0].id} deleted successfully`)
- ).to.have.length(1);
- expect(messages[2]).to.eql({
- createdMonitors: [],
- updatedMonitors: [],
- staleMonitors: [],
- deletedMonitors: [testMonitors[0].id],
- failedMonitors: [],
- failedStaleMonitors: [
- {
- details:
- 'Unable to delete Synthetics package policy for monitor check if title is present. Fleet write permissions are needed to use Synthetics private locations.',
- id: 'test-id-2',
- reason: 'Failed to delete stale monitor',
- },
- ],
- });
-
- const messages2 = await parseStreamApiResponse(
- kibanaServerUrl + API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY,
- JSON.stringify({
- ...projectMonitors,
- keep_stale: false,
- monitors: [],
- })
- );
-
- expect(messages2).to.have.length(2);
- expect(messages2[0]).to.eql(`Monitor ${testMonitors[1].id} deleted successfully`);
- expect(messages2[1]).to.eql({
- createdMonitors: [],
- updatedMonitors: [],
- staleMonitors: [],
- deletedMonitors: [testMonitors[1].id],
- failedMonitors: [],
- failedStaleMonitors: [],
});
} finally {
await Promise.all([
testMonitors.map((monitor) => {
- return deleteMonitor(
- monitor.id,
- projectMonitors.project,
- 'default',
- username,
- password
- );
+ return deleteMonitor(monitor.id, project, 'default');
}),
]);
await security.user.delete(username);
@@ -1361,6 +939,7 @@ export default function ({ getService }: FtrProviderContext) {
});
it('project monitors - returns a successful monitor when user defines a private location with fleet permissions', async () => {
+ const project = `test-project-${uuid.v4()}`;
const secondMonitor = {
...projectMonitors.monitors[0],
id: 'test-id-2',
@@ -1388,36 +967,21 @@ export default function ({ getService }: FtrProviderContext) {
roles: [roleName],
full_name: 'a kibana user',
});
- const messages = await parseStreamApiResponse(
- projectMonitorEndpoint,
- JSON.stringify({
- ...projectMonitors,
- keep_stale: false,
- monitors: testMonitors,
- })
- );
- expect(messages).to.have.length(2);
- expect(messages).to.eql([
- `2 monitors created successfully.`,
- {
- createdMonitors: [testMonitors[0].id, 'test-id-2'],
- updatedMonitors: [],
- staleMonitors: [],
- deletedMonitors: [],
- failedMonitors: [],
- failedStaleMonitors: [],
- },
- ]);
+ const { body } = await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
+ .set('kbn-xsrf', 'true')
+ .send({ monitors: testMonitors })
+ .expect(200);
+
+ expect(body).to.eql({
+ createdMonitors: [testMonitors[0].id, 'test-id-2'],
+ updatedMonitors: [],
+ failedMonitors: [],
+ });
} finally {
await Promise.all([
testMonitors.map((monitor) => {
- return deleteMonitor(
- monitor.id,
- projectMonitors.project,
- 'default',
- username,
- password
- );
+ return deleteMonitor(monitor.id, project, 'default');
}),
]);
await security.user.delete(username);
@@ -1426,16 +990,19 @@ export default function ({ getService }: FtrProviderContext) {
});
it('creates integration policies for project monitors with private locations', async () => {
+ const project = `test-project-${uuid.v4()}`;
+
try {
await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
.send({
...projectMonitors,
monitors: [
{ ...projectMonitors.monitors[0], privateLocations: ['Test private location 0'] },
],
- });
+ })
+ .expect(200);
const monitorsResponse = await supertest
.get(API_URLS.SYNTHETICS_MONITORS)
@@ -1457,7 +1024,7 @@ export default function ({ getService }: FtrProviderContext) {
}-${testPolicyId}`
);
expect(packagePolicy.name).eql(
- `${projectMonitors.monitors[0].id}-${projectMonitors.project}-default-Test private location 0`
+ `${projectMonitors.monitors[0].id}-${project}-default-Test private location 0`
);
expect(packagePolicy.policy_id).eql(testPolicyId);
@@ -1471,10 +1038,11 @@ export default function ({ getService }: FtrProviderContext) {
name: 'check if title is present-Test private location 0',
id,
configId,
+ projectId: project,
})
);
} finally {
- await deleteMonitor(projectMonitors.monitors[0].id, projectMonitors.project);
+ await deleteMonitor(projectMonitors.monitors[0].id, project);
const packagesResponse = await supertest.get(
'/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
@@ -1484,17 +1052,19 @@ export default function ({ getService }: FtrProviderContext) {
});
it('deletes integration policies for project monitors when private location is removed from the monitor - lightweight', async () => {
+ const project = `test-project-${uuid.v4()}`;
+
const monitorRequest = {
- ...httpProjectMonitors,
monitors: [
{ ...httpProjectMonitors.monitors[1], privateLocations: ['Test private location 0'] },
],
};
try {
await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
- .send(monitorRequest);
+ .send(monitorRequest)
+ .expect(200);
const monitorsResponse = await supertest
.get(API_URLS.SYNTHETICS_MONITORS)
@@ -1519,12 +1089,12 @@ export default function ({ getService }: FtrProviderContext) {
expect(packagePolicy.policy_id).eql(testPolicyId);
await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
.send({
- ...monitorRequest,
monitors: [{ ...monitorRequest.monitors[0], privateLocations: [] }],
- });
+ })
+ .expect(200);
const apiResponsePolicy2 = await supertest.get(
'/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
@@ -1540,21 +1110,23 @@ export default function ({ getService }: FtrProviderContext) {
expect(packagePolicy2).eql(undefined);
} finally {
- await deleteMonitor(projectMonitors.monitors[0].id, projectMonitors.project);
+ await deleteMonitor(projectMonitors.monitors[0].id, project);
}
});
it('deletes integration policies for project monitors when private location is removed from the monitor', async () => {
+ const project = `test-project-${uuid.v4()}`;
+
try {
await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
.send({
- ...projectMonitors,
monitors: [
{ ...projectMonitors.monitors[0], privateLocations: ['Test private location 0'] },
],
- });
+ })
+ .expect(200);
const monitorsResponse = await supertest
.get(API_URLS.SYNTHETICS_MONITORS)
@@ -1588,160 +1160,23 @@ export default function ({ getService }: FtrProviderContext) {
name: 'check if title is present-Test private location 0',
id,
configId,
+ projectId: project,
})
);
await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
.send({
- ...projectMonitors,
monitors: [{ ...projectMonitors.monitors[0], privateLocations: [] }],
- });
-
- const apiResponsePolicy2 = await supertest.get(
- '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
- );
-
- const packagePolicy2 = apiResponsePolicy2.body.items.find(
- (pkgPolicy: PackagePolicy) =>
- pkgPolicy.id ===
- `${
- monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID]
- }-${testPolicyId}`
- );
-
- expect(packagePolicy2).eql(undefined);
- } finally {
- await deleteMonitor(projectMonitors.monitors[0].id, projectMonitors.project);
-
- const apiResponsePolicy2 = await supertest.get(
- '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
- );
- expect(apiResponsePolicy2.body.items.length).eql(0);
- }
- });
-
- it('deletes integration policies when project monitors are deleted', async () => {
- try {
- await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
- .set('kbn-xsrf', 'true')
- .send({
- ...projectMonitors,
- monitors: [
- { ...projectMonitors.monitors[0], privateLocations: ['Test private location 0'] },
- ],
- })
- .expect(200);
-
- const monitorsResponse = await supertest
- .get(API_URLS.SYNTHETICS_MONITORS)
- .query({
- filter: `${syntheticsMonitorType}.attributes.journey_id: ${projectMonitors.monitors[0].id}`,
- })
- .set('kbn-xsrf', 'true')
- .expect(200);
-
- const apiResponsePolicy = await supertest.get(
- '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
- );
-
- const packagePolicy = apiResponsePolicy.body.items.find(
- (pkgPolicy: PackagePolicy) =>
- pkgPolicy.id ===
- monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID] +
- '-' +
- testPolicyId
- );
-
- expect(packagePolicy.policy_id).eql(testPolicyId);
-
- const configId = monitorsResponse.body.monitors[0].id;
- const id = monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID];
-
- comparePolicies(
- packagePolicy,
- getTestProjectSyntheticsPolicy({
- inputs: {},
- name: 'check if title is present-Test private location 0',
- id,
- configId,
})
- );
-
- await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
- .set('kbn-xsrf', 'true')
- .send({
- ...projectMonitors,
- monitors: [],
- keep_stale: false,
- });
-
- const monitorsResponse2 = await supertest
- .get(API_URLS.SYNTHETICS_MONITORS)
- .query({
- filter: `${syntheticsMonitorType}.attributes.journey_id: ${projectMonitors.monitors[0].id}`,
- })
- .set('kbn-xsrf', 'true')
.expect(200);
- expect(monitorsResponse2.body.monitors.length).eql(0);
-
- await new Promise((resolve) => {
- setTimeout(() => resolve(null), 3000);
- });
-
const apiResponsePolicy2 = await supertest.get(
'/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
);
const packagePolicy2 = apiResponsePolicy2.body.items.find(
- (pkgPolicy: PackagePolicy) =>
- pkgPolicy.id ===
- monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID] +
- '-' +
- testPolicyId
- );
-
- expect(packagePolicy2).eql(undefined);
- } finally {
- await deleteMonitor(projectMonitors.monitors[0].id, projectMonitors.project);
-
- const apiResponsePolicy2 = await supertest.get(
- '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
- );
- expect(apiResponsePolicy2.body.items.length).eql(0);
- }
- });
-
- it('deletes integration policies when project monitors are deleted - lightweight', async () => {
- const monitorRequest = {
- ...httpProjectMonitors,
- monitors: [
- { ...httpProjectMonitors.monitors[1], privateLocations: ['Test private location 0'] },
- ],
- };
- try {
- await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
- .set('kbn-xsrf', 'true')
- .send(monitorRequest);
-
- const monitorsResponse = await supertest
- .get(API_URLS.SYNTHETICS_MONITORS)
- .query({
- filter: `${syntheticsMonitorType}.attributes.journey_id: ${monitorRequest.monitors[0].id}`,
- })
- .set('kbn-xsrf', 'true')
- .expect(200);
-
- const apiResponsePolicy = await supertest.get(
- '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
- );
-
- const packagePolicy = apiResponsePolicy.body.items.find(
(pkgPolicy: PackagePolicy) =>
pkgPolicy.id ===
`${
@@ -1749,138 +1184,9 @@ export default function ({ getService }: FtrProviderContext) {
}-${testPolicyId}`
);
- expect(packagePolicy.policy_id).eql(testPolicyId);
-
- const configId = monitorsResponse.body.monitors[0].id;
- const id = monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID];
-
- const httpInput = packagePolicy.inputs.find(
- (input: any) => input.type === 'synthetics/http'
- );
- expect(httpInput).to.eql({
- type: 'synthetics/http',
- policy_template: 'synthetics',
- enabled: true,
- streams: [
- {
- enabled: true,
- data_stream: { type: 'synthetics', dataset: 'http' },
- release: 'experimental',
- vars: {
- __ui: { value: '{"is_tls_enabled":false}', type: 'yaml' },
- enabled: { value: false, type: 'bool' },
- type: { value: 'http', type: 'text' },
- name: { value: 'My Monitor 3', type: 'text' },
- schedule: { value: '"@every 60m"', type: 'text' },
- urls: { value: 'http://localhost:9200', type: 'text' },
- 'service.name': { value: '', type: 'text' },
- timeout: { value: '80s', type: 'text' },
- max_redirects: { value: '0', type: 'integer' },
- proxy_url: { value: '', type: 'text' },
- tags: { value: '["tag2","tag2"]', type: 'yaml' },
- username: { value: '', type: 'text' },
- password: { value: '', type: 'password' },
- 'response.include_headers': { value: false, type: 'bool' },
- 'response.include_body': { value: 'always', type: 'text' },
- 'check.request.method': { value: 'POST', type: 'text' },
- 'check.request.headers': {
- value: '{"Content-Type":"application/x-www-form-urlencoded"}',
- type: 'yaml',
- },
- 'check.request.body': { value: null, type: 'yaml' },
- 'check.response.status': { value: '["200"]', type: 'yaml' },
- 'check.response.headers': { value: null, type: 'yaml' },
- 'check.response.body.positive': { value: '["Saved","saved"]', type: 'yaml' },
- 'check.response.body.negative': { value: null, type: 'yaml' },
- 'ssl.certificate_authorities': { value: null, type: 'yaml' },
- 'ssl.certificate': { value: null, type: 'yaml' },
- 'ssl.key': { value: null, type: 'yaml' },
- 'ssl.key_passphrase': { value: null, type: 'text' },
- 'ssl.verification_mode': { value: 'full', type: 'text' },
- 'ssl.supported_protocols': {
- value: '["TLSv1.1","TLSv1.2","TLSv1.3"]',
- type: 'yaml',
- },
- location_name: { value: 'Test private location 0', type: 'text' },
- id: {
- value: id,
- type: 'text',
- },
- config_id: { value: configId, type: 'text' },
- run_once: { value: false, type: 'bool' },
- origin: { value: 'project', type: 'text' },
- 'monitor.project.id': {
- type: 'text',
- value: 'test-suite',
- },
- 'monitor.project.name': {
- type: 'text',
- value: 'test-suite',
- },
- },
- id: `synthetics/http-http-${id}-${testPolicyId}`,
- compiled_stream: {
- __ui: { is_tls_enabled: false },
- type: 'http',
- name: 'My Monitor 3',
- id,
- origin: 'project',
- enabled: false,
- urls: 'http://localhost:9200',
- schedule: '@every 60m',
- timeout: '80s',
- max_redirects: 0,
- tags: ['tag2', 'tag2'],
- 'response.include_headers': false,
- 'response.include_body': 'always',
- 'check.request.method': 'POST',
- 'check.request.headers': { 'Content-Type': 'application/x-www-form-urlencoded' },
- 'check.response.status': ['200'],
- 'check.response.body.positive': ['Saved', 'saved'],
- 'ssl.verification_mode': 'full',
- 'ssl.supported_protocols': ['TLSv1.1', 'TLSv1.2', 'TLSv1.3'],
- processors: [
- { add_observer_metadata: { geo: { name: 'Test private location 0' } } },
- {
- add_fields: {
- target: '',
- fields: {
- 'monitor.fleet_managed': true,
- config_id: configId,
- 'monitor.project.id': 'test-suite',
- 'monitor.project.name': 'test-suite',
- },
- },
- },
- ],
- },
- },
- ],
- });
-
- await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
- .set('kbn-xsrf', 'true')
- .send({
- ...monitorRequest,
- monitors: [],
- });
-
- const apiResponsePolicy2 = await supertest.get(
- '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
- );
-
- const packagePolicy2 = apiResponsePolicy2.body.items.find(
- (pkgPolicy: PackagePolicy) =>
- pkgPolicy.id ===
- `${
- monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID]
- } - ${testPolicyId}`
- );
-
expect(packagePolicy2).eql(undefined);
} finally {
- await deleteMonitor(httpProjectMonitors.monitors[1].id, httpProjectMonitors.project);
+ await deleteMonitor(projectMonitors.monitors[0].id, project);
const apiResponsePolicy2 = await supertest.get(
'/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
@@ -1890,12 +1196,13 @@ export default function ({ getService }: FtrProviderContext) {
});
it('handles updating package policies when project monitors are updated', async () => {
+ const project = `test-project-${uuid.v4()}`;
+
try {
await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
.send({
- ...projectMonitors,
monitors: [
{
...projectMonitors.monitors[0],
@@ -1933,14 +1240,14 @@ export default function ({ getService }: FtrProviderContext) {
name: 'check if title is present-Test private location 0',
id,
configId,
+ projectId: project,
})
);
await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
.send({
- ...projectMonitors,
monitors: [
{
...projectMonitors.monitors[0],
@@ -1969,10 +1276,11 @@ export default function ({ getService }: FtrProviderContext) {
name: 'check if title is present-Test private location 0',
id: id2,
configId: configId2,
+ projectId: project,
})
);
} finally {
- await deleteMonitor(projectMonitors.monitors[0].id, projectMonitors.project);
+ await deleteMonitor(projectMonitors.monitors[0].id, project);
const apiResponsePolicy2 = await supertest.get(
'/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
@@ -1982,12 +1290,12 @@ export default function ({ getService }: FtrProviderContext) {
});
it('handles location formatting for both private and public locations', async () => {
+ const project = `test-project-${uuid.v4()}`;
try {
await supertest
- .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
.send({
- ...projectMonitors,
monitors: [
{ ...projectMonitors.monitors[0], privateLocations: ['Test private location 0'] },
],
@@ -2031,94 +1339,104 @@ export default function ({ getService }: FtrProviderContext) {
} finally {
await Promise.all([
projectMonitors.monitors.map((monitor) => {
- return deleteMonitor(monitor.id, projectMonitors.project);
+ return deleteMonitor(monitor.id, project);
}),
]);
}
});
- });
-}
-
-/**
- * Borrowed from AIOPS test code: https://github.com/elastic/kibana/blob/23a7ac2c2e2b1f64daa17b914e86989b1fde750c/x-pack/test/api_integration/apis/aiops/explain_log_rate_spikes.ts
- * Receives a stream and parses the messages until the stream closes.
- */
-async function* parseStream(stream: NodeJS.ReadableStream) {
- let partial = '';
-
- try {
- for await (const value of stream) {
- const full = `${partial}${value}`;
- const parts = full.split('\n');
- const last = parts.pop();
- partial = last ?? '';
+ it('only allows 250 requests at a time', async () => {
+ const project = `test-project-${uuid.v4()}`;
+ const monitors = [];
+ for (let i = 0; i < 251; i++) {
+ monitors.push({
+ ...projectMonitors.monitors[0],
+ id: `test-id-${i}`,
+ name: `test-name-${i}`,
+ });
+ }
- const event = parts.map((p) => JSON.parse(p));
+ try {
+ const {
+ body: { message },
+ } = await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
+ .set('kbn-xsrf', 'true')
+ .send({
+ monitors,
+ })
+ .expect(400);
- for (const events of event) {
- yield events;
+ expect(message).to.eql(REQUEST_TOO_LARGE);
+ } finally {
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send({ ...projectMonitors, keep_stale: false, project });
}
- }
- } catch (error) {
- yield { type: 'error', payload: error.toString() };
- }
-}
+ });
-/**
- * Helper function to process the results of the module's stream parsing helper function.
- */
-async function getMessages(stream: NodeJS.ReadableStream | null) {
- if (stream === null) return [];
- const data: any[] = [];
- for await (const action of parseStream(stream)) {
- data.push(action);
- }
- return data;
-}
+ it('project monitors - cannot update a monitor of one type to another type', async () => {
+ const project = `test-project-${uuid.v4()}`;
-/**
- * This type is intended to highlight any break between shared parameter contracts defined in
- * the module's streaming endpoint helper functions.
- */
-type StreamApiFunction = (
- url: string,
- body?: BodyInit,
- extraHeaders?: HeadersInit,
- method?: string
-) => T;
-
-/**
- * This helps the test file have DRY code when it comes to calling
- * the same streaming endpoint over and over by defining some selective defaults.
- */
-export const parseStreamApiResponse: StreamApiFunction> = async (
- url: string,
- body?: BodyInit,
- extraHeaders?: HeadersInit,
- method = 'PUT'
-) => {
- const streamResponse = await callStreamApi(url, body, extraHeaders, method);
- return getMessages(streamResponse.body);
-};
-
-/**
- * This helps the test file have DRY code when it comes to calling
- * the same streaming endpoint over and over by defining some selective defaults.
- */
-const callStreamApi: StreamApiFunction> = async (
- url: string,
- body?: BodyInit,
- extraHeaders?: HeadersInit,
- method = 'PUT'
-) => {
- return fetch(url, {
- method,
- headers: {
- 'Content-Type': 'application/json',
- 'kbn-xsrf': 'stream',
- ...extraHeaders,
- },
- body,
+ try {
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
+ .set('kbn-xsrf', 'true')
+ .send(projectMonitors)
+ .expect(200);
+ const { body } = await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project))
+ .set('kbn-xsrf', 'true')
+ .send({
+ monitors: [{ ...httpProjectMonitors.monitors[1], id: projectMonitors.monitors[0].id }],
+ })
+ .expect(200);
+ expect(body).eql({
+ createdMonitors: [],
+ updatedMonitors: [],
+ failedMonitors: [
+ {
+ details: `Monitor ${projectMonitors.monitors[0].id} of type browser cannot be updated to type http. Please delete the monitor first and try again.`,
+ payload: {
+ 'check.request': {
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ },
+ method: 'POST',
+ },
+ 'check.response': {
+ body: {
+ positive: ['Saved', 'saved'],
+ },
+ status: [200],
+ },
+ enabled: false,
+ hash: 'ekrjelkjrelkjre',
+ id: projectMonitors.monitors[0].id,
+ locations: ['localhost'],
+ name: 'My Monitor 3',
+ response: {
+ include_body: 'always',
+ },
+ 'response.include_headers': false,
+ schedule: 60,
+ timeout: '80s',
+ type: 'http',
+ tags: 'tag2,tag2',
+ urls: ['http://localhost:9200'],
+ },
+ reason: 'Cannot update monitor to different type.',
+ },
+ ],
+ });
+ } finally {
+ await Promise.all([
+ projectMonitors.monitors.map((monitor) => {
+ return deleteMonitor(monitor.id, project);
+ }),
+ ]);
+ }
+ });
});
-};
+}
diff --git a/x-pack/test/api_integration/apis/synthetics/add_monitor_project_legacy.ts b/x-pack/test/api_integration/apis/synthetics/add_monitor_project_legacy.ts
new file mode 100644
index 0000000000000..9d5e4b45f4e7f
--- /dev/null
+++ b/x-pack/test/api_integration/apis/synthetics/add_monitor_project_legacy.ts
@@ -0,0 +1,2127 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+import fetch, { BodyInit, HeadersInit, Response } from 'node-fetch';
+import uuid from 'uuid';
+import expect from '@kbn/expect';
+import { format as formatUrl } from 'url';
+import {
+ ConfigKey,
+ LegacyProjectMonitorsRequest,
+} from '@kbn/synthetics-plugin/common/runtime_types';
+import { API_URLS } from '@kbn/synthetics-plugin/common/constants';
+import { formatKibanaNamespace } from '@kbn/synthetics-plugin/common/formatters';
+import { syntheticsMonitorType } from '@kbn/synthetics-plugin/server/legacy_uptime/lib/saved_objects/synthetics_monitor';
+import { PackagePolicy } from '@kbn/fleet-plugin/common';
+import { FtrProviderContext } from '../../ftr_provider_context';
+import { getFixtureJson } from '../uptime/rest/helper/get_fixture_json';
+import { PrivateLocationTestService } from './services/private_location_test_service';
+import {
+ comparePolicies,
+ getTestProjectSyntheticsPolicy,
+} from '../uptime/rest/sample_data/test_policy';
+
+export default function ({ getService }: FtrProviderContext) {
+ describe('AddProjectLegacyMonitors', function () {
+ this.tags('skipCloud');
+
+ const supertest = getService('supertest');
+ const config = getService('config');
+ const kibanaServerUrl = formatUrl(config.get('servers.kibana'));
+ const supertestWithoutAuth = getService('supertestWithoutAuth');
+ const security = getService('security');
+ const kibanaServer = getService('kibanaServer');
+ const projectMonitorEndpoint = kibanaServerUrl + API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY;
+
+ let projectMonitors: LegacyProjectMonitorsRequest;
+ let httpProjectMonitors: LegacyProjectMonitorsRequest;
+ let tcpProjectMonitors: LegacyProjectMonitorsRequest;
+ let icmpProjectMonitors: LegacyProjectMonitorsRequest;
+
+ let testPolicyId = '';
+ const testPrivateLocations = new PrivateLocationTestService(getService);
+
+ const setUniqueIds = (request: LegacyProjectMonitorsRequest) => {
+ return {
+ ...request,
+ monitors: request.monitors.map((monitor) => ({ ...monitor, id: uuid.v4() })),
+ };
+ };
+
+ const deleteMonitor = async (
+ journeyId: string,
+ projectId: string,
+ space: string = 'default',
+ username: string = '',
+ password: string = ''
+ ) => {
+ try {
+ const response = await supertest
+ .get(`/s/${space}${API_URLS.SYNTHETICS_MONITORS}`)
+ .auth(username, password)
+ .query({
+ filter: `${syntheticsMonitorType}.attributes.journey_id: "${journeyId}" AND ${syntheticsMonitorType}.attributes.project_id: "${projectId}"`,
+ })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+ const { monitors } = response.body;
+ if (monitors[0]?.id) {
+ await supertest
+ .delete(`/s/${space}${API_URLS.SYNTHETICS_MONITORS}/${monitors[0].id}`)
+ .set('kbn-xsrf', 'true')
+ .send(projectMonitors)
+ .expect(200);
+ }
+ } catch (e) {
+ // eslint-disable-next-line no-console
+ console.error(e);
+ }
+ };
+
+ before(async () => {
+ await supertest.post('/api/fleet/setup').set('kbn-xsrf', 'true').send().expect(200);
+ await supertest
+ .post('/api/fleet/epm/packages/synthetics/0.10.3')
+ .set('kbn-xsrf', 'true')
+ .send({ force: true })
+ .expect(200);
+
+ const testPolicyName = 'Fleet test server policy' + Date.now();
+ const apiResponse = await testPrivateLocations.addFleetPolicy(testPolicyName);
+ testPolicyId = apiResponse.body.item.id;
+ await testPrivateLocations.setTestLocations([testPolicyId]);
+ });
+
+ beforeEach(() => {
+ projectMonitors = setUniqueIds(getFixtureJson('project_browser_monitor'));
+ httpProjectMonitors = setUniqueIds(getFixtureJson('project_http_monitor'));
+ tcpProjectMonitors = setUniqueIds(getFixtureJson('project_tcp_monitor'));
+ icmpProjectMonitors = setUniqueIds(getFixtureJson('project_icmp_monitor'));
+ });
+
+ it('project monitors - handles browser monitors', async () => {
+ const successfulMonitors = [projectMonitors.monitors[0]];
+
+ try {
+ const messages = await parseStreamApiResponse(
+ projectMonitorEndpoint,
+ JSON.stringify(projectMonitors)
+ );
+
+ expect(messages).to.have.length(2);
+ expect(messages[1].updatedMonitors).eql([]);
+ expect(messages[1].createdMonitors).eql(successfulMonitors.map((monitor) => monitor.id));
+ expect(messages[1].failedMonitors).eql([]);
+
+ for (const monitor of successfulMonitors) {
+ const journeyId = monitor.id;
+ const createdMonitorsResponse = await supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({ filter: `${syntheticsMonitorType}.attributes.journey_id: ${journeyId}` })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ const decryptedCreatedMonitor = await supertest
+ .get(`${API_URLS.SYNTHETICS_MONITORS}/${createdMonitorsResponse.body.monitors[0].id}`)
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ expect(decryptedCreatedMonitor.body.attributes).to.eql({
+ __ui: {
+ is_zip_url_tls_enabled: false,
+ script_source: {
+ file_name: '',
+ is_generated_script: false,
+ },
+ },
+ config_id: decryptedCreatedMonitor.body.id,
+ custom_heartbeat_id: `${journeyId}-test-suite-default`,
+ enabled: true,
+ 'filter_journeys.match': 'check if title is present',
+ 'filter_journeys.tags': [],
+ form_monitor_type: 'multistep',
+ ignore_https_errors: false,
+ journey_id: journeyId,
+ locations: [
+ {
+ geo: {
+ lat: 0,
+ lon: 0,
+ },
+ id: 'localhost',
+ isInvalid: false,
+ isServiceManaged: true,
+ label: 'Local Synthetics Service',
+ status: 'experimental',
+ url: 'mockDevUrl',
+ },
+ ],
+ name: 'check if title is present',
+ namespace: 'default',
+ origin: 'project',
+ original_space: 'default',
+ playwright_options: '{"headless":true,"chromiumSandbox":false}',
+ playwright_text_assertion: '',
+ project_id: 'test-suite',
+ params: '',
+ revision: 1,
+ schedule: {
+ number: '10',
+ unit: 'm',
+ },
+ screenshots: 'on',
+ 'service.name': '',
+ 'source.zip_url.folder': '',
+ 'source.zip_url.proxy_url': '',
+ 'source.zip_url.url': '',
+ 'source.zip_url.password': '',
+ 'source.zip_url.username': '',
+ synthetics_args: [],
+ tags: [],
+ 'throttling.config': '5d/3u/20l',
+ 'throttling.download_speed': '5',
+ 'throttling.is_enabled': true,
+ 'throttling.latency': '20',
+ 'throttling.upload_speed': '3',
+ 'ssl.certificate': '',
+ 'ssl.certificate_authorities': '',
+ 'ssl.supported_protocols': ['TLSv1.1', 'TLSv1.2', 'TLSv1.3'],
+ 'ssl.verification_mode': 'full',
+ 'ssl.key': '',
+ 'ssl.key_passphrase': '',
+ 'source.inline.script': '',
+ 'source.project.content':
+ 'UEsDBBQACAAIAON5qVQAAAAAAAAAAAAAAAAfAAAAZXhhbXBsZXMvdG9kb3MvYmFzaWMuam91cm5leS50c22Q0WrDMAxF3/sVF7MHB0LMXlc6RvcN+wDPVWNviW0sdUsp/fe5SSiD7UFCWFfHujIGlpnkybwxFTZfoY/E3hsaLEtwhs9RPNWKDU12zAOxkXRIbN4tB9d9pFOJdO6EN2HMqQguWN9asFBuQVMmJ7jiWNII9fIXrbabdUYr58l9IhwhQQZCYORCTFFUC31Btj21NRc7Mq4Nds+4bDD/pNVgT9F52Jyr2Fa+g75LAPttg8yErk+S9ELpTmVotlVwnfNCuh2lepl3+JflUmSBJ3uggt1v9INW/lHNLKze9dJe1J3QJK8pSvWkm6aTtCet5puq+x63+AFQSwcIAPQ3VfcAAACcAQAAUEsBAi0DFAAIAAgA43mpVAD0N1X3AAAAnAEAAB8AAAAAAAAAAAAgAKSBAAAAAGV4YW1wbGVzL3RvZG9zL2Jhc2ljLmpvdXJuZXkudHNQSwUGAAAAAAEAAQBNAAAARAEAAAAA',
+ timeout: null,
+ type: 'browser',
+ 'url.port': null,
+ urls: '',
+ id: `${journeyId}-test-suite-default`,
+ hash: 'ekrjelkjrelkjre',
+ });
+ }
+ } finally {
+ await Promise.all([
+ successfulMonitors.map((monitor) => {
+ return deleteMonitor(monitor.id, httpProjectMonitors.project);
+ }),
+ ]);
+ }
+ });
+
+ it('project monitors - handles http monitors', async () => {
+ const kibanaVersion = await kibanaServer.version.get();
+ const successfulMonitors = [httpProjectMonitors.monitors[1]];
+
+ try {
+ const messages = await parseStreamApiResponse(
+ projectMonitorEndpoint,
+ JSON.stringify(httpProjectMonitors)
+ );
+
+ expect(messages).to.have.length(3);
+ expect(messages[2].updatedMonitors).eql([]);
+ expect(messages[2].createdMonitors).eql(successfulMonitors.map((monitor) => monitor.id));
+ expect(messages[2].failedMonitors).eql([
+ {
+ id: httpProjectMonitors.monitors[0].id,
+ details: `Multiple urls are not supported for http project monitors in ${kibanaVersion}. Please set only 1 url per monitor. You monitor was not created or updated.`,
+ reason: 'Unsupported Heartbeat option',
+ },
+ {
+ id: httpProjectMonitors.monitors[0].id,
+ details: `The following Heartbeat options are not supported for ${httpProjectMonitors.monitors[0].type} project monitors in ${kibanaVersion}: check.response.body|unsupportedKey.nestedUnsupportedKey. You monitor was not created or updated.`,
+ reason: 'Unsupported Heartbeat option',
+ },
+ ]);
+
+ for (const monitor of successfulMonitors) {
+ const journeyId = monitor.id;
+ const createdMonitorsResponse = await supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({ filter: `${syntheticsMonitorType}.attributes.journey_id: ${journeyId}` })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ const decryptedCreatedMonitor = await supertest
+ .get(`${API_URLS.SYNTHETICS_MONITORS}/${createdMonitorsResponse.body.monitors[0].id}`)
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ expect(decryptedCreatedMonitor.body.attributes).to.eql({
+ __ui: {
+ is_tls_enabled: false,
+ },
+ 'check.request.method': 'POST',
+ 'check.response.status': ['200'],
+ config_id: decryptedCreatedMonitor.body.id,
+ custom_heartbeat_id: `${journeyId}-test-suite-default`,
+ 'check.response.body.negative': [],
+ 'check.response.body.positive': ['Saved', 'saved'],
+ 'check.response.headers': {},
+ 'check.request.body': {
+ type: 'text',
+ value: '',
+ },
+ 'check.request.headers': {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ },
+ enabled: false,
+ form_monitor_type: 'http',
+ journey_id: journeyId,
+ locations: [
+ {
+ geo: {
+ lat: 0,
+ lon: 0,
+ },
+ id: 'localhost',
+ isInvalid: false,
+ isServiceManaged: true,
+ label: 'Local Synthetics Service',
+ status: 'experimental',
+ url: 'mockDevUrl',
+ },
+ ],
+ max_redirects: '0',
+ name: monitor.name,
+ namespace: 'default',
+ origin: 'project',
+ original_space: 'default',
+ project_id: 'test-suite',
+ username: '',
+ password: '',
+ proxy_url: '',
+ 'response.include_body': 'always',
+ 'response.include_headers': false,
+ revision: 1,
+ schedule: {
+ number: '60',
+ unit: 'm',
+ },
+ 'service.name': '',
+ 'ssl.certificate': '',
+ 'ssl.certificate_authorities': '',
+ 'ssl.supported_protocols': ['TLSv1.1', 'TLSv1.2', 'TLSv1.3'],
+ 'ssl.verification_mode': 'full',
+ 'ssl.key': '',
+ 'ssl.key_passphrase': '',
+ tags: Array.isArray(monitor.tags) ? monitor.tags : monitor.tags?.split(','),
+ timeout: '80',
+ type: 'http',
+ urls: Array.isArray(monitor.urls) ? monitor.urls?.[0] : monitor.urls,
+ 'url.port': null,
+ id: `${journeyId}-test-suite-default`,
+ hash: 'ekrjelkjrelkjre',
+ });
+ }
+ } finally {
+ await Promise.all([
+ successfulMonitors.map((monitor) => {
+ return deleteMonitor(monitor.id, httpProjectMonitors.project);
+ }),
+ ]);
+ }
+ });
+
+ it('project monitors - handles tcp monitors', async () => {
+ const successfulMonitors = [tcpProjectMonitors.monitors[0], tcpProjectMonitors.monitors[1]];
+ const kibanaVersion = await kibanaServer.version.get();
+
+ try {
+ const messages = await parseStreamApiResponse(
+ projectMonitorEndpoint,
+ JSON.stringify(tcpProjectMonitors)
+ );
+
+ expect(messages).to.have.length(3);
+ expect(messages[2].updatedMonitors).eql([]);
+ expect(messages[2].createdMonitors).eql(successfulMonitors.map((monitor) => monitor.id));
+ expect(messages[2].failedMonitors).eql([
+ {
+ id: tcpProjectMonitors.monitors[2].id,
+ details: `Multiple hosts are not supported for tcp project monitors in ${kibanaVersion}. Please set only 1 host per monitor. You monitor was not created or updated.`,
+ reason: 'Unsupported Heartbeat option',
+ },
+ {
+ id: tcpProjectMonitors.monitors[2].id,
+ details: `The following Heartbeat options are not supported for ${tcpProjectMonitors.monitors[0].type} project monitors in ${kibanaVersion}: ports|unsupportedKey.nestedUnsupportedKey. You monitor was not created or updated.`,
+ reason: 'Unsupported Heartbeat option',
+ },
+ ]);
+
+ for (const monitor of successfulMonitors) {
+ const journeyId = monitor.id;
+ const createdMonitorsResponse = await supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({ filter: `${syntheticsMonitorType}.attributes.journey_id: ${journeyId}` })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ const decryptedCreatedMonitor = await supertest
+ .get(`${API_URLS.SYNTHETICS_MONITORS}/${createdMonitorsResponse.body.monitors[0].id}`)
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ expect(decryptedCreatedMonitor.body.attributes).to.eql({
+ __ui: {
+ is_tls_enabled: false,
+ },
+ config_id: decryptedCreatedMonitor.body.id,
+ custom_heartbeat_id: `${journeyId}-test-suite-default`,
+ 'check.receive': '',
+ 'check.send': '',
+ enabled: true,
+ form_monitor_type: 'tcp',
+ journey_id: journeyId,
+ locations: [
+ {
+ geo: {
+ lat: 0,
+ lon: 0,
+ },
+ id: 'localhost',
+ isInvalid: false,
+ isServiceManaged: true,
+ label: 'Local Synthetics Service',
+ status: 'experimental',
+ url: 'mockDevUrl',
+ },
+ ],
+ name: monitor.name,
+ namespace: 'default',
+ origin: 'project',
+ original_space: 'default',
+ project_id: 'test-suite',
+ revision: 1,
+ schedule: {
+ number: '1',
+ unit: 'm',
+ },
+ proxy_url: '',
+ proxy_use_local_resolver: false,
+ 'service.name': '',
+ 'ssl.certificate': '',
+ 'ssl.certificate_authorities': '',
+ 'ssl.supported_protocols': ['TLSv1.1', 'TLSv1.2', 'TLSv1.3'],
+ 'ssl.verification_mode': 'full',
+ 'ssl.key': '',
+ 'ssl.key_passphrase': '',
+ tags: Array.isArray(monitor.tags) ? monitor.tags : monitor.tags?.split(','),
+ timeout: '16',
+ type: 'tcp',
+ hosts: Array.isArray(monitor.hosts) ? monitor.hosts?.[0] : monitor.hosts,
+ 'url.port': null,
+ urls: '',
+ id: `${journeyId}-test-suite-default`,
+ hash: 'ekrjelkjrelkjre',
+ });
+ }
+ } finally {
+ await Promise.all([
+ successfulMonitors.map((monitor) => {
+ return deleteMonitor(monitor.id, tcpProjectMonitors.project);
+ }),
+ ]);
+ }
+ });
+
+ it('project monitors - handles icmp monitors', async () => {
+ const successfulMonitors = [icmpProjectMonitors.monitors[0], icmpProjectMonitors.monitors[1]];
+ const kibanaVersion = await kibanaServer.version.get();
+
+ try {
+ const messages = await parseStreamApiResponse(
+ projectMonitorEndpoint,
+ JSON.stringify(icmpProjectMonitors)
+ );
+
+ expect(messages).to.have.length(3);
+ expect(messages[2].updatedMonitors).eql([]);
+ expect(messages[2].createdMonitors).eql(successfulMonitors.map((monitor) => monitor.id));
+ expect(messages[2].failedMonitors).eql([
+ {
+ id: icmpProjectMonitors.monitors[2].id,
+ details: `Multiple hosts are not supported for icmp project monitors in ${kibanaVersion}. Please set only 1 host per monitor. You monitor was not created or updated.`,
+ reason: 'Unsupported Heartbeat option',
+ },
+ {
+ id: icmpProjectMonitors.monitors[2].id,
+ details: `The following Heartbeat options are not supported for ${icmpProjectMonitors.monitors[0].type} project monitors in ${kibanaVersion}: unsupportedKey.nestedUnsupportedKey. You monitor was not created or updated.`,
+ reason: 'Unsupported Heartbeat option',
+ },
+ ]);
+
+ for (const monitor of successfulMonitors) {
+ const journeyId = monitor.id;
+ const createdMonitorsResponse = await supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({ filter: `${syntheticsMonitorType}.attributes.journey_id: ${journeyId}` })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ const decryptedCreatedMonitor = await supertest
+ .get(`${API_URLS.SYNTHETICS_MONITORS}/${createdMonitorsResponse.body.monitors[0].id}`)
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ expect(decryptedCreatedMonitor.body.attributes).to.eql({
+ config_id: decryptedCreatedMonitor.body.id,
+ custom_heartbeat_id: `${journeyId}-test-suite-default`,
+ enabled: true,
+ form_monitor_type: 'icmp',
+ journey_id: journeyId,
+ locations: [
+ {
+ geo: {
+ lat: 0,
+ lon: 0,
+ },
+ id: 'localhost',
+ isInvalid: false,
+ isServiceManaged: true,
+ label: 'Local Synthetics Service',
+ status: 'experimental',
+ url: 'mockDevUrl',
+ },
+ {
+ agentPolicyId: testPolicyId,
+ concurrentMonitors: 1,
+ geo: {
+ lat: '',
+ lon: '',
+ },
+ id: testPolicyId,
+ isInvalid: false,
+ isServiceManaged: false,
+ label: 'Test private location 0',
+ },
+ ],
+ name: monitor.name,
+ namespace: 'default',
+ origin: 'project',
+ original_space: 'default',
+ project_id: 'test-suite',
+ revision: 1,
+ schedule: {
+ number: '1',
+ unit: 'm',
+ },
+ 'service.name': '',
+ tags: Array.isArray(monitor.tags) ? monitor.tags : monitor.tags?.split(','),
+ timeout: '16',
+ type: 'icmp',
+ hosts: Array.isArray(monitor.hosts) ? monitor.hosts?.[0] : monitor.hosts,
+ wait:
+ monitor.wait?.slice(-1) === 's'
+ ? monitor.wait?.slice(0, -1)
+ : `${parseInt(monitor.wait?.slice(0, -1) || '1', 10) * 60}`,
+ id: `${journeyId}-test-suite-default`,
+ hash: 'ekrjelkjrelkjre',
+ });
+ }
+ } finally {
+ await Promise.all([
+ successfulMonitors.map((monitor) => {
+ return deleteMonitor(monitor.id, icmpProjectMonitors.project);
+ }),
+ ]);
+ }
+ });
+
+ it('project monitors - returns a list of successfully created monitors', async () => {
+ try {
+ const messages = await parseStreamApiResponse(
+ projectMonitorEndpoint,
+ JSON.stringify(projectMonitors)
+ );
+
+ expect(messages).to.have.length(2);
+ expect(messages[1].updatedMonitors).eql([]);
+ expect(messages[1].failedMonitors).eql([]);
+ expect(messages[1].createdMonitors).eql(
+ projectMonitors.monitors.map((monitor) => monitor.id)
+ );
+ } finally {
+ await Promise.all([
+ projectMonitors.monitors.map((monitor) => {
+ return deleteMonitor(monitor.id, projectMonitors.project);
+ }),
+ ]);
+ }
+ });
+
+ it('project monitors - returns a list of successfully updated monitors', async () => {
+ try {
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send(projectMonitors);
+
+ const messages = await parseStreamApiResponse(
+ projectMonitorEndpoint,
+ JSON.stringify(projectMonitors)
+ );
+
+ expect(messages).to.have.length(2);
+ expect(messages[0]).eql(' 1 monitor found with no changes.');
+ expect(messages[1].createdMonitors).eql([]);
+ expect(messages[1].failedMonitors).eql([]);
+ expect(messages[1].updatedMonitors).eql(
+ projectMonitors.monitors.map((monitor) => monitor.id)
+ );
+ } finally {
+ await Promise.all([
+ projectMonitors.monitors.map((monitor) => {
+ return deleteMonitor(monitor.id, projectMonitors.project);
+ }),
+ ]);
+ }
+ });
+
+ it('project monitors - does not increment monitor revision unless a change has been made', async () => {
+ try {
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send(projectMonitors);
+
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send(projectMonitors);
+
+ const updatedMonitorsResponse = await Promise.all(
+ projectMonitors.monitors.map((monitor) => {
+ return supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({ filter: `${syntheticsMonitorType}.attributes.journey_id: ${monitor.id}` })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+ })
+ );
+
+ updatedMonitorsResponse.forEach((response) => {
+ expect(response.body.monitors[0].attributes.revision).eql(1);
+ });
+ } finally {
+ await Promise.all([
+ projectMonitors.monitors.map((monitor) => {
+ return deleteMonitor(monitor.id, projectMonitors.project);
+ }),
+ ]);
+ }
+ });
+
+ it('project monitors - increments monitor revision when a change has been made', async () => {
+ try {
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send(projectMonitors);
+
+ const editedMonitors = {
+ ...projectMonitors,
+ monitors: projectMonitors.monitors.map((monitor) => ({
+ ...monitor,
+ content: 'changed content',
+ })),
+ };
+
+ const messages = await parseStreamApiResponse(
+ projectMonitorEndpoint,
+ JSON.stringify(editedMonitors)
+ );
+
+ const updatedMonitorsResponse = await Promise.all(
+ projectMonitors.monitors.map((monitor) => {
+ return supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({ filter: `${syntheticsMonitorType}.attributes.journey_id: ${monitor.id}` })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+ })
+ );
+
+ updatedMonitorsResponse.forEach((response) => {
+ expect(response.body.monitors[0].attributes.revision).eql(2);
+ });
+ expect(messages[0]).eql('1 monitor updated successfully. ');
+ } finally {
+ await Promise.all([
+ projectMonitors.monitors.map((monitor) => {
+ return deleteMonitor(monitor.id, projectMonitors.project);
+ }),
+ ]);
+ }
+ });
+
+ it('project monitors - does not delete monitors when keep stale is true', async () => {
+ const secondMonitor = { ...projectMonitors.monitors[0], id: 'test-id-2' };
+ const testMonitors = [projectMonitors.monitors[0], secondMonitor];
+
+ try {
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send({
+ ...projectMonitors,
+ monitors: testMonitors,
+ });
+
+ const messages = await parseStreamApiResponse(
+ projectMonitorEndpoint,
+ JSON.stringify(projectMonitors)
+ );
+
+ expect(messages).to.have.length(2);
+ expect(messages[0]).eql(' 1 monitor found with no changes.');
+ expect(messages[1].createdMonitors).eql([]);
+ expect(messages[1].failedMonitors).eql([]);
+ expect(messages[1].deletedMonitors).eql([]);
+ expect(messages[1].updatedMonitors).eql([projectMonitors.monitors[0].id]);
+ expect(messages[1].staleMonitors).eql([secondMonitor.id]);
+ // does not delete the stale monitor
+ const getResponse = await supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({
+ filter: `${syntheticsMonitorType}.attributes.journey_id: ${secondMonitor.id}`,
+ })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ const { monitors } = getResponse.body;
+
+ expect(monitors.length).eql(1);
+ } finally {
+ await Promise.all([
+ testMonitors.map((monitor) => {
+ return deleteMonitor(monitor.id, projectMonitors.project);
+ }),
+ ]);
+ }
+ });
+
+ it('project monitors - deletes monitors when keep stale is false', async () => {
+ const secondMonitor = { ...projectMonitors.monitors[0], id: 'test-id-2' };
+ const testMonitors = [projectMonitors.monitors[0], secondMonitor];
+
+ try {
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send({
+ ...projectMonitors,
+ keep_stale: false,
+ monitors: testMonitors,
+ project: 'test-project-2',
+ });
+
+ const messages = await parseStreamApiResponse(
+ projectMonitorEndpoint,
+ JSON.stringify({
+ ...projectMonitors,
+ keep_stale: false,
+ project: 'test-project-2',
+ })
+ );
+
+ expect(messages).to.have.length(3);
+
+ // expect monitor to have been deleted
+ const getResponse = await supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({
+ filter: `${syntheticsMonitorType}.attributes.journey_id: ${secondMonitor.id}`,
+ })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ const { monitors } = getResponse.body;
+ expect(monitors[0]).eql(undefined);
+ expect(messages[0]).eql(` 1 monitor found with no changes.`);
+ expect(messages[1]).eql(`Monitor ${secondMonitor.id} deleted successfully`);
+ expect(messages[2].createdMonitors).eql([]);
+ expect(messages[2].failedMonitors).eql([]);
+ expect(messages[2].updatedMonitors).eql([projectMonitors.monitors[0].id]);
+ expect(messages[2].deletedMonitors).eql([secondMonitor.id]);
+ expect(messages[2].staleMonitors).eql([]);
+ } finally {
+ await Promise.all([
+ testMonitors.map((monitor) => {
+ return deleteMonitor(monitor.id, projectMonitors.project);
+ }),
+ ]);
+ }
+ });
+
+ it('project monitors - does not delete monitors from different suites when keep stale is false', async () => {
+ const secondMonitor = { ...projectMonitors.monitors[0], id: 'test-id-2' };
+ const testMonitors = [projectMonitors.monitors[0], secondMonitor];
+ const testprojectId = 'test-suite-2';
+ try {
+ await parseStreamApiResponse(
+ projectMonitorEndpoint,
+ JSON.stringify({
+ ...projectMonitors,
+ keep_stale: false,
+ monitors: testMonitors,
+ })
+ );
+
+ const messages = await parseStreamApiResponse(
+ projectMonitorEndpoint,
+ JSON.stringify({
+ ...projectMonitors,
+ keep_stale: false,
+ project: testprojectId,
+ })
+ );
+
+ expect(messages).to.have.length(2);
+ expect(messages[1].createdMonitors).eql([projectMonitors.monitors[0].id]);
+ expect(messages[1].failedMonitors).eql([]);
+ expect(messages[1].deletedMonitors).eql([]);
+ expect(messages[1].updatedMonitors).eql([]);
+ expect(messages[1].staleMonitors).eql([]);
+
+ // expect monitor not to have been deleted
+ const getResponse = await supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({
+ filter: `${syntheticsMonitorType}.attributes.journey_id: ${secondMonitor.id}`,
+ })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ const { monitors } = getResponse.body;
+
+ expect(monitors.length).eql(1);
+ } finally {
+ await Promise.all([
+ testMonitors.map((monitor) => {
+ return deleteMonitor(monitor.id, projectMonitors.project);
+ }),
+ ]);
+
+ await Promise.all([
+ testMonitors.map((monitor) => {
+ return deleteMonitor(monitor.id, testprojectId);
+ }),
+ ]);
+ }
+ });
+
+ it('project monitors - does not delete a monitor from the same suite in a different space', async () => {
+ const secondMonitor = { ...projectMonitors.monitors[0], id: 'test-id-2' };
+ const testMonitors = [projectMonitors.monitors[0], secondMonitor];
+ const username = 'admin';
+ const roleName = `synthetics_admin`;
+ const password = `${username}-password`;
+ const SPACE_ID = `test-space-${uuid.v4()}`;
+ const SPACE_NAME = `test-space-name ${uuid.v4()}`;
+ await kibanaServer.spaces.create({ id: SPACE_ID, name: SPACE_NAME });
+ try {
+ await security.role.create(roleName, {
+ kibana: [
+ {
+ feature: {
+ uptime: ['all'],
+ },
+ spaces: ['*'],
+ },
+ ],
+ });
+ await security.user.create(username, {
+ password,
+ roles: [roleName],
+ full_name: 'a kibana user',
+ });
+ await parseStreamApiResponse(
+ projectMonitorEndpoint,
+ JSON.stringify({ ...projectMonitors, keep_stale: false, monitors: testMonitors }),
+ {
+ Authorization:
+ 'Basic ' + Buffer.from(`${username}:${password}`, 'binary').toString('base64'),
+ }
+ );
+
+ const spaceUrl =
+ kibanaServerUrl + `/s/${SPACE_ID}${API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY}`;
+
+ const messages = await parseStreamApiResponse(
+ spaceUrl,
+ JSON.stringify({ ...projectMonitors, keep_stale: false }),
+ {
+ Authorization:
+ 'Basic ' + Buffer.from(`${username}:${password}`, 'binary').toString('base64'),
+ }
+ );
+ expect(messages).to.have.length(2);
+ expect(messages[1].createdMonitors).eql([projectMonitors.monitors[0].id]);
+ expect(messages[1].failedMonitors).eql([]);
+ expect(messages[1].deletedMonitors).eql([]);
+ expect(messages[1].updatedMonitors).eql([]);
+ expect(messages[1].staleMonitors).eql([]);
+
+ const getResponse = await supertestWithoutAuth
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .auth(username, password)
+ .query({
+ filter: `${syntheticsMonitorType}.attributes.journey_id: ${secondMonitor.id}`,
+ })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+ const { monitors } = getResponse.body;
+ expect(monitors.length).eql(1);
+ } finally {
+ await Promise.all([
+ testMonitors.map((monitor) => {
+ return deleteMonitor(
+ monitor.id,
+ projectMonitors.project,
+ 'default',
+ username,
+ password
+ );
+ }),
+ ]);
+ await deleteMonitor(
+ projectMonitors.monitors[0].id,
+ projectMonitors.project,
+ SPACE_ID,
+ username,
+ password
+ );
+ await security.user.delete(username);
+ await security.role.delete(roleName);
+ }
+ });
+
+ it('project monitors - validates monitor type', async () => {
+ try {
+ const messages = await parseStreamApiResponse(
+ projectMonitorEndpoint,
+ JSON.stringify({
+ ...projectMonitors,
+ monitors: [{ ...projectMonitors.monitors[0], schedule: '3m', tags: '' }],
+ })
+ );
+
+ expect(messages).to.have.length(1);
+ expect(messages[0].updatedMonitors).eql([]);
+ expect(messages[0].failedMonitors).eql([
+ {
+ details: 'Invalid value "3m" supplied to "schedule"',
+ id: projectMonitors.monitors[0].id,
+ payload: {
+ content:
+ 'UEsDBBQACAAIAON5qVQAAAAAAAAAAAAAAAAfAAAAZXhhbXBsZXMvdG9kb3MvYmFzaWMuam91cm5leS50c22Q0WrDMAxF3/sVF7MHB0LMXlc6RvcN+wDPVWNviW0sdUsp/fe5SSiD7UFCWFfHujIGlpnkybwxFTZfoY/E3hsaLEtwhs9RPNWKDU12zAOxkXRIbN4tB9d9pFOJdO6EN2HMqQguWN9asFBuQVMmJ7jiWNII9fIXrbabdUYr58l9IhwhQQZCYORCTFFUC31Btj21NRc7Mq4Nds+4bDD/pNVgT9F52Jyr2Fa+g75LAPttg8yErk+S9ELpTmVotlVwnfNCuh2lepl3+JflUmSBJ3uggt1v9INW/lHNLKze9dJe1J3QJK8pSvWkm6aTtCet5puq+x63+AFQSwcIAPQ3VfcAAACcAQAAUEsBAi0DFAAIAAgA43mpVAD0N1X3AAAAnAEAAB8AAAAAAAAAAAAgAKSBAAAAAGV4YW1wbGVzL3RvZG9zL2Jhc2ljLmpvdXJuZXkudHNQSwUGAAAAAAEAAQBNAAAARAEAAAAA',
+ filter: {
+ match: 'check if title is present',
+ },
+ id: projectMonitors.monitors[0].id,
+ locations: ['localhost'],
+ name: 'check if title is present',
+ params: {},
+ playwrightOptions: {
+ chromiumSandbox: false,
+ headless: true,
+ },
+ schedule: '3m',
+ tags: '',
+ throttling: {
+ download: 5,
+ latency: 20,
+ upload: 3,
+ },
+ type: 'browser',
+ hash: 'ekrjelkjrelkjre',
+ },
+ reason: 'Failed to save or update monitor. Configuration is not valid',
+ },
+ ]);
+ expect(messages[0].createdMonitors).eql([]);
+ } finally {
+ await Promise.all([
+ projectMonitors.monitors.map((monitor) => {
+ return deleteMonitor(monitor.id, projectMonitors.project);
+ }),
+ ]);
+ }
+ });
+
+ it('project monitors - saves space as data stream namespace', async () => {
+ const username = 'admin';
+ const roleName = `synthetics_admin`;
+ const password = `${username}-password`;
+ const SPACE_ID = `test-space-${uuid.v4()}`;
+ const SPACE_NAME = `test-space-name ${uuid.v4()}`;
+ await kibanaServer.spaces.create({ id: SPACE_ID, name: SPACE_NAME });
+ try {
+ await security.role.create(roleName, {
+ kibana: [
+ {
+ feature: {
+ uptime: ['all'],
+ },
+ spaces: ['*'],
+ },
+ ],
+ });
+ await security.user.create(username, {
+ password,
+ roles: [roleName],
+ full_name: 'a kibana user',
+ });
+ await supertestWithoutAuth
+ .put(`/s/${SPACE_ID}${API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY}`)
+ .auth(username, password)
+ .set('kbn-xsrf', 'true')
+ .send(projectMonitors)
+ .expect(200);
+ // expect monitor not to have been deleted
+ const getResponse = await supertestWithoutAuth
+ .get(`/s/${SPACE_ID}${API_URLS.SYNTHETICS_MONITORS}`)
+ .auth(username, password)
+ .query({
+ filter: `${syntheticsMonitorType}.attributes.journey_id: ${projectMonitors.monitors[0].id}`,
+ })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+ const { monitors } = getResponse.body;
+ expect(monitors.length).eql(1);
+ expect(monitors[0].attributes[ConfigKey.NAMESPACE]).eql(formatKibanaNamespace(SPACE_ID));
+ } finally {
+ await deleteMonitor(
+ projectMonitors.monitors[0].id,
+ projectMonitors.project,
+ SPACE_ID,
+ username,
+ password
+ );
+ await security.user.delete(username);
+ await security.role.delete(roleName);
+ }
+ });
+
+ it('project monitors - formats custom id appropriately', async () => {
+ const username = 'admin';
+ const roleName = `synthetics_admin`;
+ const password = `${username}-password`;
+ const SPACE_ID = `test-space-${uuid.v4()}`;
+ const SPACE_NAME = `test-space-name ${uuid.v4()}`;
+ await kibanaServer.spaces.create({ id: SPACE_ID, name: SPACE_NAME });
+ try {
+ await security.role.create(roleName, {
+ kibana: [
+ {
+ feature: {
+ uptime: ['all'],
+ },
+ spaces: ['*'],
+ },
+ ],
+ });
+ await security.user.create(username, {
+ password,
+ roles: [roleName],
+ full_name: 'a kibana user',
+ });
+ await supertestWithoutAuth
+ .put(`/s/${SPACE_ID}${API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY}`)
+ .auth(username, password)
+ .set('kbn-xsrf', 'true')
+ .send(projectMonitors)
+ .expect(200);
+ // expect monitor not to have been deleted
+ const getResponse = await supertestWithoutAuth
+ .get(`/s/${SPACE_ID}${API_URLS.SYNTHETICS_MONITORS}`)
+ .auth(username, password)
+ .query({
+ filter: `${syntheticsMonitorType}.attributes.journey_id: ${projectMonitors.monitors[0].id}`,
+ })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+ const { monitors } = getResponse.body;
+ expect(monitors.length).eql(1);
+ expect(monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID]).eql(
+ `${projectMonitors.monitors[0].id}-${projectMonitors.project}-${SPACE_ID}`
+ );
+ } finally {
+ await deleteMonitor(
+ projectMonitors.monitors[0].id,
+ projectMonitors.project,
+ SPACE_ID,
+ username,
+ password
+ );
+ await security.user.delete(username);
+ await security.role.delete(roleName);
+ }
+ });
+
+ it('project monitors - is able to decrypt monitor when updated after hydration', async () => {
+ try {
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send(projectMonitors);
+
+ const response = await supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({
+ filter: `${syntheticsMonitorType}.attributes.journey_id: ${projectMonitors.monitors[0].id}`,
+ })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ const { monitors } = response.body;
+
+ // add urls and ports to mimic hydration
+ const updates = {
+ [ConfigKey.URLS]: 'https://modified-host.com',
+ [ConfigKey.PORT]: 443,
+ };
+
+ const modifiedMonitor = { ...monitors[0]?.attributes, ...updates };
+
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS + '/' + monitors[0]?.id)
+ .set('kbn-xsrf', 'true')
+ .send(modifiedMonitor)
+ .expect(200);
+
+ // update project monitor via push api
+ const messages = await parseStreamApiResponse(
+ projectMonitorEndpoint,
+ JSON.stringify(projectMonitors)
+ );
+ expect(messages).to.have.length(2);
+ expect(messages[0]).eql('1 monitor updated successfully. ');
+ expect(messages[1].updatedMonitors).eql([projectMonitors.monitors[0].id]);
+
+ // ensure that monitor can still be decrypted
+ await supertest
+ .get(API_URLS.SYNTHETICS_MONITORS + '/' + monitors[0]?.id)
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+ } finally {
+ await Promise.all([
+ projectMonitors.monitors.map((monitor) => {
+ return deleteMonitor(monitor.id, projectMonitors.project);
+ }),
+ ]);
+ }
+ });
+
+ it('project monitors - is able to enable and disable monitors', async () => {
+ try {
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send(projectMonitors);
+
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send({
+ ...projectMonitors,
+ monitors: [
+ {
+ ...projectMonitors.monitors[0],
+ enabled: false,
+ },
+ ],
+ })
+ .expect(200);
+ const response = await supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({
+ filter: `${syntheticsMonitorType}.attributes.journey_id: ${projectMonitors.monitors[0].id}`,
+ })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+ const { monitors } = response.body;
+ expect(monitors[0].attributes.enabled).eql(false);
+ } finally {
+ await Promise.all([
+ projectMonitors.monitors.map((monitor) => {
+ return deleteMonitor(monitor.id, projectMonitors.project);
+ }),
+ ]);
+ }
+ });
+
+ it('project monitors - returns a failed monitor when user defines a private location without fleet permissions', async () => {
+ const secondMonitor = {
+ ...projectMonitors.monitors[0],
+ id: 'test-id-2',
+ privateLocations: ['Test private location 0'],
+ };
+ const testMonitors = [projectMonitors.monitors[0], secondMonitor];
+ const username = 'admin';
+ const roleName = 'uptime read only';
+ const password = `${username}-password`;
+ try {
+ await security.role.create(roleName, {
+ kibana: [
+ {
+ feature: {
+ uptime: ['all'],
+ },
+ spaces: ['*'],
+ },
+ ],
+ });
+ await security.user.create(username, {
+ password,
+ roles: [roleName],
+ full_name: 'a kibana user',
+ });
+
+ const messages = await parseStreamApiResponse(
+ kibanaServerUrl + API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY,
+ JSON.stringify({
+ ...projectMonitors,
+ keep_stale: false,
+ monitors: testMonitors,
+ }),
+ {
+ Authorization:
+ 'Basic ' + Buffer.from(`${username}:${password}`, 'binary').toString('base64'),
+ }
+ );
+
+ expect(messages).to.have.length(3);
+ expect(messages[0]).to.eql('test-id-2: failed to create or update monitor');
+ expect(messages[1]).to.eql(`1 monitor created successfully.`);
+ expect(messages[2]).to.eql({
+ createdMonitors: [testMonitors[0].id],
+ updatedMonitors: [],
+ staleMonitors: [],
+ deletedMonitors: [],
+ failedMonitors: [
+ {
+ details:
+ 'Insufficient permissions. In order to configure private locations, you must have Fleet and Integrations write permissions. To resolve, please generate a new API key with a user who has Fleet and Integrations write permissions.',
+ id: 'test-id-2',
+ payload: {
+ content:
+ 'UEsDBBQACAAIAON5qVQAAAAAAAAAAAAAAAAfAAAAZXhhbXBsZXMvdG9kb3MvYmFzaWMuam91cm5leS50c22Q0WrDMAxF3/sVF7MHB0LMXlc6RvcN+wDPVWNviW0sdUsp/fe5SSiD7UFCWFfHujIGlpnkybwxFTZfoY/E3hsaLEtwhs9RPNWKDU12zAOxkXRIbN4tB9d9pFOJdO6EN2HMqQguWN9asFBuQVMmJ7jiWNII9fIXrbabdUYr58l9IhwhQQZCYORCTFFUC31Btj21NRc7Mq4Nds+4bDD/pNVgT9F52Jyr2Fa+g75LAPttg8yErk+S9ELpTmVotlVwnfNCuh2lepl3+JflUmSBJ3uggt1v9INW/lHNLKze9dJe1J3QJK8pSvWkm6aTtCet5puq+x63+AFQSwcIAPQ3VfcAAACcAQAAUEsBAi0DFAAIAAgA43mpVAD0N1X3AAAAnAEAAB8AAAAAAAAAAAAgAKSBAAAAAGV4YW1wbGVzL3RvZG9zL2Jhc2ljLmpvdXJuZXkudHNQSwUGAAAAAAEAAQBNAAAARAEAAAAA',
+ filter: {
+ match: 'check if title is present',
+ },
+ id: 'test-id-2',
+ locations: ['localhost'],
+ name: 'check if title is present',
+ params: {},
+ playwrightOptions: {
+ chromiumSandbox: false,
+ headless: true,
+ },
+ privateLocations: ['Test private location 0'],
+ schedule: 10,
+ tags: [],
+ throttling: {
+ download: 5,
+ latency: 20,
+ upload: 3,
+ },
+ hash: 'ekrjelkjrelkjre',
+ },
+ reason: 'Failed to create or update monitor',
+ },
+ ],
+ failedStaleMonitors: [],
+ });
+ } finally {
+ await Promise.all([
+ testMonitors.map((monitor) => {
+ return deleteMonitor(
+ monitor.id,
+ projectMonitors.project,
+ 'default',
+ username,
+ password
+ );
+ }),
+ ]);
+ await security.user.delete(username);
+ await security.role.delete(roleName);
+ }
+ });
+
+ it('project monitors - returns a failed monitor when user tries to delete a monitor without fleet permissions', async () => {
+ const secondMonitor = {
+ ...projectMonitors.monitors[0],
+ id: 'test-id-2',
+ privateLocations: ['Test private location 0'],
+ };
+ const testMonitors = [projectMonitors.monitors[0], secondMonitor];
+ const username = 'test-username';
+ const roleName = 'uptime read only';
+ const password = `test-password`;
+ try {
+ await security.role.create(roleName, {
+ kibana: [
+ {
+ feature: {
+ uptime: ['all'],
+ },
+ spaces: ['*'],
+ },
+ ],
+ });
+ await security.user.create(username, {
+ password,
+ roles: [roleName],
+ full_name: 'a kibana user',
+ });
+
+ await parseStreamApiResponse(
+ kibanaServerUrl + API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY,
+ JSON.stringify({
+ ...projectMonitors,
+ keep_stale: false,
+ monitors: testMonitors,
+ })
+ );
+
+ const messages = await parseStreamApiResponse(
+ kibanaServerUrl + API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY,
+ JSON.stringify({
+ ...projectMonitors,
+ keep_stale: false,
+ monitors: [],
+ }),
+ {
+ Authorization:
+ 'Basic ' + Buffer.from(`${username}:${password}`, 'binary').toString('base64'),
+ }
+ );
+
+ expect(messages).to.have.length(3);
+ expect(
+ messages.filter((msg) => msg === `Monitor ${testMonitors[1].id} could not be deleted`)
+ ).to.have.length(1);
+ expect(
+ messages.filter((msg) => msg === `Monitor ${testMonitors[0].id} deleted successfully`)
+ ).to.have.length(1);
+ expect(messages[2]).to.eql({
+ createdMonitors: [],
+ updatedMonitors: [],
+ staleMonitors: [],
+ deletedMonitors: [testMonitors[0].id],
+ failedMonitors: [],
+ failedStaleMonitors: [
+ {
+ details:
+ 'Unable to delete Synthetics package policy for monitor check if title is present. Fleet write permissions are needed to use Synthetics private locations.',
+ id: 'test-id-2',
+ reason: 'Failed to delete stale monitor',
+ },
+ ],
+ });
+
+ const messages2 = await parseStreamApiResponse(
+ kibanaServerUrl + API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY,
+ JSON.stringify({
+ ...projectMonitors,
+ keep_stale: false,
+ monitors: [],
+ })
+ );
+
+ expect(messages2).to.have.length(2);
+ expect(messages2[0]).to.eql(`Monitor ${testMonitors[1].id} deleted successfully`);
+ expect(messages2[1]).to.eql({
+ createdMonitors: [],
+ updatedMonitors: [],
+ staleMonitors: [],
+ deletedMonitors: [testMonitors[1].id],
+ failedMonitors: [],
+ failedStaleMonitors: [],
+ });
+ } finally {
+ await Promise.all([
+ testMonitors.map((monitor) => {
+ return deleteMonitor(
+ monitor.id,
+ projectMonitors.project,
+ 'default',
+ username,
+ password
+ );
+ }),
+ ]);
+ await security.user.delete(username);
+ await security.role.delete(roleName);
+ }
+ });
+
+ it('project monitors - returns a successful monitor when user defines a private location with fleet permissions', async () => {
+ const secondMonitor = {
+ ...projectMonitors.monitors[0],
+ id: 'test-id-2',
+ privateLocations: ['Test private location 0'],
+ };
+ const testMonitors = [projectMonitors.monitors[0], secondMonitor];
+ const username = 'admin';
+ const roleName = 'uptime with fleet';
+ const password = `${username}-password`;
+ try {
+ await security.role.create(roleName, {
+ kibana: [
+ {
+ feature: {
+ uptime: ['all'],
+ fleetv2: ['all'],
+ fleet: ['all'],
+ },
+ spaces: ['*'],
+ },
+ ],
+ });
+ await security.user.create(username, {
+ password,
+ roles: [roleName],
+ full_name: 'a kibana user',
+ });
+ const messages = await parseStreamApiResponse(
+ projectMonitorEndpoint,
+ JSON.stringify({
+ ...projectMonitors,
+ keep_stale: false,
+ monitors: testMonitors,
+ })
+ );
+ expect(messages).to.have.length(2);
+ expect(messages).to.eql([
+ `2 monitors created successfully.`,
+ {
+ createdMonitors: [testMonitors[0].id, 'test-id-2'],
+ updatedMonitors: [],
+ staleMonitors: [],
+ deletedMonitors: [],
+ failedMonitors: [],
+ failedStaleMonitors: [],
+ },
+ ]);
+ } finally {
+ await Promise.all([
+ testMonitors.map((monitor) => {
+ return deleteMonitor(
+ monitor.id,
+ projectMonitors.project,
+ 'default',
+ username,
+ password
+ );
+ }),
+ ]);
+ await security.user.delete(username);
+ await security.role.delete(roleName);
+ }
+ });
+
+ it('creates integration policies for project monitors with private locations', async () => {
+ try {
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send({
+ ...projectMonitors,
+ monitors: [
+ { ...projectMonitors.monitors[0], privateLocations: ['Test private location 0'] },
+ ],
+ });
+
+ const monitorsResponse = await supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({
+ filter: `${syntheticsMonitorType}.attributes.journey_id: ${projectMonitors.monitors[0].id}`,
+ })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ const apiResponsePolicy = await supertest.get(
+ '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
+ );
+
+ const packagePolicy = apiResponsePolicy.body.items.find(
+ (pkgPolicy: PackagePolicy) =>
+ pkgPolicy.id ===
+ `${
+ monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID]
+ }-${testPolicyId}`
+ );
+ expect(packagePolicy.name).eql(
+ `${projectMonitors.monitors[0].id}-${projectMonitors.project}-default-Test private location 0`
+ );
+ expect(packagePolicy.policy_id).eql(testPolicyId);
+
+ const configId = monitorsResponse.body.monitors[0].id;
+ const id = monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID];
+
+ comparePolicies(
+ packagePolicy,
+ getTestProjectSyntheticsPolicy({
+ inputs: {},
+ name: 'check if title is present-Test private location 0',
+ id,
+ configId,
+ })
+ );
+ } finally {
+ await deleteMonitor(projectMonitors.monitors[0].id, projectMonitors.project);
+
+ const packagesResponse = await supertest.get(
+ '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
+ );
+ expect(packagesResponse.body.items.length).eql(0);
+ }
+ });
+
+ it('deletes integration policies for project monitors when private location is removed from the monitor - lightweight', async () => {
+ const monitorRequest = {
+ ...httpProjectMonitors,
+ monitors: [
+ { ...httpProjectMonitors.monitors[1], privateLocations: ['Test private location 0'] },
+ ],
+ };
+ try {
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send(monitorRequest);
+
+ const monitorsResponse = await supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({
+ filter: `${syntheticsMonitorType}.attributes.journey_id: ${monitorRequest.monitors[0].id}`,
+ })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ const apiResponsePolicy = await supertest.get(
+ '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
+ );
+
+ const packagePolicy = apiResponsePolicy.body.items.find(
+ (pkgPolicy: PackagePolicy) =>
+ pkgPolicy.id ===
+ `${
+ monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID]
+ }-${testPolicyId}`
+ );
+
+ expect(packagePolicy.policy_id).eql(testPolicyId);
+
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send({
+ ...monitorRequest,
+ monitors: [{ ...monitorRequest.monitors[0], privateLocations: [] }],
+ });
+
+ const apiResponsePolicy2 = await supertest.get(
+ '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
+ );
+
+ const packagePolicy2 = apiResponsePolicy2.body.items.find(
+ (pkgPolicy: PackagePolicy) =>
+ pkgPolicy.id ===
+ `${
+ monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID]
+ }-${testPolicyId}`
+ );
+
+ expect(packagePolicy2).eql(undefined);
+ } finally {
+ await deleteMonitor(projectMonitors.monitors[0].id, projectMonitors.project);
+ }
+ });
+
+ it('deletes integration policies for project monitors when private location is removed from the monitor', async () => {
+ try {
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send({
+ ...projectMonitors,
+ monitors: [
+ { ...projectMonitors.monitors[0], privateLocations: ['Test private location 0'] },
+ ],
+ });
+
+ const monitorsResponse = await supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({
+ filter: `${syntheticsMonitorType}.attributes.journey_id: ${projectMonitors.monitors[0].id}`,
+ })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ const apiResponsePolicy = await supertest.get(
+ '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
+ );
+
+ const packagePolicy = apiResponsePolicy.body.items.find(
+ (pkgPolicy: PackagePolicy) =>
+ pkgPolicy.id ===
+ `${
+ monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID]
+ }-${testPolicyId}`
+ );
+
+ expect(packagePolicy.policy_id).eql(testPolicyId);
+
+ const configId = monitorsResponse.body.monitors[0].id;
+ const id = monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID];
+
+ comparePolicies(
+ packagePolicy,
+ getTestProjectSyntheticsPolicy({
+ inputs: {},
+ name: 'check if title is present-Test private location 0',
+ id,
+ configId,
+ })
+ );
+
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send({
+ ...projectMonitors,
+ monitors: [{ ...projectMonitors.monitors[0], privateLocations: [] }],
+ });
+
+ const apiResponsePolicy2 = await supertest.get(
+ '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
+ );
+
+ const packagePolicy2 = apiResponsePolicy2.body.items.find(
+ (pkgPolicy: PackagePolicy) =>
+ pkgPolicy.id ===
+ `${
+ monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID]
+ }-${testPolicyId}`
+ );
+
+ expect(packagePolicy2).eql(undefined);
+ } finally {
+ await deleteMonitor(projectMonitors.monitors[0].id, projectMonitors.project);
+
+ const apiResponsePolicy2 = await supertest.get(
+ '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
+ );
+ expect(apiResponsePolicy2.body.items.length).eql(0);
+ }
+ });
+
+ it('deletes integration policies when project monitors are deleted', async () => {
+ try {
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send({
+ ...projectMonitors,
+ monitors: [
+ { ...projectMonitors.monitors[0], privateLocations: ['Test private location 0'] },
+ ],
+ })
+ .expect(200);
+
+ const monitorsResponse = await supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({
+ filter: `${syntheticsMonitorType}.attributes.journey_id: ${projectMonitors.monitors[0].id}`,
+ })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ const apiResponsePolicy = await supertest.get(
+ '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
+ );
+
+ const packagePolicy = apiResponsePolicy.body.items.find(
+ (pkgPolicy: PackagePolicy) =>
+ pkgPolicy.id ===
+ monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID] +
+ '-' +
+ testPolicyId
+ );
+
+ expect(packagePolicy.policy_id).eql(testPolicyId);
+
+ const configId = monitorsResponse.body.monitors[0].id;
+ const id = monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID];
+
+ comparePolicies(
+ packagePolicy,
+ getTestProjectSyntheticsPolicy({
+ inputs: {},
+ name: 'check if title is present-Test private location 0',
+ id,
+ configId,
+ })
+ );
+
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send({
+ ...projectMonitors,
+ monitors: [],
+ keep_stale: false,
+ });
+
+ const monitorsResponse2 = await supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({
+ filter: `${syntheticsMonitorType}.attributes.journey_id: ${projectMonitors.monitors[0].id}`,
+ })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ expect(monitorsResponse2.body.monitors.length).eql(0);
+
+ await new Promise((resolve) => {
+ setTimeout(() => resolve(null), 3000);
+ });
+
+ const apiResponsePolicy2 = await supertest.get(
+ '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
+ );
+
+ const packagePolicy2 = apiResponsePolicy2.body.items.find(
+ (pkgPolicy: PackagePolicy) =>
+ pkgPolicy.id ===
+ monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID] +
+ '-' +
+ testPolicyId
+ );
+
+ expect(packagePolicy2).eql(undefined);
+ } finally {
+ await deleteMonitor(projectMonitors.monitors[0].id, projectMonitors.project);
+
+ const apiResponsePolicy2 = await supertest.get(
+ '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
+ );
+ expect(apiResponsePolicy2.body.items.length).eql(0);
+ }
+ });
+
+ it('deletes integration policies when project monitors are deleted - lightweight', async () => {
+ const monitorRequest = {
+ ...httpProjectMonitors,
+ monitors: [
+ { ...httpProjectMonitors.monitors[1], privateLocations: ['Test private location 0'] },
+ ],
+ };
+ try {
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send(monitorRequest);
+
+ const monitorsResponse = await supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({
+ filter: `${syntheticsMonitorType}.attributes.journey_id: ${monitorRequest.monitors[0].id}`,
+ })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ const apiResponsePolicy = await supertest.get(
+ '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
+ );
+
+ const packagePolicy = apiResponsePolicy.body.items.find(
+ (pkgPolicy: PackagePolicy) =>
+ pkgPolicy.id ===
+ `${
+ monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID]
+ }-${testPolicyId}`
+ );
+
+ expect(packagePolicy.policy_id).eql(testPolicyId);
+
+ const configId = monitorsResponse.body.monitors[0].id;
+ const id = monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID];
+
+ const httpInput = packagePolicy.inputs.find(
+ (input: any) => input.type === 'synthetics/http'
+ );
+ expect(httpInput).to.eql({
+ type: 'synthetics/http',
+ policy_template: 'synthetics',
+ enabled: true,
+ streams: [
+ {
+ enabled: true,
+ data_stream: { type: 'synthetics', dataset: 'http' },
+ release: 'experimental',
+ vars: {
+ __ui: { value: '{"is_tls_enabled":false}', type: 'yaml' },
+ enabled: { value: false, type: 'bool' },
+ type: { value: 'http', type: 'text' },
+ name: { value: 'My Monitor 3', type: 'text' },
+ schedule: { value: '"@every 60m"', type: 'text' },
+ urls: { value: 'http://localhost:9200', type: 'text' },
+ 'service.name': { value: '', type: 'text' },
+ timeout: { value: '80s', type: 'text' },
+ max_redirects: { value: '0', type: 'integer' },
+ proxy_url: { value: '', type: 'text' },
+ tags: { value: '["tag2","tag2"]', type: 'yaml' },
+ username: { value: '', type: 'text' },
+ password: { value: '', type: 'password' },
+ 'response.include_headers': { value: false, type: 'bool' },
+ 'response.include_body': { value: 'always', type: 'text' },
+ 'check.request.method': { value: 'POST', type: 'text' },
+ 'check.request.headers': {
+ value: '{"Content-Type":"application/x-www-form-urlencoded"}',
+ type: 'yaml',
+ },
+ 'check.request.body': { value: null, type: 'yaml' },
+ 'check.response.status': { value: '["200"]', type: 'yaml' },
+ 'check.response.headers': { value: null, type: 'yaml' },
+ 'check.response.body.positive': { value: '["Saved","saved"]', type: 'yaml' },
+ 'check.response.body.negative': { value: null, type: 'yaml' },
+ 'ssl.certificate_authorities': { value: null, type: 'yaml' },
+ 'ssl.certificate': { value: null, type: 'yaml' },
+ 'ssl.key': { value: null, type: 'yaml' },
+ 'ssl.key_passphrase': { value: null, type: 'text' },
+ 'ssl.verification_mode': { value: 'full', type: 'text' },
+ 'ssl.supported_protocols': {
+ value: '["TLSv1.1","TLSv1.2","TLSv1.3"]',
+ type: 'yaml',
+ },
+ location_name: { value: 'Test private location 0', type: 'text' },
+ id: {
+ value: id,
+ type: 'text',
+ },
+ config_id: { value: configId, type: 'text' },
+ run_once: { value: false, type: 'bool' },
+ origin: { value: 'project', type: 'text' },
+ 'monitor.project.id': {
+ type: 'text',
+ value: 'test-suite',
+ },
+ 'monitor.project.name': {
+ type: 'text',
+ value: 'test-suite',
+ },
+ },
+ id: `synthetics/http-http-${id}-${testPolicyId}`,
+ compiled_stream: {
+ __ui: { is_tls_enabled: false },
+ type: 'http',
+ name: 'My Monitor 3',
+ id,
+ origin: 'project',
+ enabled: false,
+ urls: 'http://localhost:9200',
+ schedule: '@every 60m',
+ timeout: '80s',
+ max_redirects: 0,
+ tags: ['tag2', 'tag2'],
+ 'response.include_headers': false,
+ 'response.include_body': 'always',
+ 'check.request.method': 'POST',
+ 'check.request.headers': { 'Content-Type': 'application/x-www-form-urlencoded' },
+ 'check.response.status': ['200'],
+ 'check.response.body.positive': ['Saved', 'saved'],
+ 'ssl.verification_mode': 'full',
+ 'ssl.supported_protocols': ['TLSv1.1', 'TLSv1.2', 'TLSv1.3'],
+ processors: [
+ { add_observer_metadata: { geo: { name: 'Test private location 0' } } },
+ {
+ add_fields: {
+ target: '',
+ fields: {
+ 'monitor.fleet_managed': true,
+ config_id: configId,
+ 'monitor.project.id': 'test-suite',
+ 'monitor.project.name': 'test-suite',
+ },
+ },
+ },
+ ],
+ },
+ },
+ ],
+ });
+
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send({
+ ...monitorRequest,
+ monitors: [],
+ });
+
+ const apiResponsePolicy2 = await supertest.get(
+ '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
+ );
+
+ const packagePolicy2 = apiResponsePolicy2.body.items.find(
+ (pkgPolicy: PackagePolicy) =>
+ pkgPolicy.id ===
+ `${
+ monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID]
+ } - ${testPolicyId}`
+ );
+
+ expect(packagePolicy2).eql(undefined);
+ } finally {
+ await deleteMonitor(httpProjectMonitors.monitors[1].id, httpProjectMonitors.project);
+
+ const apiResponsePolicy2 = await supertest.get(
+ '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
+ );
+ expect(apiResponsePolicy2.body.items.length).eql(0);
+ }
+ });
+
+ it('handles updating package policies when project monitors are updated', async () => {
+ try {
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send({
+ ...projectMonitors,
+ monitors: [
+ {
+ ...projectMonitors.monitors[0],
+ privateLocations: ['Test private location 0'],
+ },
+ ],
+ });
+
+ const monitorsResponse = await supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({
+ filter: `${syntheticsMonitorType}.attributes.journey_id: ${projectMonitors.monitors[0].id}`,
+ })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+
+ const apiResponsePolicy = await supertest.get(
+ '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
+ );
+
+ const configId = monitorsResponse.body.monitors[0].id;
+ const id = monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID];
+ const policyId = `${id}-${testPolicyId}`;
+
+ const packagePolicy = apiResponsePolicy.body.items.find(
+ (pkgPolicy: PackagePolicy) => pkgPolicy.id === policyId
+ );
+
+ expect(packagePolicy.policy_id).eql(testPolicyId);
+
+ comparePolicies(
+ packagePolicy,
+ getTestProjectSyntheticsPolicy({
+ inputs: {},
+ name: 'check if title is present-Test private location 0',
+ id,
+ configId,
+ })
+ );
+
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send({
+ ...projectMonitors,
+ monitors: [
+ {
+ ...projectMonitors.monitors[0],
+ privateLocations: ['Test private location 0'],
+ enabled: false,
+ },
+ ],
+ });
+
+ const apiResponsePolicy2 = await supertest.get(
+ '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
+ );
+
+ const configId2 = monitorsResponse.body.monitors[0].id;
+ const id2 = monitorsResponse.body.monitors[0].attributes[ConfigKey.CUSTOM_HEARTBEAT_ID];
+ const policyId2 = `${id}-${testPolicyId}`;
+
+ const packagePolicy2 = apiResponsePolicy2.body.items.find(
+ (pkgPolicy: PackagePolicy) => pkgPolicy.id === policyId2
+ );
+
+ comparePolicies(
+ packagePolicy2,
+ getTestProjectSyntheticsPolicy({
+ inputs: { enabled: { value: false, type: 'bool' } },
+ name: 'check if title is present-Test private location 0',
+ id: id2,
+ configId: configId2,
+ })
+ );
+ } finally {
+ await deleteMonitor(projectMonitors.monitors[0].id, projectMonitors.project);
+
+ const apiResponsePolicy2 = await supertest.get(
+ '/api/fleet/package_policies?page=1&perPage=2000&kuery=ingest-package-policies.package.name%3A%20synthetics'
+ );
+ expect(apiResponsePolicy2.body.items.length).eql(0);
+ }
+ });
+
+ it('handles location formatting for both private and public locations', async () => {
+ try {
+ await supertest
+ .put(API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY)
+ .set('kbn-xsrf', 'true')
+ .send({
+ ...projectMonitors,
+ monitors: [
+ { ...projectMonitors.monitors[0], privateLocations: ['Test private location 0'] },
+ ],
+ });
+
+ const updatedMonitorsResponse = await Promise.all(
+ projectMonitors.monitors.map((monitor) => {
+ return supertest
+ .get(API_URLS.SYNTHETICS_MONITORS)
+ .query({ filter: `${syntheticsMonitorType}.attributes.journey_id: ${monitor.id}` })
+ .set('kbn-xsrf', 'true')
+ .expect(200);
+ })
+ );
+
+ updatedMonitorsResponse.forEach((response) => {
+ expect(response.body.monitors[0].attributes.locations).eql([
+ {
+ id: 'localhost',
+ label: 'Local Synthetics Service',
+ geo: { lat: 0, lon: 0 },
+ url: 'mockDevUrl',
+ isServiceManaged: true,
+ status: 'experimental',
+ isInvalid: false,
+ },
+ {
+ label: 'Test private location 0',
+ isServiceManaged: false,
+ isInvalid: false,
+ agentPolicyId: testPolicyId,
+ id: testPolicyId,
+ geo: {
+ lat: '',
+ lon: '',
+ },
+ concurrentMonitors: 1,
+ },
+ ]);
+ });
+ } finally {
+ await Promise.all([
+ projectMonitors.monitors.map((monitor) => {
+ return deleteMonitor(monitor.id, projectMonitors.project);
+ }),
+ ]);
+ }
+ });
+ });
+}
+
+/**
+ * Borrowed from AIOPS test code: https://github.com/elastic/kibana/blob/23a7ac2c2e2b1f64daa17b914e86989b1fde750c/x-pack/test/api_integration/apis/aiops/explain_log_rate_spikes.ts
+ * Receives a stream and parses the messages until the stream closes.
+ */
+async function* parseStream(stream: NodeJS.ReadableStream) {
+ let partial = '';
+
+ try {
+ for await (const value of stream) {
+ const full = `${partial}${value}`;
+ const parts = full.split('\n');
+ const last = parts.pop();
+
+ partial = last ?? '';
+
+ const event = parts.map((p) => JSON.parse(p));
+
+ for (const events of event) {
+ yield events;
+ }
+ }
+ } catch (error) {
+ yield { type: 'error', payload: error.toString() };
+ }
+}
+
+/**
+ * Helper function to process the results of the module's stream parsing helper function.
+ */
+async function getMessages(stream: NodeJS.ReadableStream | null) {
+ if (stream === null) return [];
+ const data: any[] = [];
+ for await (const action of parseStream(stream)) {
+ data.push(action);
+ }
+ return data;
+}
+
+/**
+ * This type is intended to highlight any break between shared parameter contracts defined in
+ * the module's streaming endpoint helper functions.
+ */
+type StreamApiFunction = (
+ url: string,
+ body?: BodyInit,
+ extraHeaders?: HeadersInit,
+ method?: string
+) => T;
+
+/**
+ * This helps the test file have DRY code when it comes to calling
+ * the same streaming endpoint over and over by defining some selective defaults.
+ */
+export const parseStreamApiResponse: StreamApiFunction> = async (
+ url: string,
+ body?: BodyInit,
+ extraHeaders?: HeadersInit,
+ method = 'PUT'
+) => {
+ const streamResponse = await callStreamApi(url, body, extraHeaders, method);
+ return getMessages(streamResponse.body);
+};
+
+/**
+ * This helps the test file have DRY code when it comes to calling
+ * the same streaming endpoint over and over by defining some selective defaults.
+ */
+const callStreamApi: StreamApiFunction> = async (
+ url: string,
+ body?: BodyInit,
+ extraHeaders?: HeadersInit,
+ method = 'PUT'
+) => {
+ return fetch(url, {
+ method,
+ headers: {
+ 'Content-Type': 'application/json',
+ 'kbn-xsrf': 'stream',
+ ...extraHeaders,
+ },
+ body,
+ });
+};
diff --git a/x-pack/test/api_integration/apis/synthetics/delete_monitor_project.ts b/x-pack/test/api_integration/apis/synthetics/delete_monitor_project.ts
index ea8e295afacfe..8024cd74a34c2 100644
--- a/x-pack/test/api_integration/apis/synthetics/delete_monitor_project.ts
+++ b/x-pack/test/api_integration/apis/synthetics/delete_monitor_project.ts
@@ -16,7 +16,7 @@ import expect from '@kbn/expect';
import { FtrProviderContext } from '../../ftr_provider_context';
import { getFixtureJson } from '../uptime/rest/helper/get_fixture_json';
import { PrivateLocationTestService } from './services/private_location_test_service';
-import { parseStreamApiResponse } from './add_monitor_project';
+import { parseStreamApiResponse } from './add_monitor_project_legacy';
export default function ({ getService }: FtrProviderContext) {
describe('DeleteProjectMonitors', function () {
@@ -92,7 +92,7 @@ export default function ({ getService }: FtrProviderContext) {
const monitorsToDelete = monitors.map((monitor) => monitor.id);
const response = await supertest
- .delete(API_URLS.SYNTHETICS_MONITORS_PROJECT.replace('{projectName}', project))
+ .delete(API_URLS.SYNTHETICS_MONITORS_PROJECT_DELETE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
.send({ monitors: monitorsToDelete })
.expect(400);
@@ -144,7 +144,7 @@ export default function ({ getService }: FtrProviderContext) {
const monitorsToDelete = [monitorToDelete];
const response = await supertest
- .delete(API_URLS.SYNTHETICS_MONITORS_PROJECT.replace('{projectName}', project))
+ .delete(API_URLS.SYNTHETICS_MONITORS_PROJECT_DELETE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
.send({ monitors: monitorsToDelete })
.expect(200);
@@ -218,7 +218,7 @@ export default function ({ getService }: FtrProviderContext) {
const monitorsToDelete = monitors.map((monitor) => monitor.id);
const response = await supertest
- .delete(API_URLS.SYNTHETICS_MONITORS_PROJECT.replace('{projectName}', project))
+ .delete(API_URLS.SYNTHETICS_MONITORS_PROJECT_DELETE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
.send({ monitors: monitorsToDelete })
.expect(200);
@@ -315,7 +315,7 @@ export default function ({ getService }: FtrProviderContext) {
const response = await supertest
.delete(
- `/s/${SPACE_ID}${API_URLS.SYNTHETICS_MONITORS_PROJECT.replace(
+ `/s/${SPACE_ID}${API_URLS.SYNTHETICS_MONITORS_PROJECT_DELETE.replace(
'{projectName}',
project
)}`
@@ -407,7 +407,7 @@ export default function ({ getService }: FtrProviderContext) {
const monitorsToDelete = monitors.map((monitor) => monitor.id);
const response = await supertest
- .delete(API_URLS.SYNTHETICS_MONITORS_PROJECT.replace('{projectName}', project))
+ .delete(API_URLS.SYNTHETICS_MONITORS_PROJECT_DELETE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
.send({ monitors: monitorsToDelete })
.expect(200);
@@ -500,7 +500,7 @@ export default function ({ getService }: FtrProviderContext) {
const {
body: { message },
} = await supertestWithoutAuth
- .delete(API_URLS.SYNTHETICS_MONITORS_PROJECT.replace('{projectName}', project))
+ .delete(API_URLS.SYNTHETICS_MONITORS_PROJECT_DELETE.replace('{projectName}', project))
.set('kbn-xsrf', 'true')
.auth(username, password)
.send({ monitors: monitorsToDelete })
diff --git a/x-pack/test/api_integration/apis/synthetics/get_monitor_project.ts b/x-pack/test/api_integration/apis/synthetics/get_monitor_project.ts
index 734d10f6355ee..dd2c71913c625 100644
--- a/x-pack/test/api_integration/apis/synthetics/get_monitor_project.ts
+++ b/x-pack/test/api_integration/apis/synthetics/get_monitor_project.ts
@@ -8,7 +8,7 @@ import uuid from 'uuid';
import type SuperTest from 'supertest';
import { format as formatUrl } from 'url';
import {
- ProjectMonitorsRequest,
+ LegacyProjectMonitorsRequest,
ProjectMonitor,
ProjectMonitorMetaData,
} from '@kbn/synthetics-plugin/common/runtime_types';
@@ -17,7 +17,7 @@ import expect from '@kbn/expect';
import { FtrProviderContext } from '../../ftr_provider_context';
import { getFixtureJson } from '../uptime/rest/helper/get_fixture_json';
import { PrivateLocationTestService } from './services/private_location_test_service';
-import { parseStreamApiResponse } from './add_monitor_project';
+import { parseStreamApiResponse } from './add_monitor_project_legacy';
export default function ({ getService }: FtrProviderContext) {
describe('GetProjectMonitors', function () {
@@ -28,15 +28,15 @@ export default function ({ getService }: FtrProviderContext) {
const kibanaServerUrl = formatUrl(config.get('servers.kibana'));
const projectMonitorEndpoint = kibanaServerUrl + API_URLS.SYNTHETICS_MONITORS_PROJECT_LEGACY;
- let projectMonitors: ProjectMonitorsRequest;
- let httpProjectMonitors: ProjectMonitorsRequest;
- let tcpProjectMonitors: ProjectMonitorsRequest;
- let icmpProjectMonitors: ProjectMonitorsRequest;
+ let projectMonitors: LegacyProjectMonitorsRequest;
+ let httpProjectMonitors: LegacyProjectMonitorsRequest;
+ let tcpProjectMonitors: LegacyProjectMonitorsRequest;
+ let icmpProjectMonitors: LegacyProjectMonitorsRequest;
let testPolicyId = '';
const testPrivateLocations = new PrivateLocationTestService(getService);
- const setUniqueIds = (request: ProjectMonitorsRequest) => {
+ const setUniqueIds = (request: LegacyProjectMonitorsRequest) => {
return {
...request,
monitors: request.monitors.map((monitor) => ({ ...monitor, id: uuid.v4() })),
diff --git a/x-pack/test/api_integration/apis/synthetics/index.ts b/x-pack/test/api_integration/apis/synthetics/index.ts
index 937d714a6a96f..763afc371b045 100644
--- a/x-pack/test/api_integration/apis/synthetics/index.ts
+++ b/x-pack/test/api_integration/apis/synthetics/index.ts
@@ -19,6 +19,7 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) {
loadTestFile(require.resolve('./get_monitor'));
loadTestFile(require.resolve('./get_monitor_overview'));
loadTestFile(require.resolve('./add_monitor'));
+ loadTestFile(require.resolve('./add_monitor_project_legacy'));
loadTestFile(require.resolve('./add_monitor_project'));
loadTestFile(require.resolve('./get_monitor_project'));
loadTestFile(require.resolve('./add_monitor_private_location'));
diff --git a/x-pack/test/api_integration/apis/uptime/rest/sample_data/test_policy.ts b/x-pack/test/api_integration/apis/uptime/rest/sample_data/test_policy.ts
index 05bba2286e004..26418137fc23e 100644
--- a/x-pack/test/api_integration/apis/uptime/rest/sample_data/test_policy.ts
+++ b/x-pack/test/api_integration/apis/uptime/rest/sample_data/test_policy.ts
@@ -302,11 +302,13 @@ export const getTestProjectSyntheticsPolicy = (
inputs = {},
configId,
id,
+ projectId = 'test-suite',
}: {
name?: string;
inputs: Record;
configId: string;
id: string;
+ projectId?: string;
} = {
name: 'check if title is present-Test private location 0',
inputs: {},
@@ -314,9 +316,9 @@ export const getTestProjectSyntheticsPolicy = (
id: '',
}
): PackagePolicy => ({
- id: '4b6abc6c-118b-4d93-a489-1135500d09f1-test-suite-default-d70a46e0-22ea-11ed-8c6b-09a2d21dfbc3',
+ id: `4b6abc6c-118b-4d93-a489-1135500d09f1-${projectId}-default-d70a46e0-22ea-11ed-8c6b-09a2d21dfbc3`,
version: 'WzEzMDksMV0=',
- name: '4b6abc6c-118b-4d93-a489-1135500d09f1-test-suite-default-Test private location 0',
+ name: `4b6abc6c-118b-4d93-a489-1135500d09f1-${projectId}-default-Test private location 0`,
namespace: 'default',
package: { name: 'synthetics', title: 'Elastic Synthetics', version: '0.10.3' },
enabled: true,
@@ -368,7 +370,7 @@ export const getTestProjectSyntheticsPolicy = (
'monitor.project.id': { type: 'text' },
'monitor.project.name': { type: 'text' },
},
- id: 'synthetics/http-http-4b6abc6c-118b-4d93-a489-1135500d09f1-test-suite-default-d70a46e0-22ea-11ed-8c6b-09a2d21dfbc3',
+ id: `synthetics/http-http-4b6abc6c-118b-4d93-a489-1135500d09f1-${projectId}-default-d70a46e0-22ea-11ed-8c6b-09a2d21dfbc3`,
},
],
},
@@ -409,7 +411,7 @@ export const getTestProjectSyntheticsPolicy = (
'monitor.project.id': { type: 'text' },
'monitor.project.name': { type: 'text' },
},
- id: 'synthetics/tcp-tcp-4b6abc6c-118b-4d93-a489-1135500d09f1-test-suite-default-d70a46e0-22ea-11ed-8c6b-09a2d21dfbc3',
+ id: `synthetics/tcp-tcp-4b6abc6c-118b-4d93-a489-1135500d09f1-${projectId}-default-d70a46e0-22ea-11ed-8c6b-09a2d21dfbc3`,
},
],
},
@@ -441,7 +443,7 @@ export const getTestProjectSyntheticsPolicy = (
'monitor.project.id': { type: 'text' },
'monitor.project.name': { type: 'text' },
},
- id: 'synthetics/icmp-icmp-4b6abc6c-118b-4d93-a489-1135500d09f1-test-suite-default-d70a46e0-22ea-11ed-8c6b-09a2d21dfbc3',
+ id: `synthetics/icmp-icmp-4b6abc6c-118b-4d93-a489-1135500d09f1-${projectId}-default-d70a46e0-22ea-11ed-8c6b-09a2d21dfbc3`,
},
],
},
@@ -500,11 +502,11 @@ export const getTestProjectSyntheticsPolicy = (
config_id: { value: configId, type: 'text' },
run_once: { value: false, type: 'bool' },
origin: { value: 'project', type: 'text' },
- 'monitor.project.id': { value: 'test-suite', type: 'text' },
- 'monitor.project.name': { value: 'test-suite', type: 'text' },
+ 'monitor.project.id': { value: projectId, type: 'text' },
+ 'monitor.project.name': { value: projectId, type: 'text' },
...inputs,
},
- id: 'synthetics/browser-browser-4b6abc6c-118b-4d93-a489-1135500d09f1-test-suite-default-d70a46e0-22ea-11ed-8c6b-09a2d21dfbc3',
+ id: `synthetics/browser-browser-4b6abc6c-118b-4d93-a489-1135500d09f1-${projectId}-default-d70a46e0-22ea-11ed-8c6b-09a2d21dfbc3`,
compiled_stream: {
__ui: {
script_source: { is_generated_script: false, file_name: '' },
@@ -531,8 +533,8 @@ export const getTestProjectSyntheticsPolicy = (
fields: {
'monitor.fleet_managed': true,
config_id: configId,
- 'monitor.project.name': 'test-suite',
- 'monitor.project.id': 'test-suite',
+ 'monitor.project.name': projectId,
+ 'monitor.project.id': projectId,
},
},
},
@@ -547,7 +549,7 @@ export const getTestProjectSyntheticsPolicy = (
enabled: true,
release: 'beta',
data_stream: { type: 'synthetics', dataset: 'browser.network' },
- id: 'synthetics/browser-browser.network-4b6abc6c-118b-4d93-a489-1135500d09f1-test-suite-default-d70a46e0-22ea-11ed-8c6b-09a2d21dfbc3',
+ id: `synthetics/browser-browser.network-4b6abc6c-118b-4d93-a489-1135500d09f1-${projectId}-default-d70a46e0-22ea-11ed-8c6b-09a2d21dfbc3`,
compiled_stream: {
processors: [
{ add_observer_metadata: { geo: { name: 'Fleet managed' } } },
@@ -559,7 +561,7 @@ export const getTestProjectSyntheticsPolicy = (
enabled: true,
release: 'beta',
data_stream: { type: 'synthetics', dataset: 'browser.screenshot' },
- id: 'synthetics/browser-browser.screenshot-4b6abc6c-118b-4d93-a489-1135500d09f1-test-suite-default-d70a46e0-22ea-11ed-8c6b-09a2d21dfbc3',
+ id: `synthetics/browser-browser.screenshot-4b6abc6c-118b-4d93-a489-1135500d09f1-${projectId}-default-d70a46e0-22ea-11ed-8c6b-09a2d21dfbc3`,
compiled_stream: {
processors: [
{ add_observer_metadata: { geo: { name: 'Fleet managed' } } },
From 3dd5c5388e3dfde8c7c33b4233054ef7555cafea Mon Sep 17 00:00:00 2001
From: Tiago Costa
Date: Fri, 4 Nov 2022 02:27:23 +0000
Subject: [PATCH 03/31] chore(NA): update ci step name to Check Public API Docs
(#144573)
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
---
.buildkite/pipelines/on_merge.yml | 4 ++--
.../{on_merge_ts_refs_api_docs.sh => on_merge_api_docs.sh} | 0
2 files changed, 2 insertions(+), 2 deletions(-)
rename .buildkite/scripts/steps/{on_merge_ts_refs_api_docs.sh => on_merge_api_docs.sh} (100%)
diff --git a/.buildkite/pipelines/on_merge.yml b/.buildkite/pipelines/on_merge.yml
index 7ea0317b56e70..ffca48499b159 100644
--- a/.buildkite/pipelines/on_merge.yml
+++ b/.buildkite/pipelines/on_merge.yml
@@ -39,8 +39,8 @@ steps:
- exit_status: '*'
limit: 1
- - command: .buildkite/scripts/steps/on_merge_ts_refs_api_docs.sh
- label: Build TS Refs and Check Public API Docs
+ - command: .buildkite/scripts/steps/on_merge_api_docs.sh
+ label: Check Public API Docs
key: public-api-docs
agents:
queue: n2-4-spot
diff --git a/.buildkite/scripts/steps/on_merge_ts_refs_api_docs.sh b/.buildkite/scripts/steps/on_merge_api_docs.sh
similarity index 100%
rename from .buildkite/scripts/steps/on_merge_ts_refs_api_docs.sh
rename to .buildkite/scripts/steps/on_merge_api_docs.sh
From 6baf409079d8a85133a3d4cb32403500ddfff6e3 Mon Sep 17 00:00:00 2001
From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Date: Fri, 4 Nov 2022 00:45:21 -0400
Subject: [PATCH 04/31] [api-docs] Daily api_docs build (#144584)
---
api_docs/actions.mdx | 2 +-
api_docs/advanced_settings.mdx | 2 +-
api_docs/aiops.mdx | 2 +-
api_docs/alerting.devdocs.json | 16 +++++
api_docs/alerting.mdx | 4 +-
api_docs/apm.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_experiments.mdx | 2 +-
api_docs/cloud_security_posture.mdx | 2 +-
api_docs/console.mdx | 2 +-
api_docs/controls.mdx | 2 +-
api_docs/core.mdx | 2 +-
api_docs/custom_integrations.mdx | 2 +-
api_docs/dashboard.mdx | 2 +-
api_docs/dashboard_enhanced.mdx | 2 +-
api_docs/data.devdocs.json | 8 ---
api_docs/data.mdx | 2 +-
api_docs/data_query.mdx | 2 +-
api_docs/data_search.mdx | 2 +-
api_docs/data_view_editor.mdx | 2 +-
api_docs/data_view_field_editor.mdx | 2 +-
api_docs/data_view_management.mdx | 2 +-
api_docs/data_views.devdocs.json | 12 ----
api_docs/data_views.mdx | 2 +-
api_docs/data_visualizer.mdx | 2 +-
api_docs/deprecations_by_api.mdx | 2 +-
api_docs/deprecations_by_plugin.mdx | 8 +--
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/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/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.devdocs.json | 58 +++++++++++++++
api_docs/expression_metric_vis.mdx | 4 +-
.../expression_partition_vis.devdocs.json | 64 +++++++++++++++++
api_docs/expression_partition_vis.mdx | 4 +-
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.devdocs.json | 71 ++++++++++++++++++-
api_docs/expressions.mdx | 4 +-
api_docs/features.mdx | 2 +-
api_docs/field_formats.mdx | 2 +-
api_docs/file_upload.mdx | 2 +-
api_docs/files.devdocs.json | 18 +++++
api_docs/files.mdx | 4 +-
api_docs/fleet.devdocs.json | 14 ++++
api_docs/fleet.mdx | 4 +-
api_docs/global_search.mdx | 2 +-
api_docs/guided_onboarding.mdx | 2 +-
api_docs/home.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_alerts.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_utils.mdx | 2 +-
api_docs/kbn_axe_config.mdx | 2 +-
api_docs/kbn_cases_components.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_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_table_list.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_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.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 +-
.../kbn_core_injected_metadata_browser.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 +-
.../kbn_core_saved_objects_api_browser.mdx | 2 +-
.../kbn_core_saved_objects_api_server.mdx | 2 +-
...core_saved_objects_api_server_internal.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 +-
...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_internal.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_crypto.mdx | 2 +-
api_docs/kbn_crypto_browser.mdx | 2 +-
api_docs/kbn_datemath.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_doc_links.mdx | 2 +-
api_docs/kbn_docs_utils.mdx | 2 +-
api_docs/kbn_ebt_tools.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_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_get_repo_files.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_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_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_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_mapbox_gl.mdx | 2 +-
api_docs/kbn_ml_agg_utils.mdx | 2 +-
api_docs/kbn_ml_is_populated_object.mdx | 2 +-
api_docs/kbn_ml_string_hash.mdx | 2 +-
api_docs/kbn_monaco.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_react_field.mdx | 2 +-
api_docs/kbn_repo_source_classifier.mdx | 2 +-
api_docs/kbn_rule_data_utils.mdx | 2 +-
.../kbn_securitysolution_autocomplete.mdx | 2 +-
api_docs/kbn_securitysolution_es_utils.mdx | 2 +-
...ritysolution_exception_list_components.mdx | 2 +-
api_docs/kbn_securitysolution_hook_utils.mdx | 2 +-
..._securitysolution_io_ts_alerting_types.mdx | 2 +-
.../kbn_securitysolution_io_ts_list_types.mdx | 2 +-
api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +-
api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +-
api_docs/kbn_securitysolution_list_api.mdx | 2 +-
.../kbn_securitysolution_list_constants.mdx | 2 +-
api_docs/kbn_securitysolution_list_hooks.mdx | 2 +-
api_docs/kbn_securitysolution_list_utils.mdx | 2 +-
api_docs/kbn_securitysolution_rules.mdx | 2 +-
api_docs/kbn_securitysolution_t_grid.mdx | 2 +-
api_docs/kbn_securitysolution_utils.mdx | 2 +-
api_docs/kbn_server_http_tools.mdx | 2 +-
api_docs/kbn_server_route_repository.mdx | 2 +-
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_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_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_some_dev_log.mdx | 2 +-
api_docs/kbn_sort_package_json.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_tooling_log.mdx | 2 +-
api_docs/kbn_type_summarizer.mdx | 2 +-
api_docs/kbn_type_summarizer_core.mdx | 2 +-
api_docs/kbn_typed_react_router_config.mdx | 2 +-
api_docs/kbn_ui_shared_deps_src.mdx | 2 +-
api_docs/kbn_ui_theme.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_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/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.devdocs.json | 59 +++++++++++++++
api_docs/notifications.mdx | 35 +++++++++
api_docs/observability.mdx | 2 +-
api_docs/osquery.devdocs.json | 4 +-
api_docs/osquery.mdx | 4 +-
api_docs/plugin_directory.mdx | 21 +++---
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/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/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_field_list.mdx | 2 +-
api_docs/unified_histogram.mdx | 2 +-
api_docs/unified_search.mdx | 2 +-
api_docs/unified_search_autocomplete.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 +-
443 files changed, 789 insertions(+), 473 deletions(-)
create mode 100644 api_docs/notifications.devdocs.json
create mode 100644 api_docs/notifications.mdx
diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx
index 45ae25e9b17c0..66093e7a6b5ab 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions']
---
import actionsObj from './actions.devdocs.json';
diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx
index bd29be2c00481..672f93fb0919e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings']
---
import advancedSettingsObj from './advanced_settings.devdocs.json';
diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx
index 936c9a2367ae2..187ae5f13dbb8 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops']
---
import aiopsObj from './aiops.devdocs.json';
diff --git a/api_docs/alerting.devdocs.json b/api_docs/alerting.devdocs.json
index 5ace082c7a03e..841e8225d9d8d 100644
--- a/api_docs/alerting.devdocs.json
+++ b/api_docs/alerting.devdocs.json
@@ -1611,6 +1611,22 @@
"returnComment": [],
"children": []
},
+ {
+ "parentPluginId": "alerting",
+ "id": "def-server.PluginStartContract.getAllTypes",
+ "type": "Function",
+ "tags": [],
+ "label": "getAllTypes",
+ "description": [],
+ "signature": [
+ "() => string[]"
+ ],
+ "path": "x-pack/plugins/alerting/server/plugin.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "returnComment": [],
+ "children": []
+ },
{
"parentPluginId": "alerting",
"id": "def-server.PluginStartContract.getRulesClientWithRequest",
diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx
index f530f33d11f74..5da58c27ab4c3 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting']
---
import alertingObj from './alerting.devdocs.json';
@@ -21,7 +21,7 @@ Contact [Response Ops](https://github.com/orgs/elastic/teams/response-ops) for q
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 383 | 0 | 374 | 26 |
+| 384 | 0 | 375 | 26 |
## Client
diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx
index d07ecf0a253c2..1e449df65a7ec 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm']
---
import apmObj from './apm.devdocs.json';
diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx
index 0ad42c9b17321..b8074030728dd 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners']
---
import bannersObj from './banners.devdocs.json';
diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx
index 3db90dea640f8..0b20b32cf640d 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch']
---
import bfetchObj from './bfetch.devdocs.json';
diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx
index 9e0901d75f6b1..6047f152ba2bb 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas']
---
import canvasObj from './canvas.devdocs.json';
diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx
index e7a74aacce4ae..8ac23e0e22b34 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases']
---
import casesObj from './cases.devdocs.json';
diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx
index e8838d50b0eaa..7c33895a9db9e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts']
---
import chartsObj from './charts.devdocs.json';
diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx
index f8d1163733b79..90d45ab5fe6c1 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: 2022-11-03
+date: 2022-11-04
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 80ff13377bc26..ee4b8e728acfa 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat']
---
import cloudChatObj from './cloud_chat.devdocs.json';
diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx
index c1b95e245680a..dc5a33367786f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments']
---
import cloudExperimentsObj from './cloud_experiments.devdocs.json';
diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx
index 4ad371b257335..805d5958316c3 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture']
---
import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json';
diff --git a/api_docs/console.mdx b/api_docs/console.mdx
index 8fdf1ffb89ac0..7dbe582fd184e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console']
---
import consoleObj from './console.devdocs.json';
diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx
index 6599db29e930d..2e69859a11dbf 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls']
---
import controlsObj from './controls.devdocs.json';
diff --git a/api_docs/core.mdx b/api_docs/core.mdx
index 8c4220e8cf716..94defa88a150a 100644
--- a/api_docs/core.mdx
+++ b/api_docs/core.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/core
title: "core"
image: https://source.unsplash.com/400x175/?github
description: API docs for the core plugin
-date: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core']
---
import coreObj from './core.devdocs.json';
diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx
index c8cf92add3f3a..55995cdb13258 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations']
---
import customIntegrationsObj from './custom_integrations.devdocs.json';
diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx
index 8ec36dacef78c..436ee1e60c68f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard']
---
import dashboardObj from './dashboard.devdocs.json';
diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx
index a02131a88a707..4f182f07cb86e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced']
---
import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json';
diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json
index 553e1e7be39fc..15181498020c1 100644
--- a/api_docs/data.devdocs.json
+++ b/api_docs/data.devdocs.json
@@ -13399,10 +13399,6 @@
"plugin": "fleet",
"path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx"
},
- {
- "plugin": "fleet",
- "path": "x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx"
- },
{
"plugin": "canvas",
"path": "x-pack/plugins/canvas/public/components/es_data_view_select/es_data_view_select.component.tsx"
@@ -21101,10 +21097,6 @@
"plugin": "fleet",
"path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx"
},
- {
- "plugin": "fleet",
- "path": "x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx"
- },
{
"plugin": "canvas",
"path": "x-pack/plugins/canvas/public/components/es_data_view_select/es_data_view_select.component.tsx"
diff --git a/api_docs/data.mdx b/api_docs/data.mdx
index f6bf34c288d68..4d82afee6ebad 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data']
---
import dataObj from './data.devdocs.json';
diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx
index db9f22945d1ac..97573ad6cadb4 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query']
---
import dataQueryObj from './data_query.devdocs.json';
diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx
index b12119e1daa88..3fb119d56953b 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search']
---
import dataSearchObj from './data_search.devdocs.json';
diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx
index 8591c7282e883..2051c58870a00 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor']
---
import dataViewEditorObj from './data_view_editor.devdocs.json';
diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx
index c98f96208c9c4..4f4c913a97173 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor']
---
import dataViewFieldEditorObj from './data_view_field_editor.devdocs.json';
diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx
index 94ee7348cf66e..fc87dfe0a214f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement']
---
import dataViewManagementObj from './data_view_management.devdocs.json';
diff --git a/api_docs/data_views.devdocs.json b/api_docs/data_views.devdocs.json
index 7c18de244ea8f..dbf671a475ede 100644
--- a/api_docs/data_views.devdocs.json
+++ b/api_docs/data_views.devdocs.json
@@ -587,10 +587,6 @@
"plugin": "fleet",
"path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx"
},
- {
- "plugin": "fleet",
- "path": "x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx"
- },
{
"plugin": "canvas",
"path": "x-pack/plugins/canvas/public/components/es_data_view_select/es_data_view_select.component.tsx"
@@ -8888,10 +8884,6 @@
"plugin": "fleet",
"path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx"
},
- {
- "plugin": "fleet",
- "path": "x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx"
- },
{
"plugin": "canvas",
"path": "x-pack/plugins/canvas/public/components/es_data_view_select/es_data_view_select.component.tsx"
@@ -16270,10 +16262,6 @@
"plugin": "fleet",
"path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx"
},
- {
- "plugin": "fleet",
- "path": "x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx"
- },
{
"plugin": "canvas",
"path": "x-pack/plugins/canvas/public/components/es_data_view_select/es_data_view_select.component.tsx"
diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx
index 725d6d1513885..10bcb9d197a85 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews']
---
import dataViewsObj from './data_views.devdocs.json';
diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx
index 044f63182b7b7..cca8d6d78f0fd 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer']
---
import dataVisualizerObj from './data_visualizer.devdocs.json';
diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx
index 4e3a8df5e4bdf..92f967d07bbb3 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx
index eb573d7b20274..d9294f0da0699 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
@@ -481,9 +481,9 @@ so TS and code-reference navigation might not highlight them. |
| Deprecated API | Reference location(s) | Remove By |
| ---------------|-----------|-----------|
-| | [filter_dataset.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx#:~:text=title), [filter_log_level.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx#:~:text=title), [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title), [search_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx#:~:text=title), [filter_dataset.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx#:~:text=title), [filter_log_level.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx#:~:text=title), [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title), [search_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx#:~:text=title) | - |
-| | [filter_dataset.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx#:~:text=title), [filter_log_level.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx#:~:text=title), [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title), [search_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx#:~:text=title), [filter_dataset.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx#:~:text=title), [filter_log_level.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx#:~:text=title), [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title), [search_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx#:~:text=title) | - |
-| | [filter_dataset.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx#:~:text=title), [filter_log_level.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx#:~:text=title), [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title), [search_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx#:~:text=title) | - |
+| | [filter_dataset.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx#:~:text=title), [filter_log_level.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx#:~:text=title), [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title), [filter_dataset.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx#:~:text=title), [filter_log_level.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx#:~:text=title), [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title) | - |
+| | [filter_dataset.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx#:~:text=title), [filter_log_level.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx#:~:text=title), [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title), [filter_dataset.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx#:~:text=title), [filter_log_level.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx#:~:text=title), [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title) | - |
+| | [filter_dataset.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx#:~:text=title), [filter_log_level.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx#:~:text=title), [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title) | - |
| | [use_get_logs_discover_link.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/hooks/use_get_logs_discover_link.tsx#:~:text=indexPatternId) | - |
| | [tutorial_directory_header_link.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/components/home_integration/tutorial_directory_header_link.tsx#:~:text=RedirectAppLinks), [tutorial_directory_header_link.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/components/home_integration/tutorial_directory_header_link.tsx#:~:text=RedirectAppLinks), [tutorial_directory_header_link.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/components/home_integration/tutorial_directory_header_link.tsx#:~:text=RedirectAppLinks), [custom_assets_accordion.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/components/custom_assets_accordion.tsx#:~:text=RedirectAppLinks), [custom_assets_accordion.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/components/custom_assets_accordion.tsx#:~:text=RedirectAppLinks), [custom_assets_accordion.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/components/custom_assets_accordion.tsx#:~:text=RedirectAppLinks), [agent_logs.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/agent_logs.tsx#:~:text=RedirectAppLinks), [agent_logs.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/agent_logs.tsx#:~:text=RedirectAppLinks), [agent_logs.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/agent_logs.tsx#:~:text=RedirectAppLinks), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/integrations/app.tsx#:~:text=RedirectAppLinks)+ 5 more | - |
| | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/plugin.ts#:~:text=disabled) | 8.8.0 |
diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx
index 818676792f91c..c7311050cdf5e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx
index 3eccaa28d481d..016caf397fa15 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools']
---
import devToolsObj from './dev_tools.devdocs.json';
diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx
index aa18ecbfecc3c..a9b6af99dd77e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover']
---
import discoverObj from './discover.devdocs.json';
diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx
index 93d44e5df3b1b..0db95822d49a8 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced']
---
import discoverEnhancedObj from './discover_enhanced.devdocs.json';
diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx
index 5fd3ab983e6c8..a37f160e9856c 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable']
---
import embeddableObj from './embeddable.devdocs.json';
diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx
index 258f0710fafc2..95acf704c066f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced']
---
import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json';
diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx
index 1d34e7432e4a6..55196daed59f5 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects']
---
import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json';
diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx
index eb7322768c918..b05fe04353180 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch']
---
import enterpriseSearchObj from './enterprise_search.devdocs.json';
diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx
index 6c210de4a3eb7..c279a171ef789 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared']
---
import esUiSharedObj from './es_ui_shared.devdocs.json';
diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx
index 9b62890d42a8c..6f2a2d753bfc2 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: 2022-11-03
+date: 2022-11-04
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 9251a09f4331d..ea9b7aa97352c 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog']
---
import eventLogObj from './event_log.devdocs.json';
diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx
index 12c514f316fe7..6e6f778e96deb 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError']
---
import expressionErrorObj from './expression_error.devdocs.json';
diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx
index 038248c69857f..fb56b758dd6af 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge']
---
import expressionGaugeObj from './expression_gauge.devdocs.json';
diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx
index 0844b3e94a269..8541a49468ea5 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap']
---
import expressionHeatmapObj from './expression_heatmap.devdocs.json';
diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx
index d12e3d10d06cc..340521a94c01f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage']
---
import expressionImageObj from './expression_image.devdocs.json';
diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx
index 06725c77e3b9a..3cc007b2f8c70 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis']
---
import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json';
diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx
index aa5cc4b4c2b33..455050e452e59 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric']
---
import expressionMetricObj from './expression_metric.devdocs.json';
diff --git a/api_docs/expression_metric_vis.devdocs.json b/api_docs/expression_metric_vis.devdocs.json
index 052d886583c4a..5d837dadafaf1 100644
--- a/api_docs/expression_metric_vis.devdocs.json
+++ b/api_docs/expression_metric_vis.devdocs.json
@@ -1086,6 +1086,64 @@
"deprecated": false,
"trackAdoption": false,
"initialIsOpen": false
+ },
+ {
+ "parentPluginId": "expressionMetricVis",
+ "id": "def-common.TrendlineExpressionFunctionDefinition",
+ "type": "Type",
+ "tags": [],
+ "label": "TrendlineExpressionFunctionDefinition",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "expressions",
+ "scope": "common",
+ "docId": "kibExpressionsPluginApi",
+ "section": "def-common.ExpressionFunctionDefinition",
+ "text": "ExpressionFunctionDefinition"
+ },
+ "<\"metricTrendline\", ",
+ {
+ "pluginId": "expressions",
+ "scope": "common",
+ "docId": "kibExpressionsPluginApi",
+ "section": "def-common.Datatable",
+ "text": "Datatable"
+ },
+ ", ",
+ "TrendlineArguments",
+ ", ",
+ "TrendlineResult",
+ ", ",
+ {
+ "pluginId": "expressions",
+ "scope": "common",
+ "docId": "kibExpressionsPluginApi",
+ "section": "def-common.ExecutionContext",
+ "text": "ExecutionContext"
+ },
+ "<",
+ {
+ "pluginId": "inspector",
+ "scope": "common",
+ "docId": "kibInspectorPluginApi",
+ "section": "def-common.Adapters",
+ "text": "Adapters"
+ },
+ ", ",
+ {
+ "pluginId": "@kbn/utility-types",
+ "scope": "server",
+ "docId": "kibKbnUtilityTypesPluginApi",
+ "section": "def-server.SerializableRecord",
+ "text": "SerializableRecord"
+ },
+ ">>"
+ ],
+ "path": "src/plugins/chart_expressions/expression_metric/common/types/expression_functions.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
}
],
"objects": []
diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx
index 82ce89f2e9b72..73f0f7ad1235a 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis']
---
import expressionMetricVisObj from './expression_metric_vis.devdocs.json';
@@ -21,7 +21,7 @@ Contact [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors)
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 62 | 0 | 62 | 1 |
+| 63 | 0 | 63 | 2 |
## Client
diff --git a/api_docs/expression_partition_vis.devdocs.json b/api_docs/expression_partition_vis.devdocs.json
index 5c3b0a81120ca..f9a606bdebd30 100644
--- a/api_docs/expression_partition_vis.devdocs.json
+++ b/api_docs/expression_partition_vis.devdocs.json
@@ -1219,6 +1219,70 @@
"trackAdoption": false,
"initialIsOpen": false
},
+ {
+ "parentPluginId": "expressionPartitionVis",
+ "id": "def-common.PartitionLabelsExpressionFunctionDefinition",
+ "type": "Type",
+ "tags": [],
+ "label": "PartitionLabelsExpressionFunctionDefinition",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "expressions",
+ "scope": "common",
+ "docId": "kibExpressionsPluginApi",
+ "section": "def-common.ExpressionFunctionDefinition",
+ "text": "ExpressionFunctionDefinition"
+ },
+ "<\"partitionLabels\", ",
+ {
+ "pluginId": "expressions",
+ "scope": "common",
+ "docId": "kibExpressionsPluginApi",
+ "section": "def-common.Datatable",
+ "text": "Datatable"
+ },
+ " | null, ",
+ "PartitionLabelsArguments",
+ ", ",
+ {
+ "pluginId": "expressionPartitionVis",
+ "scope": "common",
+ "docId": "kibExpressionPartitionVisPluginApi",
+ "section": "def-common.ExpressionValuePartitionLabels",
+ "text": "ExpressionValuePartitionLabels"
+ },
+ ", ",
+ {
+ "pluginId": "expressions",
+ "scope": "common",
+ "docId": "kibExpressionsPluginApi",
+ "section": "def-common.ExecutionContext",
+ "text": "ExecutionContext"
+ },
+ "<",
+ {
+ "pluginId": "inspector",
+ "scope": "common",
+ "docId": "kibInspectorPluginApi",
+ "section": "def-common.Adapters",
+ "text": "Adapters"
+ },
+ ", ",
+ {
+ "pluginId": "@kbn/utility-types",
+ "scope": "server",
+ "docId": "kibKbnUtilityTypesPluginApi",
+ "section": "def-server.SerializableRecord",
+ "text": "SerializableRecord"
+ },
+ ">>"
+ ],
+ "path": "src/plugins/chart_expressions/expression_partition_vis/common/types/expression_functions.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
{
"parentPluginId": "expressionPartitionVis",
"id": "def-common.PIE_VIS_EXPRESSION_NAME",
diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx
index 0b5b547c7fa26..ed3632ca4a00f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis']
---
import expressionPartitionVisObj from './expression_partition_vis.devdocs.json';
@@ -21,7 +21,7 @@ Contact [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors)
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 70 | 0 | 70 | 2 |
+| 71 | 0 | 71 | 2 |
## Client
diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx
index 2a6c6bc3acc9e..82b7ebb310ed5 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage']
---
import expressionRepeatImageObj from './expression_repeat_image.devdocs.json';
diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx
index e67e8d2f2adf9..931a50523440c 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage']
---
import expressionRevealImageObj from './expression_reveal_image.devdocs.json';
diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx
index 43c6376b76d1a..d7daa95bff846 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape']
---
import expressionShapeObj from './expression_shape.devdocs.json';
diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx
index a4f2b1c54a11b..e408a004cc33f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud']
---
import expressionTagcloudObj from './expression_tagcloud.devdocs.json';
diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx
index c8399afdaac75..ea2853fff9008 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY']
---
import expressionXYObj from './expression_x_y.devdocs.json';
diff --git a/api_docs/expressions.devdocs.json b/api_docs/expressions.devdocs.json
index a1b86d1c267b6..dc286cf76daa6 100644
--- a/api_docs/expressions.devdocs.json
+++ b/api_docs/expressions.devdocs.json
@@ -37572,7 +37572,7 @@
"section": "def-common.MathArguments",
"text": "MathArguments"
},
- " & { id: string; name?: string | undefined; copyMetaFrom?: string | null | undefined; }"
+ " & { id: string; name?: string | undefined; castColumns?: string[] | undefined; copyMetaFrom?: string | null | undefined; }"
],
"path": "src/plugins/expressions/common/expression_functions/specs/math_column.ts",
"deprecated": false,
@@ -42294,6 +42294,75 @@
}
]
},
+ {
+ "parentPluginId": "expressions",
+ "id": "def-common.mathColumn.args.castColumns",
+ "type": "Object",
+ "tags": [],
+ "label": "castColumns",
+ "description": [],
+ "path": "src/plugins/expressions/common/expression_functions/specs/math_column.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "expressions",
+ "id": "def-common.mathColumn.args.castColumns.types",
+ "type": "Array",
+ "tags": [],
+ "label": "types",
+ "description": [],
+ "signature": [
+ "\"string\"[]"
+ ],
+ "path": "src/plugins/expressions/common/expression_functions/specs/math_column.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "expressions",
+ "id": "def-common.mathColumn.args.castColumns.multi",
+ "type": "boolean",
+ "tags": [],
+ "label": "multi",
+ "description": [],
+ "signature": [
+ "true"
+ ],
+ "path": "src/plugins/expressions/common/expression_functions/specs/math_column.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "expressions",
+ "id": "def-common.mathColumn.args.castColumns.help",
+ "type": "Any",
+ "tags": [],
+ "label": "help",
+ "description": [],
+ "signature": [
+ "any"
+ ],
+ "path": "src/plugins/expressions/common/expression_functions/specs/math_column.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "expressions",
+ "id": "def-common.mathColumn.args.castColumns.required",
+ "type": "boolean",
+ "tags": [],
+ "label": "required",
+ "description": [],
+ "signature": [
+ "false"
+ ],
+ "path": "src/plugins/expressions/common/expression_functions/specs/math_column.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ]
+ },
{
"parentPluginId": "expressions",
"id": "def-common.mathColumn.args.copyMetaFrom",
diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx
index e62db4abe9aba..d30e3fe086b66 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions']
---
import expressionsObj from './expressions.devdocs.json';
@@ -21,7 +21,7 @@ Contact [App Services](https://github.com/orgs/elastic/teams/kibana-app-services
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 2191 | 73 | 1734 | 5 |
+| 2196 | 74 | 1739 | 5 |
## Client
diff --git a/api_docs/features.mdx b/api_docs/features.mdx
index 684232c6bb419..21ee873128033 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features']
---
import featuresObj from './features.devdocs.json';
diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx
index 78fc717977236..420432acec141 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats']
---
import fieldFormatsObj from './field_formats.devdocs.json';
diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx
index 7d3ce796501b1..3345f4652c979 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload']
---
import fileUploadObj from './file_upload.devdocs.json';
diff --git a/api_docs/files.devdocs.json b/api_docs/files.devdocs.json
index 94f495ecaaf41..55601ee2dbb95 100644
--- a/api_docs/files.devdocs.json
+++ b/api_docs/files.devdocs.json
@@ -1329,6 +1329,24 @@
"path": "src/plugins/files/public/components/file_picker/file_picker.tsx",
"deprecated": false,
"trackAdoption": false
+ },
+ {
+ "parentPluginId": "files",
+ "id": "def-public.Props.multiple",
+ "type": "CompoundType",
+ "tags": [
+ "default"
+ ],
+ "label": "multiple",
+ "description": [
+ "\nWhether you can select one or more files\n"
+ ],
+ "signature": [
+ "boolean | undefined"
+ ],
+ "path": "src/plugins/files/public/components/file_picker/file_picker.tsx",
+ "deprecated": false,
+ "trackAdoption": false
}
],
"initialIsOpen": false
diff --git a/api_docs/files.mdx b/api_docs/files.mdx
index e9d3976bbf623..3843c12d4136f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files']
---
import filesObj from './files.devdocs.json';
@@ -21,7 +21,7 @@ Contact [@elastic/kibana-app-services](https://github.com/orgs/elastic/teams/tea
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 275 | 0 | 19 | 3 |
+| 276 | 0 | 19 | 3 |
## Client
diff --git a/api_docs/fleet.devdocs.json b/api_docs/fleet.devdocs.json
index 9b000a45b2696..2feb3907e35dd 100644
--- a/api_docs/fleet.devdocs.json
+++ b/api_docs/fleet.devdocs.json
@@ -13780,6 +13780,20 @@
"path": "x-pack/plugins/fleet/common/types/models/epm.ts",
"deprecated": false,
"trackAdoption": false
+ },
+ {
+ "parentPluginId": "fleet",
+ "id": "def-common.RegistryElasticsearch.source_mode",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "source_mode",
+ "description": [],
+ "signature": [
+ "\"default\" | \"synthetic\" | undefined"
+ ],
+ "path": "x-pack/plugins/fleet/common/types/models/epm.ts",
+ "deprecated": false,
+ "trackAdoption": false
}
],
"initialIsOpen": false
diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx
index f30580dda5f04..6fc456035b9a3 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet']
---
import fleetObj from './fleet.devdocs.json';
@@ -21,7 +21,7 @@ Contact [Fleet](https://github.com/orgs/elastic/teams/fleet) for questions regar
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 1000 | 3 | 897 | 18 |
+| 1001 | 3 | 898 | 18 |
## Client
diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx
index 048aaec803587..64e25357c4231 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch']
---
import globalSearchObj from './global_search.devdocs.json';
diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx
index 2f9c1dfdac76b..ae8a5d824ef89 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding']
---
import guidedOnboardingObj from './guided_onboarding.devdocs.json';
diff --git a/api_docs/home.mdx b/api_docs/home.mdx
index a32112e8123c1..2f01a404aac13 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home']
---
import homeObj from './home.devdocs.json';
diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx
index 510ff24e2c251..60edf798cc446 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement']
---
import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json';
diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx
index 3bbdb688692ea..e320714989ef6 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement']
---
import indexManagementObj from './index_management.devdocs.json';
diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx
index e1c9ff267d7dd..31687ba20fa21 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra']
---
import infraObj from './infra.devdocs.json';
diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx
index b3d3c815e2d2d..9336a32be0598 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector']
---
import inspectorObj from './inspector.devdocs.json';
diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx
index 27942d7369d3d..629fa3d39a7fb 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup']
---
import interactiveSetupObj from './interactive_setup.devdocs.json';
diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx
index 4bfcff1578434..fb7203c81faa8 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace']
---
import kbnAceObj from './kbn_ace.devdocs.json';
diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx
index cefdbda3681fe..b68d2d21a3496 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components']
---
import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json';
diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx
index 41604e4bde28d..89e0b4725b53c 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils']
---
import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json';
diff --git a/api_docs/kbn_alerts.mdx b/api_docs/kbn_alerts.mdx
index d006f31f28b8f..15d7e647bf111 100644
--- a/api_docs/kbn_alerts.mdx
+++ b/api_docs/kbn_alerts.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts
title: "@kbn/alerts"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/alerts plugin
-date: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts']
---
import kbnAlertsObj from './kbn_alerts.devdocs.json';
diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx
index 94c015954b749..38a266e59cf94 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics']
---
import kbnAnalyticsObj from './kbn_analytics.devdocs.json';
diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx
index 7295871ca7197..ac32161c59fd1 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client']
---
import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
index b9071bf78dc00..325340598ba49 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser']
---
import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
index 6be0962a8bec1..ec055e27289d1 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common']
---
import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
index 2a18ed135769b..0ed7af3bbe2a6 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server']
---
import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx
index ef030cc0cf79a..f240f890ccdc1 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory']
---
import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx
index 03a74158fb62d..b03f239d4c7f9 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight']
---
import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json';
diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx
index ada09206af9f6..e3d4ba2fad3fc 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader']
---
import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json';
diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx
index 8290e7b16cae8..0f2760630787c 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace']
---
import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json';
diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx
index d36b1fd4b2a1c..e172eb68ba0d1 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils']
---
import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json';
diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx
index c7ce93dd0cf0c..9f070de5b32d5 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config']
---
import kbnAxeConfigObj from './kbn_axe_config.devdocs.json';
diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx
index ddd535d9e8c90..70d459d4a3229 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components']
---
import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json';
diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx
index 2cd4a2ad70d8b..9bac9d9cb8919 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons']
---
import kbnChartIconsObj from './kbn_chart_icons.devdocs.json';
diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx
index a083756345726..18c73cbe904b5 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core']
---
import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json';
diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx
index 0311d32eef9f4..38981eb15b391 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics']
---
import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json';
diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx
index 1ddbffaaf9256..28222594047b7 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter']
---
import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json';
diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx
index 14c9634cf1529..8cfe2f8b99aaf 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode']
---
import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json';
diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx
index 6559237d7c043..7b14a6c77e7c1 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring']
---
import kbnColoringObj from './kbn_coloring.devdocs.json';
diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx
index 41a9a67465b00..b20e2fdf6f0dd 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config']
---
import kbnConfigObj from './kbn_config.devdocs.json';
diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx
index f3e0fcd2bb6a6..bb650a3d83589 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks']
---
import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json';
diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx
index 4c5e16cc878b4..85d34b44c8d68 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema']
---
import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json';
diff --git a/api_docs/kbn_content_management_table_list.mdx b/api_docs/kbn_content_management_table_list.mdx
index 1f6a3bfaf876b..9a669546c3fb0 100644
--- a/api_docs/kbn_content_management_table_list.mdx
+++ b/api_docs/kbn_content_management_table_list.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list
title: "@kbn/content-management-table-list"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-table-list plugin
-date: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list']
---
import kbnContentManagementTableListObj from './kbn_content_management_table_list.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx
index 4c443f79b5200..aeaa4aa93cb6c 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser']
---
import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx
index 780e2e63973b1..f4d7180e92675 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal']
---
import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx
index 6c12d9f559765..366eb4a0efc7d 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks']
---
import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx
index 7994ddbe86ab0..f11f638fb4833 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server']
---
import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx
index 93c2233ce32a3..c3a05704928e2 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal']
---
import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx
index f5abc3b0f925b..d5dcd89817adc 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks']
---
import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx
index 623dfb256f7f6..bbb62d9cf8429 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser']
---
import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json';
diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx
index f6d9f4b8d08aa..85fa3e0d7f935 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal']
---
import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx
index 9e617b857cfe8..160327c3e75a0 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks']
---
import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx
index fb70ab512b203..5e3a390fb8ae9 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common']
---
import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json';
diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx
index 06c24e6dec2f3..2d6ffa13a4f6a 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal']
---
import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx
index 57cde218ed910..3ef896542209e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks']
---
import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx
index 2f9e033f81f35..76e75f50f34e1 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal']
---
import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx
index fd21d52c3f49f..b349246244e69 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks']
---
import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx
index 87dbae0e75558..a88467df074b6 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common']
---
import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json';
diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx
index a80a78f266cef..5df1006cd91c1 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal']
---
import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx
index 4c9a5171e53c5..9a8a251629944 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks']
---
import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx
index 872e7b659bcec..8dbd52acc2524 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks']
---
import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx
index a8c1a06c9e724..ab0ef9ae1a0c5 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common']
---
import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json';
diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx
index f243b980ec621..6d28bd7cf4028 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server']
---
import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json';
diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx
index 6828ca933412f..a24a759643bae 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks']
---
import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx
index ce7ffad8d42b2..f672a2ed5cf29 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser']
---
import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json';
diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx
index 333fe8565485e..8e410c374cd45 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks']
---
import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx
index ae2beb727c431..293788a5bc40d 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal']
---
import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx
index 0fd0d145f9bd0..0703652536749 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser']
---
import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx
index d39b2a261712c..10469e6c2cc5a 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal']
---
import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx
index b3fd6253f8010..f2fd26ce2a2a2 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks']
---
import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx
index d1cceba47468d..b61676bfa6372 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common']
---
import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx
index b4f8af3d056d0..0bc0005f52787 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server']
---
import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx
index cccd51bf32540..f08477e6c30fd 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal']
---
import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx
index 33c846e27475d..1b026808412fa 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks']
---
import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx
index 68f68551a9ba4..009a19ea44e56 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser']
---
import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json';
diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx
index 7c4df83bc1215..532516320594f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks']
---
import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx
index 0f6af09a74ca5..c81171e491934 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server']
---
import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json';
diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx
index 4f472412bdd8b..473fd5bdbd193 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks']
---
import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx
index 63744d087509d..b5275e8aa00fb 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal']
---
import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx
index d3a648b7fdfd9..33bd7088a4f99 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks']
---
import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx
index e746c5322c337..e212dbecd1747 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server']
---
import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx
index 92b2d6dde7365..0619ef91465ff 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal']
---
import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx
index 2c5f9df73db81..aae99cc209af1 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks']
---
import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx
index d905712e08c31..dda2348e09059 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal']
---
import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx
index 8f7ae5491b91d..d93d428bb6cd8 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks']
---
import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx
index d934b7bb79687..f6816a16cd2c0 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser']
---
import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx
index bf240bdd9f054..f27ba64cbd6e1 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal']
---
import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx
index d875d5253be7a..7484b7ada0521 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks']
---
import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx
index 7554063a4cb50..41ee6ef9680bf 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common']
---
import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx
index bb741053c2df8..f5665a2eb87e9 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server']
---
import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx
index ad67db44a5615..c66e9f6c4aa2c 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal']
---
import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx
index 50ee73e86694d..d4d3dce50c9aa 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks']
---
import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx
index 7cd7156000f04..b3d43a02ddb43 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser']
---
import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json';
diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx
index a38a0fce2de59..346c050ce131b 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks']
---
import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx
index 76a522d4eca03..adc6aec485fad 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser']
---
import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json';
diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx
index 9118df8ff644e..887b04436e344 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal']
---
import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx
index bab2376399243..a8ea881fe65d9 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks']
---
import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx
index a33ce776e8e5b..8eb238f135f8e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common']
---
import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json';
diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx
index bd055bed28bbc..8d66471bf2428 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks']
---
import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx
index 28fcd57a5f38d..df50f32cd64cd 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server']
---
import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json';
diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx
index 52ff60dfaddfc..d0a9c57a2f7f9 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server']
---
import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json';
diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx
index 003723baf0962..fcfe1776d0629 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal']
---
import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx
index 76944528962cf..b5982fe7e2fb5 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks']
---
import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx
index a072eca8454c9..651fa802b5f1b 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal']
---
import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx
index e00cb4d0c9e51..ce3c5fd03425b 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks']
---
import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx
index 42b0cb168a4bb..b40387f70004c 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server']
---
import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json';
diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx
index f3823bc677458..d4b8d224f4c70 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal']
---
import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx
index 25ee758ebf646..f475dd8c34066 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks']
---
import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx
index dfc344ca4f136..561f6c658c979 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser']
---
import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx
index a7dc446696dad..e62002bc377f7 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks']
---
import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx
index 0348097dd34a6..317d1f330d952 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server']
---
import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx
index 61b58a74d2b60..a4238639bbb67 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal']
---
import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx
index cb75ed42018f8..db5aca875202f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks']
---
import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_injected_metadata_browser.mdx b/api_docs/kbn_core_injected_metadata_browser.mdx
index 4bb70ca9d64a7..a31e12d7c934e 100644
--- a/api_docs/kbn_core_injected_metadata_browser.mdx
+++ b/api_docs/kbn_core_injected_metadata_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser
title: "@kbn/core-injected-metadata-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-injected-metadata-browser plugin
-date: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser']
---
import kbnCoreInjectedMetadataBrowserObj from './kbn_core_injected_metadata_browser.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 c4bd5559fb542..894a9385c3839 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks']
---
import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx
index a80e801e1c56a..9095becc0e879 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal']
---
import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx
index 8d633d69edbd8..de1f712ae8f1b 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks']
---
import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx
index d89918520e374..cafc6f20630e7 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser']
---
import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json';
diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx
index 0e264ea94fd62..2f7726ffc1bc9 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks']
---
import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx
index c718afd217eb5..31e9b24ead87d 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server']
---
import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json';
diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx
index ded04f346c0e6..99f55b5b93d0f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks']
---
import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx
index 4daa57807ebd0..142a90ab579bb 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks']
---
import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx
index 80fe581a042e1..663c608fac979 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal']
---
import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json';
diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx
index a1c07c85165bb..deb4fb1b4059f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server']
---
import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json';
diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx
index 01f15e5eaeb6a..94a15c91bf5e0 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal']
---
import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx
index c68b3be5767f0..5f689ce204902 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks']
---
import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx
index 2fdeaf591126d..fafc7916a9880 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal']
---
import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx
index 257f1a6d7b50a..be01e12a7db97 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks']
---
import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx
index cca5e84f387c1..3af95c647d79b 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server']
---
import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx
index f243656c5170c..6761e13376562 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal']
---
import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx
index ad61b8805ce20..d3877477dde44 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks']
---
import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx
index cc67c969aa74e..5b8ec23210d75 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser']
---
import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json';
diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx
index c70487b056f69..075191f0d1526 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server']
---
import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json';
diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx
index 6e977bfa546f4..cfe7b9124f84c 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal']
---
import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx
index eb1dbabe16886..cddfe3e1f18ad 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks']
---
import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx
index b36920c3a7653..bfcf953ccbb5a 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser']
---
import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json';
diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx
index 511d3b25e9197..8c4996dd77c7f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal']
---
import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx
index fba28978dd254..69677b4edf7e3 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks']
---
import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx
index 937c446f32083..4139544d0b0ef 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser']
---
import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json';
diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx
index 2ab8aeaaa4407..24d3119d0a89d 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal']
---
import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx
index 34f7e00350084..60a97e3ed4127 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks']
---
import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx
index aa6a513394639..13a5664d073c6 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser']
---
import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx
index 2e00eb9e6a013..b571ddf71ef6b 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks']
---
import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx
index 66fb1fcf765d3..c71e001357f75 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server']
---
import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx
index 9a89a05323a30..51990b39a6a99 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks']
---
import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx
index b9508fd323f05..4825a594e637b 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server']
---
import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json';
diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx
index 54d52da2cf241..7978c224019f0 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks']
---
import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx
index 485dfbf9ab419..ed0d1bc0e4260 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks']
---
import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx
index 0f27b3a4760df..e6c13e9a8f95d 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal']
---
import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx
index 51f8a59803f9e..f7ef09383fd1e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks']
---
import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx
index aa11edf4360a2..7a6bef562b961 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser']
---
import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx
index cef9bedd2cf94..39838c6c43e72 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server']
---
import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_api_server_internal.mdx b/api_docs/kbn_core_saved_objects_api_server_internal.mdx
index ac6cfd8104896..10385c3c18d2a 100644
--- a/api_docs/kbn_core_saved_objects_api_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_api_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-internal
title: "@kbn/core-saved-objects-api-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-server-internal plugin
-date: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-internal']
---
import kbnCoreSavedObjectsApiServerInternalObj from './kbn_core_saved_objects_api_server_internal.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 7e6eb3ec7e296..94a7930fec06b 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks']
---
import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx
index 03a440f60ec5c..d606aafa75e76 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal']
---
import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx
index 7028bf5e77a13..da6f0285c7bc7 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks']
---
import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx
index eed0d7d39f146..2a456892261ff 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser']
---
import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx
index 7d11724080b87..51e5f375ae791 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal']
---
import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx
index fca87cd64e0de..69a767792f76d 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks']
---
import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx
index 1a371683da5cc..f9cced1eadf4b 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common']
---
import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx
index 66b97c8b6fcac..9c9a9ccf2bb31 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal']
---
import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx
index f5f702644b6be..04fc476913733 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks']
---
import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx
index 456f52f1ccc56..5d6c32533ecbd 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal']
---
import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx
index 4dabda6f1bdfe..39d7c8c3e38f3 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks']
---
import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx
index 6ec1e83b817a8..59b04f730ab9b 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server']
---
import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx
index 914dc4459a0cd..1370568f1f7b2 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal']
---
import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx
index 2884262be26d7..d62a9b2621c27 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks']
---
import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx
index 6588a9fd252b6..ab50cc4a4ccb3 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server']
---
import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json';
diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx
index c9fb44d77cddc..a6ea3b9a0d467 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common']
---
import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json';
diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx
index 2fddd2801e3f3..5dcdc1614eced 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal']
---
import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json';
diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx
index f89bc8d977a58..532bf26fdeb13 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server']
---
import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json';
diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx
index 3cb0b73fa179d..ccee2c8aae6c6 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal']
---
import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx
index 1fb9f5e772953..d5acf9332bbb3 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks']
---
import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx
index 58a0e75f8d109..4430e455c62db 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters']
---
import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx
index 6c319eeb2a8b0..5d6f3776a5524 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser']
---
import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx
index bde5ce63233e9..dd1b669134e62 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer']
---
import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx
index 187f1a45dfd8e..4885889e561e1 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils']
---
import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json';
diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx
index 9878491edc07b..023aadb814a44 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser']
---
import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json';
diff --git a/api_docs/kbn_core_theme_browser_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx
index 908d5228ca595..13e0b2fc792f4 100644
--- a/api_docs/kbn_core_theme_browser_internal.mdx
+++ b/api_docs/kbn_core_theme_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal
title: "@kbn/core-theme-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-theme-browser-internal plugin
-date: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal']
---
import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx
index 0ef580f50db61..06a2332a5d713 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks']
---
import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx
index 9f8c994b5290d..ea4655f88e80c 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser']
---
import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx
index c0abf7f7707b0..6e033dd53a2f4 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal']
---
import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx
index 752659a90ebd5..a36d2dbf5a0c7 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks']
---
import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx
index bcaa05f381695..5138d73d828ea 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common']
---
import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx
index 82dbb79cc0e85..e48cd79faa840 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server']
---
import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx
index 0e8a45969c6dc..619bd7390d9b9 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal']
---
import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx
index 403a2f8e52bcc..62380ad814790 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks']
---
import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx
index f5bb8dd8510bd..78de2c22b489e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server']
---
import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json';
diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx
index 6c631a99e4bd0..923ad2c17a4e7 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal']
---
import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx
index aeaf777a777d3..81a3ebcfd017a 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks']
---
import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx
index 2617374bccad3..029b6cea15b4c 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto']
---
import kbnCryptoObj from './kbn_crypto.devdocs.json';
diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx
index fa6b09adc14b7..b19cf2b65f34d 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser']
---
import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json';
diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx
index 564b5e8ed82f5..51f9fc42dbcdd 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath']
---
import kbnDatemathObj from './kbn_datemath.devdocs.json';
diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx
index 932b13eea4ea9..8bc9321ade81b 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors']
---
import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json';
diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx
index 4f1735d40ab4e..389629bd44eb9 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner']
---
import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json';
diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx
index 175292a832693..34bf867a7c774 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner']
---
import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json';
diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx
index ebc21ca0d3547..e9bfdac8df31f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils']
---
import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json';
diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx
index 7da2cb5f75081..51bcfae891fee 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links']
---
import kbnDocLinksObj from './kbn_doc_links.devdocs.json';
diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx
index 94d7c9f7536d7..2742de20660a7 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils']
---
import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json';
diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx
index 2ef5daaf2f4d0..2d907a8db72e0 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools']
---
import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json';
diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx
index 8fcc7db656094..9858f457eda0e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es']
---
import kbnEsObj from './kbn_es.devdocs.json';
diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx
index eccdea020c017..8bc82110d3d7e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver']
---
import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json';
diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx
index e941bf44f19c4..f96d717e3c166 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors']
---
import kbnEsErrorsObj from './kbn_es_errors.devdocs.json';
diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx
index 5743a11f21ddf..1bff0299c6a58 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query']
---
import kbnEsQueryObj from './kbn_es_query.devdocs.json';
diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx
index 3a5d9b06d5ad7..d18029b0d2f51 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types']
---
import kbnEsTypesObj from './kbn_es_types.devdocs.json';
diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx
index 1bdc8b6a3e58c..9283dfdd4b038 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports']
---
import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json';
diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx
index 9ffc3daf34dd6..92ecfdf507070 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types']
---
import kbnFieldTypesObj from './kbn_field_types.devdocs.json';
diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx
index d861898bc30ef..e6ad954273b1d 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules']
---
import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json';
diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx
index 92296916487ac..08111dcfb9986 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services']
---
import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json';
diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx
index 6e98224c55442..42ba848e0f9c5 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate']
---
import kbnGenerateObj from './kbn_generate.devdocs.json';
diff --git a/api_docs/kbn_get_repo_files.mdx b/api_docs/kbn_get_repo_files.mdx
index ce429eb8b64ce..6de71207a8992 100644
--- a/api_docs/kbn_get_repo_files.mdx
+++ b/api_docs/kbn_get_repo_files.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-get-repo-files
title: "@kbn/get-repo-files"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/get-repo-files plugin
-date: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/get-repo-files']
---
import kbnGetRepoFilesObj from './kbn_get_repo_files.devdocs.json';
diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx
index 0aa31bf438def..56165175704ac 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding']
---
import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json';
diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx
index dc05bc2ced4b5..faa3a8ba7cbe8 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars']
---
import kbnHandlebarsObj from './kbn_handlebars.devdocs.json';
diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx
index 3df3e8485fce9..2e9959306d2a9 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks']
---
import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json';
diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx
index 12024c463b405..0480d63b81ef8 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card']
---
import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json';
diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx
index 6d0bb66f99cd9..48a30e95242a2 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab']
---
import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json';
diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx
index f249672864a0e..0d35a6f799975 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n']
---
import kbnI18nObj from './kbn_i18n.devdocs.json';
diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx
index ea94ff42d9076..4bdf16a010603 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react']
---
import kbnI18nReactObj from './kbn_i18n_react.devdocs.json';
diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx
index 90fba8660ebdf..5b56f2de74601 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver']
---
import kbnImportResolverObj from './kbn_import_resolver.devdocs.json';
diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx
index e3c797fbab46b..9427c5f7647ec 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter']
---
import kbnInterpreterObj from './kbn_interpreter.devdocs.json';
diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx
index 39b1fc5311cc3..80bed28bf863b 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils']
---
import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json';
diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx
index 065823d9e9644..063e75f99c727 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers']
---
import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json';
diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx
index 09e3d0971ab93..4bcc084f61e7e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys']
---
import kbnJourneysObj from './kbn_journeys.devdocs.json';
diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx
index 57f9fc396e597..dd02776975efb 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema']
---
import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json';
diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx
index 5d3db245585c2..53178b9eb11c4 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover']
---
import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json';
diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx
index 23c6c1cd2263c..0dd9a1ce39d08 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging']
---
import kbnLoggingObj from './kbn_logging.devdocs.json';
diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx
index 4f5150c82ef25..32c30478d1658 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks']
---
import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json';
diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx
index 9006c6eb7e893..6c94f20ac5473 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config']
---
import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json';
diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx
index f62ce92ea9ca7..a4421418dc22f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl']
---
import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json';
diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx
index 07dc1327976ee..7ec4e30da83ad 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils']
---
import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx
index 47431b91ad968..5e658542fe081 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object']
---
import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json';
diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx
index e7cfafa592ae0..932c3bdaec1c4 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash']
---
import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json';
diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx
index 09eb21cde5b97..afcd51b074193 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco']
---
import kbnMonacoObj from './kbn_monaco.devdocs.json';
diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx
index afd7005408cf8..08c25292886a9 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer']
---
import kbnOptimizerObj from './kbn_optimizer.devdocs.json';
diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx
index 546be539cfa0f..f29d7b1eca0db 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers']
---
import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json';
diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx
index 6f75eb70e0277..402c9d0a958be 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types']
---
import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json';
diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx
index b7b19661b2cf9..e8ed20274ef11 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor']
---
import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json';
diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx
index a8676e99d4294..7275cba70f24f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator']
---
import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json';
diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx
index 09677f9c6b65d..9b9b4ca1f9a4e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers']
---
import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json';
diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx
index 4e080c19295dc..3f0ab220126a7 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field']
---
import kbnReactFieldObj from './kbn_react_field.devdocs.json';
diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx
index d01f493861762..9341eff6ea912 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier']
---
import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json';
diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx
index e6b923f480260..eedea9c6404a2 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils']
---
import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx
index 793a249d94c81..112cec83335a9 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete']
---
import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx
index 4d65817a6674a..ac0977ee48be3 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils']
---
import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx
index f10cbd6b5da35..efadd56695fe0 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components']
---
import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx
index 6dc50be6e8fb9..fb78d31b3c675 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils']
---
import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx
index 0623581817fbe..c74f638ccb9af 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types']
---
import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx
index 791921a3b2fa3..98f5f6faa9653 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types']
---
import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx
index 0bd93ca61eac2..9199c484b35f8 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types']
---
import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx
index f1247503fc91e..7718129f3884e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils']
---
import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx
index 5b7acd2f00534..7cf8c073f6650 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api']
---
import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx
index 4bfb0dfd8093f..1a6633eb18015 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants']
---
import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx
index 1c4f5e60fa838..25d12cea27ad2 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks']
---
import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx
index aca2121cc54ee..000c155a3c917 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils']
---
import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx
index 1ac856e5e506b..a5d39a95a0a05 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules']
---
import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx
index fa290646271f5..5447f4359262e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid']
---
import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx
index 9ee1289f2552a..60b71a497165c 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils']
---
import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json';
diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx
index 44222c6294693..2a6683c3deeae 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools']
---
import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json';
diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx
index ff6532bbdc9e0..e7168e4341f78 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository']
---
import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json';
diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx
index a1a24268fc15f..1cc302abf32a3 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: 2022-11-03
+date: 2022-11-04
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 ef6911aec3b73..470a14f2a9eae 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution']
---
import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx
index 905ed473f7c98..9c899661f1e83 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components']
---
import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx
index 60ab35bff1665..49eb0f4b54440 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen']
---
import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx
index 97d6137bca9ed..b447edc179446 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks']
---
import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx
index f19aa0d197cdc..4187890ebea42 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar']
---
import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx
index 007de1e1fd8b8..2528aaa0483b1 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data']
---
import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx
index 25b1b57d0fd9c..9761cee4caa2d 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks']
---
import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx
index 70d9b703add44..7301c277be2f2 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app']
---
import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx
index 69926b3eae2e3..828fe690e0f9a 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks']
---
import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx
index 1fa7b11407c37..c5e66a9b54c49 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown']
---
import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx
index 08c8baa9c6c84..c219c206979fd 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks']
---
import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx
index 7c94ef35c4278..2274c9565bb78 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data']
---
import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx
index 8523c994a8d49..ac3ba812dd1e4 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks']
---
import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx
index f2305434606e4..d82cb4d0f2957 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data']
---
import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx
index a3b9cc9894d63..9f850e4e6ad41 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks']
---
import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx
index 357a198f95c61..10553bceee471 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template']
---
import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx
index bb170fe07ac4c..2dc6ce10bcaf8 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks']
---
import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx
index b885897726fa6..b21a0649ca139 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data']
---
import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx
index f07e4efa4b812..7815666829e59 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config']
---
import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx
index de2e1fa97b4fd..cf2bc05d67469 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks']
---
import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx
index 248a97c7d1c81..4b49f9b3e11fd 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks']
---
import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx
index 825eee67874ed..d3b992d5bcd8e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav']
---
import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx
index 90e4d90459a76..e07da5cc2d9d9 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views']
---
import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx
index a681271b2c435..226a58c0aaa8f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks']
---
import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx
index 97116d112b55a..864eee155833c 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router']
---
import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx
index b2b19a1caebfa..d4b343fe1fa0a 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks']
---
import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx
index a509c914f3353..898856285f77d 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config']
---
import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx
index 8be42b6dd64b4..74866474a3c71 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock']
---
import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx
index 97eaab20edc04..4e6ff7fc7c850 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility']
---
import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json';
diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx
index f5975faa298a3..fa8650096202a 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log']
---
import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json';
diff --git a/api_docs/kbn_sort_package_json.mdx b/api_docs/kbn_sort_package_json.mdx
index c75725f555600..d1e4f20ee5f2f 100644
--- a/api_docs/kbn_sort_package_json.mdx
+++ b/api_docs/kbn_sort_package_json.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-package-json
title: "@kbn/sort-package-json"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/sort-package-json plugin
-date: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-package-json']
---
import kbnSortPackageJsonObj from './kbn_sort_package_json.devdocs.json';
diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx
index 7b382d339f228..7b45a362084e2 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std']
---
import kbnStdObj from './kbn_std.devdocs.json';
diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx
index 24a000f94beb5..70d789c67d885 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers']
---
import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json';
diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx
index fad4ed3b27081..0a6efa67f2837 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: 2022-11-03
+date: 2022-11-04
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 0e363e370570f..e971f2d17208c 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools']
---
import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json';
diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx
index c5cbe8e6ba447..68d0ba52e9823 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test']
---
import kbnTestObj from './kbn_test.devdocs.json';
diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx
index 470e108023f3e..7c87588c287d3 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers']
---
import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json';
diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx
index 9f49f13e4e438..42cf10ecaafca 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector']
---
import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json';
diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx
index dbd461a7f2973..48f1d165cd73c 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log']
---
import kbnToolingLogObj from './kbn_tooling_log.devdocs.json';
diff --git a/api_docs/kbn_type_summarizer.mdx b/api_docs/kbn_type_summarizer.mdx
index 7c099ced6fbd1..75cd1b7819eab 100644
--- a/api_docs/kbn_type_summarizer.mdx
+++ b/api_docs/kbn_type_summarizer.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-type-summarizer
title: "@kbn/type-summarizer"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/type-summarizer plugin
-date: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/type-summarizer']
---
import kbnTypeSummarizerObj from './kbn_type_summarizer.devdocs.json';
diff --git a/api_docs/kbn_type_summarizer_core.mdx b/api_docs/kbn_type_summarizer_core.mdx
index 5ade197f7c552..3bfc170fb8c87 100644
--- a/api_docs/kbn_type_summarizer_core.mdx
+++ b/api_docs/kbn_type_summarizer_core.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-type-summarizer-core
title: "@kbn/type-summarizer-core"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/type-summarizer-core plugin
-date: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/type-summarizer-core']
---
import kbnTypeSummarizerCoreObj from './kbn_type_summarizer_core.devdocs.json';
diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx
index c2d182c4e1952..671755c80ea4d 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config']
---
import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json';
diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx
index cbffe401bb099..139e07985d675 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src']
---
import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json';
diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx
index 78eebf1992c48..7a58697489db9 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme']
---
import kbnUiThemeObj from './kbn_ui_theme.devdocs.json';
diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx
index 577466bf033a6..727447a9c5ddc 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components']
---
import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json';
diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx
index 2fb001354e0c0..ff9958a2cce12 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types']
---
import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json';
diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx
index 698d5fc4f897b..995f198c7e0e6 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest']
---
import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json';
diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx
index dfdf80678aa9c..ac1156d4b2645 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils']
---
import kbnUtilsObj from './kbn_utils.devdocs.json';
diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx
index 61ec7ae48f9e3..cad5009c10027 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator']
---
import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json';
diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx
index 710079b304ac2..9d30d3b8cdf5c 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview']
---
import kibanaOverviewObj from './kibana_overview.devdocs.json';
diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx
index 41de441b14cb2..e957e84fc1155 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact']
---
import kibanaReactObj from './kibana_react.devdocs.json';
diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx
index a8bcbbe417a1f..e1a8d4f7ff253 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils']
---
import kibanaUtilsObj from './kibana_utils.devdocs.json';
diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx
index 6d912f3dd27d3..5fae2e27224a6 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity']
---
import kubernetesSecurityObj from './kubernetes_security.devdocs.json';
diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx
index dcf014e8c95f1..7f6625427ca18 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens']
---
import lensObj from './lens.devdocs.json';
diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx
index b8dddff891acc..6ee555a03335c 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard']
---
import licenseApiGuardObj from './license_api_guard.devdocs.json';
diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx
index 6c46e65dbdda0..52237d3e8e942 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: 2022-11-03
+date: 2022-11-04
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 13842df636289..f7d88b5e77eb6 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: 2022-11-03
+date: 2022-11-04
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 500276696f06c..011c07bd2f2ec 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists']
---
import listsObj from './lists.devdocs.json';
diff --git a/api_docs/management.mdx b/api_docs/management.mdx
index 78bd8739c2c11..961e47eaa4622 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management']
---
import managementObj from './management.devdocs.json';
diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx
index 54b3ff5152633..3cef004e7a063 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps']
---
import mapsObj from './maps.devdocs.json';
diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx
index 74fd473915c49..b7f8593146200 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: 2022-11-03
+date: 2022-11-04
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 5507b92045e15..71c2c88639b17 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml']
---
import mlObj from './ml.devdocs.json';
diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx
index 784d80d7b1d19..65b7983715e27 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring']
---
import monitoringObj from './monitoring.devdocs.json';
diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx
index 8e68980d1a6fb..af2b90f6ae2e1 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection']
---
import monitoringCollectionObj from './monitoring_collection.devdocs.json';
diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx
index ceeada3f14bcf..a71fe908dea03 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation']
---
import navigationObj from './navigation.devdocs.json';
diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx
index 1e216762b0084..e4e2db741c1dd 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed']
---
import newsfeedObj from './newsfeed.devdocs.json';
diff --git a/api_docs/notifications.devdocs.json b/api_docs/notifications.devdocs.json
new file mode 100644
index 0000000000000..f7508b16dcdba
--- /dev/null
+++ b/api_docs/notifications.devdocs.json
@@ -0,0 +1,59 @@
+{
+ "id": "notifications",
+ "client": {
+ "classes": [],
+ "functions": [],
+ "interfaces": [],
+ "enums": [],
+ "misc": [],
+ "objects": []
+ },
+ "server": {
+ "classes": [],
+ "functions": [],
+ "interfaces": [],
+ "enums": [],
+ "misc": [],
+ "objects": [],
+ "start": {
+ "parentPluginId": "notifications",
+ "id": "def-server.NotificationsPluginStart",
+ "type": "Type",
+ "tags": [],
+ "label": "NotificationsPluginStart",
+ "description": [],
+ "signature": [
+ "EmailServiceStart"
+ ],
+ "path": "x-pack/plugins/notifications/server/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "lifecycle": "start",
+ "initialIsOpen": true
+ }
+ },
+ "common": {
+ "classes": [],
+ "functions": [],
+ "interfaces": [],
+ "enums": [],
+ "misc": [
+ {
+ "parentPluginId": "notifications",
+ "id": "def-common.PLUGIN_ID",
+ "type": "string",
+ "tags": [],
+ "label": "PLUGIN_ID",
+ "description": [],
+ "signature": [
+ "\"notifications\""
+ ],
+ "path": "x-pack/plugins/notifications/common/index.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ }
+ ],
+ "objects": []
+ }
+}
\ No newline at end of file
diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx
new file mode 100644
index 0000000000000..91d0c2b7b83e3
--- /dev/null
+++ b/api_docs/notifications.mdx
@@ -0,0 +1,35 @@
+---
+####
+#### 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: kibNotificationsPluginApi
+slug: /kibana-dev-docs/api/notifications
+title: "notifications"
+image: https://source.unsplash.com/400x175/?github
+description: API docs for the notifications plugin
+date: 2022-11-04
+tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications']
+---
+import notificationsObj from './notifications.devdocs.json';
+
+
+
+Contact [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) for questions regarding this plugin.
+
+**Code health stats**
+
+| Public API count | Any count | Items lacking comments | Missing exports |
+|-------------------|-----------|------------------------|-----------------|
+| 2 | 0 | 2 | 1 |
+
+## Server
+
+### Start
+
+
+## Common
+
+### Consts, variables and types
+
+
diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx
index b75b7d428fbec..485dc98f067cc 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability']
---
import observabilityObj from './observability.devdocs.json';
diff --git a/api_docs/osquery.devdocs.json b/api_docs/osquery.devdocs.json
index 635153c4153e9..2b441fc69b891 100644
--- a/api_docs/osquery.devdocs.json
+++ b/api_docs/osquery.devdocs.json
@@ -42,7 +42,9 @@
"signature": [
"((props: ",
"OsqueryActionProps",
- ") => JSX.Element) | undefined"
+ " & { ecsData?: ",
+ "AlertEcsData",
+ " | undefined; }) => JSX.Element) | undefined"
],
"path": "x-pack/plugins/osquery/public/types.ts",
"deprecated": false,
diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx
index b30a8f54cd56f..cf6bbb81c6163 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery']
---
import osqueryObj from './osquery.devdocs.json';
@@ -21,7 +21,7 @@ Contact [Security asset management](https://github.com/orgs/elastic/teams/securi
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 21 | 0 | 21 | 3 |
+| 21 | 0 | 21 | 4 |
## Client
diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx
index ac3b928e4a481..af68a3b19f4fe 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: 2022-11-03
+date: 2022-11-04
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 |
|--------------|----------|------------------------|
-| 507 | 425 | 38 |
+| 508 | 426 | 38 |
### Public API health stats
| API Count | Any Count | Missing comments | Missing exports |
|--------------|----------|-----------------|--------|
-| 33241 | 514 | 23572 | 1102 |
+| 33253 | 515 | 23583 | 1105 |
## Plugin Directory
@@ -30,7 +30,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 225 | 8 | 220 | 24 |
| | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 36 | 1 | 32 | 2 |
| | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 9 | 0 | 0 | 2 |
-| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 383 | 0 | 374 | 26 |
+| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 384 | 0 | 375 | 26 |
| | [APM UI](https://github.com/orgs/elastic/teams/apm-ui) | The user interface for Elastic APM | 41 | 0 | 41 | 58 |
| | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 9 | 0 | 9 | 0 |
| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Considering using bfetch capabilities when fetching large amounts of data. This services supports batching HTTP requests and streaming responses back. | 81 | 1 | 72 | 2 |
@@ -73,19 +73,19 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'image' function and renderer to expressions | 26 | 0 | 26 | 0 |
| | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | Adds a `metric` renderer and function to the expression plugin. The renderer will display the `legacy metric` chart. | 51 | 0 | 51 | 2 |
| | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'metric' function and renderer to expressions | 32 | 0 | 27 | 0 |
-| | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | Adds a `metric` renderer and function to the expression plugin. The renderer will display the `metric` chart. | 62 | 0 | 62 | 1 |
-| | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | Expression Partition Visualization plugin adds a `partitionVis` renderer and `pieVis`, `mosaicVis`, `treemapVis`, `waffleVis` functions to the expression plugin. The renderer will display the `pie`, `waffle`, `treemap` and `mosaic` charts. | 70 | 0 | 70 | 2 |
+| | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | Adds a `metric` renderer and function to the expression plugin. The renderer will display the `metric` chart. | 63 | 0 | 63 | 2 |
+| | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | Expression Partition Visualization plugin adds a `partitionVis` renderer and `pieVis`, `mosaicVis`, `treemapVis`, `waffleVis` functions to the expression plugin. The renderer will display the `pie`, `waffle`, `treemap` and `mosaic` charts. | 71 | 0 | 71 | 2 |
| | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'repeatImage' function and renderer to expressions | 32 | 0 | 32 | 0 |
| | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'revealImage' function and renderer to expressions | 14 | 0 | 14 | 3 |
| | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'shape' function and renderer to expressions | 148 | 0 | 146 | 0 |
| | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | Expression Tagcloud plugin adds a `tagcloud` renderer and function to the expression plugin. The renderer will display the `Wordcloud` chart. | 7 | 0 | 7 | 0 |
| | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | Expression XY plugin adds a `xy` renderer and function to the expression plugin. The renderer will display the `xy` chart. | 159 | 0 | 149 | 9 |
-| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Adds expression runtime to Kibana | 2191 | 73 | 1734 | 5 |
+| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Adds expression runtime to Kibana | 2196 | 74 | 1739 | 5 |
| | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 227 | 0 | 96 | 2 |
| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Index pattern fields and ambiguous values formatters | 288 | 26 | 249 | 3 |
| | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 62 | 0 | 62 | 2 |
-| | [@elastic/kibana-app-services](https://github.com/orgs/elastic/teams/team:AppServicesUx) | File upload, download, sharing, and serving over HTTP implementation in Kibana. | 275 | 0 | 19 | 3 |
-| | [Fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1000 | 3 | 897 | 18 |
+| | [@elastic/kibana-app-services](https://github.com/orgs/elastic/teams/team:AppServicesUx) | File upload, download, sharing, and serving over HTTP implementation in Kibana. | 276 | 0 | 19 | 3 |
+| | [Fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1001 | 3 | 898 | 18 |
| | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 68 | 0 | 14 | 5 |
| globalSearchBar | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 |
| globalSearchProviders | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 |
@@ -119,8 +119,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [Stack Monitoring](https://github.com/orgs/elastic/teams/stack-monitoring-ui) | - | 9 | 0 | 9 | 0 |
| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | - | 34 | 0 | 34 | 2 |
| | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 17 | 0 | 17 | 0 |
+| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | - | 2 | 0 | 2 | 1 |
| | [Observability UI](https://github.com/orgs/elastic/teams/observability-ui) | - | 556 | 40 | 553 | 31 |
-| | [Security asset management](https://github.com/orgs/elastic/teams/security-asset-management) | - | 21 | 0 | 21 | 3 |
+| | [Security asset management](https://github.com/orgs/elastic/teams/security-asset-management) | - | 21 | 0 | 21 | 4 |
| painlessLab | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 0 | 0 | 0 | 0 |
| | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Presentation Utility Plugin is a set of common, shared components and toolkits for solutions within the Presentation space, (e.g. Dashboards, Canvas). | 243 | 8 | 187 | 12 |
| | [profiling](https://github.com/orgs/elastic/teams/profiling-ui) | - | 14 | 2 | 14 | 0 |
diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx
index a98f465692920..f7accac2d65c0 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil']
---
import presentationUtilObj from './presentation_util.devdocs.json';
diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx
index d4d668ead8192..235e1d82f2f32 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: 2022-11-03
+date: 2022-11-04
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 ede1b6feb6e18..0f8f8acc8a8bd 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters']
---
import remoteClustersObj from './remote_clusters.devdocs.json';
diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx
index 9495dcca0124f..cf058a5b0072b 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting']
---
import reportingObj from './reporting.devdocs.json';
diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx
index 110d44a51ef75..05b079b13b255 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup']
---
import rollupObj from './rollup.devdocs.json';
diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx
index a1660aa9abe9e..e563e3f6eb9e6 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry']
---
import ruleRegistryObj from './rule_registry.devdocs.json';
diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx
index dccebb4795730..8913498cdae2b 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields']
---
import runtimeFieldsObj from './runtime_fields.devdocs.json';
diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx
index 8c6738ee3c7da..8dc7faff26225 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects']
---
import savedObjectsObj from './saved_objects.devdocs.json';
diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx
index 058858737eee7..43722301fa8cd 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder']
---
import savedObjectsFinderObj from './saved_objects_finder.devdocs.json';
diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx
index 12e1390ec718a..a2059e1decd48 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement']
---
import savedObjectsManagementObj from './saved_objects_management.devdocs.json';
diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx
index b7c52fcbfae39..abbda4fe4183d 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging']
---
import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json';
diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx
index d6dbfe2f6f7a6..613dfb32911c6 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss']
---
import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json';
diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx
index 6d2b4637af95b..70710966c4e18 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch']
---
import savedSearchObj from './saved_search.devdocs.json';
diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx
index f7c4ca4218cfc..8c2e6709336cd 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode']
---
import screenshotModeObj from './screenshot_mode.devdocs.json';
diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx
index 56ec697de0c72..a6893ea5bd4d3 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting']
---
import screenshottingObj from './screenshotting.devdocs.json';
diff --git a/api_docs/security.mdx b/api_docs/security.mdx
index 09be20c329d7d..dc9d350bb721a 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security']
---
import securityObj from './security.devdocs.json';
diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx
index 1d97d865a33e6..fca79f7451d2d 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution']
---
import securitySolutionObj from './security_solution.devdocs.json';
diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx
index 6b8539eca6d44..b6222fcad49e7 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView']
---
import sessionViewObj from './session_view.devdocs.json';
diff --git a/api_docs/share.mdx b/api_docs/share.mdx
index b2b08a6ea0b29..ad86cfd78a34f 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share']
---
import shareObj from './share.devdocs.json';
diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx
index e792894a664e3..5ce804043e037 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore']
---
import snapshotRestoreObj from './snapshot_restore.devdocs.json';
diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx
index 197746b59628d..a1137bd6123e2 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces']
---
import spacesObj from './spaces.devdocs.json';
diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx
index db8248b4cbf7b..b8c38cb7f3ac2 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts']
---
import stackAlertsObj from './stack_alerts.devdocs.json';
diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx
index d108918642497..9fbdfa4d4f688 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: 2022-11-03
+date: 2022-11-04
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 a1c53f2292eac..6eb6e15a37f39 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager']
---
import taskManagerObj from './task_manager.devdocs.json';
diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx
index a4376a1f864a9..9b0e1c55aec49 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry']
---
import telemetryObj from './telemetry.devdocs.json';
diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx
index 62f1c72d7055c..0baf2016d4bae 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager']
---
import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json';
diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx
index a8eb63367994e..1d30642a5cdf5 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack']
---
import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json';
diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx
index 9a9158c4cdccc..7efd884126fe5 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection']
---
import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json';
diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx
index 4dd6d24e1589d..187d403ca3b0b 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence']
---
import threatIntelligenceObj from './threat_intelligence.devdocs.json';
diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx
index e41d21340b255..58a2354c86333 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines']
---
import timelinesObj from './timelines.devdocs.json';
diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx
index 2a00d9e90f08d..76a13137515b8 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: 2022-11-03
+date: 2022-11-04
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 e2dd6b3aeda72..012ebfab0b991 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: 2022-11-03
+date: 2022-11-04
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 700d352d35d3a..8cc97cdd36e82 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions']
---
import uiActionsObj from './ui_actions.devdocs.json';
diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx
index 5bdb0e0ad5251..6871b38a55d23 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced']
---
import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json';
diff --git a/api_docs/unified_field_list.mdx b/api_docs/unified_field_list.mdx
index 6a505b8b7390d..b6e2a92bfd494 100644
--- a/api_docs/unified_field_list.mdx
+++ b/api_docs/unified_field_list.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedFieldList
title: "unifiedFieldList"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedFieldList plugin
-date: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedFieldList']
---
import unifiedFieldListObj from './unified_field_list.devdocs.json';
diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx
index 45df0fff8b396..2f72f8fa10dbe 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram']
---
import unifiedHistogramObj from './unified_histogram.devdocs.json';
diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx
index a66f0aa97a7e0..dddb414e475a9 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch']
---
import unifiedSearchObj from './unified_search.devdocs.json';
diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx
index 82e5e71f4aab0..c8211171d6c84 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete']
---
import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json';
diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx
index 6a42326b36507..aca6a51537862 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding']
---
import urlForwardingObj from './url_forwarding.devdocs.json';
diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx
index c2d61e75f8b37..8622066fd2662 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection']
---
import usageCollectionObj from './usage_collection.devdocs.json';
diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx
index 3e687d886a017..f50a0dc12c7db 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux']
---
import uxObj from './ux.devdocs.json';
diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx
index a84e314d48ed3..8f64ae0ff9a39 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor']
---
import visDefaultEditorObj from './vis_default_editor.devdocs.json';
diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx
index 9219c4f9a3f09..0960b60a539d0 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge']
---
import visTypeGaugeObj from './vis_type_gauge.devdocs.json';
diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx
index 84d6f3b8b8bff..cbca7e52fa5bd 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap']
---
import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json';
diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx
index dc4eb99cbdce1..d2e5b5ca3e287 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie']
---
import visTypePieObj from './vis_type_pie.devdocs.json';
diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx
index 67eaa3732a954..fbd9ee0072abb 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable']
---
import visTypeTableObj from './vis_type_table.devdocs.json';
diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx
index 5f26ede150ecd..6155c8e51027e 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion']
---
import visTypeTimelionObj from './vis_type_timelion.devdocs.json';
diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx
index f1a6f30574612..2ac66a942b436 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries']
---
import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json';
diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx
index faab1f8013825..8cb417e14e9fa 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega']
---
import visTypeVegaObj from './vis_type_vega.devdocs.json';
diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx
index 72bcc30d618a1..d9b6fface318a 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib']
---
import visTypeVislibObj from './vis_type_vislib.devdocs.json';
diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx
index b6533d6e425d6..8c5c6fa6e7d30 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy']
---
import visTypeXyObj from './vis_type_xy.devdocs.json';
diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx
index 8fcde27cb1605..7e5bf18aa19e0 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: 2022-11-03
+date: 2022-11-04
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations']
---
import visualizationsObj from './visualizations.devdocs.json';
From f43da91786fc1b96804daf447e98712208a14736 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?=
Date: Fri, 4 Nov 2022 09:22:01 +0100
Subject: [PATCH 05/31] [UsageCollection] Allow `pass_through` on
`Record` types (#144571)
---
.../mock_schema_with_descriptions.json | 6 +++++-
.../parsed_working_collector_with_description.ts | 8 ++++++++
.../src/tools/manage_schema.ts | 10 +++++++++-
.../src/tools/serializer.test.ts | 9 +++++++++
.../kbn-telemetry-tools/src/tools/serializer.ts | 11 +++++++++++
src/fixtures/telemetry_collectors/constants.ts | 1 +
.../working_collector_with_description.ts | 8 ++++++++
.../usage_collection/server/collector/types.ts | 16 +++++++++++++---
.../server/usage/register_usage_collector.ts | 8 +++-----
.../schema/xpack_plugins.json | 10 +++-------
10 files changed, 70 insertions(+), 17 deletions(-)
diff --git a/packages/kbn-telemetry-tools/src/tools/__fixture__/mock_schema_with_descriptions.json b/packages/kbn-telemetry-tools/src/tools/__fixture__/mock_schema_with_descriptions.json
index 77321327b3894..c7750f3fd0c39 100644
--- a/packages/kbn-telemetry-tools/src/tools/__fixture__/mock_schema_with_descriptions.json
+++ b/packages/kbn-telemetry-tools/src/tools/__fixture__/mock_schema_with_descriptions.json
@@ -50,7 +50,11 @@
}
}
},
- "my_str_array": { "type": "array", "items": { "type": "keyword" } }
+ "my_str_array": { "type": "array", "items": { "type": "keyword" } },
+ "my_pass_through": {
+ "type": "pass_through",
+ "_meta": { "description": "Don't know what goes here. Simply passing it through."}
+ }
}
}
}
diff --git a/packages/kbn-telemetry-tools/src/tools/__fixture__/parsed_working_collector_with_description.ts b/packages/kbn-telemetry-tools/src/tools/__fixture__/parsed_working_collector_with_description.ts
index a2f9379eec7ac..840cd7bb9595b 100644
--- a/packages/kbn-telemetry-tools/src/tools/__fixture__/parsed_working_collector_with_description.ts
+++ b/packages/kbn-telemetry-tools/src/tools/__fixture__/parsed_working_collector_with_description.ts
@@ -56,6 +56,10 @@ export const parsedCollectorWithDescription: ParsedUsageCollection = [
},
},
my_str_array: { type: 'array', items: { type: 'keyword' } },
+ my_pass_through: {
+ type: 'pass_through',
+ _meta: { description: "Don't know what goes here. Simply passing it through." },
+ },
},
},
fetch: {
@@ -103,6 +107,10 @@ export const parsedCollectorWithDescription: ParsedUsageCollection = [
type: 'StringKeyword',
},
},
+ my_pass_through: {
+ kind: SyntaxKind.UnknownKeyword,
+ type: 'UnknownKeyword',
+ },
},
},
},
diff --git a/packages/kbn-telemetry-tools/src/tools/manage_schema.ts b/packages/kbn-telemetry-tools/src/tools/manage_schema.ts
index cf7dfa6cf79d1..e66e72b00903f 100644
--- a/packages/kbn-telemetry-tools/src/tools/manage_schema.ts
+++ b/packages/kbn-telemetry-tools/src/tools/manage_schema.ts
@@ -10,7 +10,13 @@ import { ParsedUsageCollection } from './ts_parser';
export type AllowedSchemaNumberTypes = 'long' | 'integer' | 'short' | 'byte' | 'double' | 'float';
-export type AllowedSchemaTypes = AllowedSchemaNumberTypes | 'keyword' | 'text' | 'boolean' | 'date';
+export type AllowedSchemaTypes =
+ | AllowedSchemaNumberTypes
+ | 'keyword'
+ | 'text'
+ | 'boolean'
+ | 'date'
+ | 'pass_through';
export function compatibleSchemaTypes(type: AllowedSchemaTypes | 'array') {
switch (type) {
@@ -29,6 +35,8 @@ export function compatibleSchemaTypes(type: AllowedSchemaTypes | 'array') {
return 'number';
case 'array':
return 'array';
+ case 'pass_through':
+ return 'unknown';
default:
throw new Error(`Unknown schema type ${type}`);
}
diff --git a/packages/kbn-telemetry-tools/src/tools/serializer.test.ts b/packages/kbn-telemetry-tools/src/tools/serializer.test.ts
index 5661db270186c..acb4d24cbd8ff 100644
--- a/packages/kbn-telemetry-tools/src/tools/serializer.test.ts
+++ b/packages/kbn-telemetry-tools/src/tools/serializer.test.ts
@@ -167,4 +167,13 @@ describe('getDescriptor', () => {
prop5: { kind: ts.SyntaxKind.FirstLiteralToken, type: 'FirstLiteralToken' },
});
});
+
+ it('serializes RecordStringUnknown', () => {
+ const usageInterface = usageInterfaces.get('RecordStringUnknown')!;
+ const descriptor = getDescriptor(usageInterface, tsProgram);
+ expect(descriptor).toEqual({
+ kind: ts.SyntaxKind.UnknownKeyword,
+ type: 'UnknownKeyword',
+ });
+ });
});
diff --git a/packages/kbn-telemetry-tools/src/tools/serializer.ts b/packages/kbn-telemetry-tools/src/tools/serializer.ts
index 31fad9a5dadb2..e6756f597b747 100644
--- a/packages/kbn-telemetry-tools/src/tools/serializer.ts
+++ b/packages/kbn-telemetry-tools/src/tools/serializer.ts
@@ -62,6 +62,8 @@ export function kindToDescriptorName(kind: number) {
case ts.SyntaxKind.NumberKeyword:
case ts.SyntaxKind.NumericLiteral:
return 'number';
+ case ts.SyntaxKind.UnknownKeyword:
+ return 'unknown';
default:
throw new Error(`Unknown kind ${kind}`);
}
@@ -219,6 +221,15 @@ export function getDescriptor(node: ts.Node, program: ts.Program): Descriptor |
// Support `Record`
if (symbolName === 'Record') {
+ // Special use case `Record`
+ if (
+ node.typeArguments![0].kind === ts.SyntaxKind.StringKeyword &&
+ node.typeArguments![1].kind === ts.SyntaxKind.UnknownKeyword
+ ) {
+ const kind = node.typeArguments![1].kind;
+ return { kind, type: ts.SyntaxKind[kind] as keyof typeof ts.SyntaxKind };
+ }
+
const descriptor = getDescriptor(node.typeArguments![1], program);
if (node.typeArguments![0].kind === ts.SyntaxKind.StringKeyword) {
return { '@@INDEX@@': descriptor };
diff --git a/src/fixtures/telemetry_collectors/constants.ts b/src/fixtures/telemetry_collectors/constants.ts
index 8a669f9654ac4..c24588e36620f 100644
--- a/src/fixtures/telemetry_collectors/constants.ts
+++ b/src/fixtures/telemetry_collectors/constants.ts
@@ -63,6 +63,7 @@ export interface MappedTypes {
export type RecordWithKnownProps = Record;
export type RecordWithKnownAllProps = Record;
+export type RecordStringUnknown = Record;
export type IndexedAccessType = Pick;
export type OmitIndexedAccessType = Omit;
diff --git a/src/fixtures/telemetry_collectors/working_collector_with_description.ts b/src/fixtures/telemetry_collectors/working_collector_with_description.ts
index c382a63ccd6fa..b1b5c8b66ba6a 100644
--- a/src/fixtures/telemetry_collectors/working_collector_with_description.ts
+++ b/src/fixtures/telemetry_collectors/working_collector_with_description.ts
@@ -24,6 +24,7 @@ interface Usage {
my_index_signature_prop?: {
[key: string]: number;
};
+ my_pass_through?: Record;
}
const SOME_NUMBER: number = 123;
@@ -52,6 +53,9 @@ export const myCollector = makeUsageCollector({
},
],
my_str_array: ['hello', 'world'],
+ my_pass_through: {
+ some: 'key',
+ },
};
} catch (err) {
return {
@@ -94,5 +98,9 @@ export const myCollector = makeUsageCollector({
max: { type: 'long' },
min: { type: 'long' },
},
+ my_pass_through: {
+ type: 'pass_through',
+ _meta: { description: "Don't know what goes here. Simply passing it through." },
+ },
},
});
diff --git a/src/plugins/usage_collection/server/collector/types.ts b/src/plugins/usage_collection/server/collector/types.ts
index 98271ef804952..ff5b7135ba5c0 100644
--- a/src/plugins/usage_collection/server/collector/types.ts
+++ b/src/plugins/usage_collection/server/collector/types.ts
@@ -8,7 +8,7 @@
import type { ElasticsearchClient, SavedObjectsClientContract, Logger } from '@kbn/core/server';
-import type { PossibleSchemaTypes } from '@kbn/analytics-client';
+import type { PossibleSchemaTypes, SchemaMetaOptional } from '@kbn/analytics-client';
export type {
AllowedSchemaTypes,
@@ -22,7 +22,17 @@ export type {
* Helper to find out whether to keep recursively looking or if we are on an end value
*/
export type RecursiveMakeSchemaFrom = U extends object
- ? MakeSchemaFrom
+ ? Record extends U
+ ?
+ | {
+ // pass_through should only be allowed for Record for now
+ type: 'pass_through';
+ _meta: {
+ description: string; // Intentionally enforcing the descriptions here
+ } & SchemaMetaOptional;
+ }
+ | MakeSchemaFrom // But still allow being explicit in the definition if they want to.
+ : MakeSchemaFrom
: { type: PossibleSchemaTypes; _meta?: { description: string } };
/**
@@ -60,7 +70,7 @@ export interface CollectorFetchContext {
/**
* The fetch method has the context of the Collector itself
* (this has access to all the properties of the collector like the logger)
- * and the the first parameter is {@link CollectorFetchContext}.
+ * and the first parameter is {@link CollectorFetchContext}.
*/
export type CollectorFetchMethod = (
this: ICollector & ExtraOptions, // Specify the context of `this` for this.log and others to become available
diff --git a/x-pack/plugins/cloud_integrations/cloud_experiments/server/usage/register_usage_collector.ts b/x-pack/plugins/cloud_integrations/cloud_experiments/server/usage/register_usage_collector.ts
index 9a800dabe9fc8..8522a44a962e0 100644
--- a/x-pack/plugins/cloud_integrations/cloud_experiments/server/usage/register_usage_collector.ts
+++ b/x-pack/plugins/cloud_integrations/cloud_experiments/server/usage/register_usage_collector.ts
@@ -10,7 +10,7 @@ import type { LaunchDarklyClient } from '../launch_darkly_client';
export interface Usage {
initialized: boolean;
- flags: Record;
+ flags: Record;
flagNames: string[];
}
@@ -36,10 +36,8 @@ export function registerUsageCollector(
},
// We'll likely map "flags" as `flattened`, so "flagNames" helps out to discover the key names
flags: {
- DYNAMIC_KEY: {
- type: 'keyword',
- _meta: { description: 'Flags received by the client' },
- },
+ type: 'pass_through',
+ _meta: { description: 'Flags received by the client' },
},
flagNames: {
type: 'array',
diff --git a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json
index bae65335dfac3..6bf88ebf5e53d 100644
--- a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json
+++ b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json
@@ -4991,13 +4991,9 @@
}
},
"flags": {
- "properties": {
- "DYNAMIC_KEY": {
- "type": "keyword",
- "_meta": {
- "description": "Flags received by the client"
- }
- }
+ "type": "pass_through",
+ "_meta": {
+ "description": "Flags received by the client"
}
},
"flagNames": {
From a7923d12d1653f6683fb2e5bf60faa176c3d7cbe Mon Sep 17 00:00:00 2001
From: Sander Philipse <94373878+sphilipse@users.noreply.github.com>
Date: Fri, 4 Nov 2022 10:32:41 +0100
Subject: [PATCH 06/31] [Enterprise Search] Adds cancel syncs functionality for
connectors (#144528)
* [Enterprise Search] Adds cancel syncs functionality for connectors
---
.../common/types/connectors.ts | 6 +-
.../connector/cancel_syncs_api_logic.test.ts | 31 +++++
.../api/connector/cancel_syncs_api_logic.ts | 20 +++
.../header_actions/header_actions.test.tsx | 40 ++++++
.../header_actions/header_actions.tsx | 4 +-
.../components/header_actions/sync_button.tsx | 55 --------
.../syncs_context_menu.test.tsx | 106 +++++++++++++++
.../header_actions/syncs_context_menu.tsx | 126 ++++++++++++++++++
.../connector/cancel_syncs_logic.test.ts | 72 ++++++++++
.../connector/cancel_syncs_logic.ts | 74 ++++++++++
.../search_index/index_view_logic.test.ts | 5 +
.../search_index/index_view_logic.ts | 27 ++--
.../stop_crawl_popover_context_menu.tsx | 2 +-
.../utils/sync_status_to_text.test.ts | 24 ++++
.../utils/sync_status_to_text.ts | 20 +++
.../lib/connectors/post_cancel_syncs.test.ts | 90 +++++++++++++
.../lib/connectors/post_cancel_syncs.ts | 71 ++++++++++
.../routes/enterprise_search/connectors.ts | 17 +++
18 files changed, 723 insertions(+), 67 deletions(-)
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector/cancel_syncs_api_logic.test.ts
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector/cancel_syncs_api_logic.ts
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/header_actions.test.tsx
delete mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/sync_button.tsx
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/syncs_context_menu.test.tsx
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/syncs_context_menu.tsx
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/cancel_syncs_logic.test.ts
create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/cancel_syncs_logic.ts
create mode 100644 x-pack/plugins/enterprise_search/server/lib/connectors/post_cancel_syncs.test.ts
create mode 100644 x-pack/plugins/enterprise_search/server/lib/connectors/post_cancel_syncs.ts
diff --git a/x-pack/plugins/enterprise_search/common/types/connectors.ts b/x-pack/plugins/enterprise_search/common/types/connectors.ts
index 6b38e1269a9eb..378633ce52d6a 100644
--- a/x-pack/plugins/enterprise_search/common/types/connectors.ts
+++ b/x-pack/plugins/enterprise_search/common/types/connectors.ts
@@ -26,9 +26,13 @@ export enum ConnectorStatus {
}
export enum SyncStatus {
- IN_PROGRESS = 'in_progress',
+ CANCELING = 'canceling',
+ CANCELED = 'canceled',
COMPLETED = 'completed',
ERROR = 'error',
+ IN_PROGRESS = 'in_progress',
+ PENDING = 'pending',
+ SUSPENDED = 'suspended',
}
export interface IngestPipelineParams {
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector/cancel_syncs_api_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector/cancel_syncs_api_logic.test.ts
new file mode 100644
index 0000000000000..a19b09ff5ce5b
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector/cancel_syncs_api_logic.test.ts
@@ -0,0 +1,31 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { mockHttpValues } from '../../../__mocks__/kea_logic';
+
+import { nextTick } from '@kbn/test-jest-helpers';
+
+import { cancelSyncs } from './cancel_syncs_api_logic';
+
+describe('CancelSyncsLogic', () => {
+ const { http } = mockHttpValues;
+ beforeEach(() => {
+ jest.clearAllMocks();
+ });
+ describe('cancelSyncs', () => {
+ it('calls correct api', async () => {
+ const promise = Promise.resolve('result');
+ http.post.mockReturnValue(promise);
+ const result = cancelSyncs({ connectorId: 'connectorId1' });
+ await nextTick();
+ expect(http.post).toHaveBeenCalledWith(
+ '/internal/enterprise_search/connectors/connectorId1/cancel_syncs'
+ );
+ await expect(result).resolves.toEqual('result');
+ });
+ });
+});
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector/cancel_syncs_api_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector/cancel_syncs_api_logic.ts
new file mode 100644
index 0000000000000..297e26f2c05ec
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector/cancel_syncs_api_logic.ts
@@ -0,0 +1,20 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { createApiLogic } from '../../../shared/api_logic/create_api_logic';
+import { HttpLogic } from '../../../shared/http';
+
+export interface CancelSyncsApiArgs {
+ connectorId: string;
+}
+
+export const cancelSyncs = async ({ connectorId }: CancelSyncsApiArgs) => {
+ const route = `/internal/enterprise_search/connectors/${connectorId}/cancel_syncs`;
+ return await HttpLogic.values.http.post(route);
+};
+
+export const CancelSyncsApiLogic = createApiLogic(['cancel_syncs_api_logic'], cancelSyncs);
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/header_actions.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/header_actions.test.tsx
new file mode 100644
index 0000000000000..ec0dfd0de3ef7
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/header_actions.test.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 { apiIndex, connectorIndex, crawlerIndex } from '../../../../__mocks__/view_index.mock';
+
+import React from 'react';
+
+import { CrawlerStatusIndicator } from '../../../shared/crawler_status_indicator/crawler_status_indicator';
+
+import { getHeaderActions } from './header_actions';
+import { SearchEnginesPopover } from './search_engines_popover';
+import { SyncsContextMenu } from './syncs_context_menu';
+
+describe('Header Actions', () => {
+ it('renders api index', () => {
+ expect(getHeaderActions(apiIndex)).toEqual([
+ ,
+ ]);
+ });
+ it('renders connector index', () => {
+ expect(getHeaderActions(connectorIndex)).toEqual([
+ ,
+ ,
+ ]);
+ });
+ it('renders crawler index', () => {
+ expect(getHeaderActions(crawlerIndex)).toEqual([
+ ,
+ ,
+ ]);
+ });
+});
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/header_actions.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/header_actions.tsx
index 10d821b87b0ee..0bf12fa6e200d 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/header_actions.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/header_actions.tsx
@@ -12,14 +12,14 @@ import { isCrawlerIndex, isConnectorIndex, getIngestionMethod } from '../../../.
import { CrawlerStatusIndicator } from '../../../shared/crawler_status_indicator/crawler_status_indicator';
import { SearchEnginesPopover } from './search_engines_popover';
-import { SyncButton } from './sync_button';
+import { SyncsContextMenu } from './syncs_context_menu';
// Used to populate rightSideItems of an EuiPageTemplate, which is rendered right-to-left
export const getHeaderActions = (indexData?: ElasticsearchIndexWithIngestion) => {
const ingestionMethod = getIngestionMethod(indexData);
return [
...(isCrawlerIndex(indexData) ? [ ] : []),
- ...(isConnectorIndex(indexData) ? [ ] : []),
+ ...(isConnectorIndex(indexData) ? [ ] : []),
{
- const { ingestionMethod, ingestionStatus, isSyncing, isWaitingForSync } =
- useValues(IndexViewLogic);
- const { startSync } = useActions(IndexViewLogic);
-
- const getSyncButtonText = () => {
- if (isWaitingForSync) {
- return i18n.translate(
- 'xpack.enterpriseSearch.content.index.syncButton.waitingForSync.label',
- {
- defaultMessage: 'Waiting for sync',
- }
- );
- }
- if (isSyncing && ingestionStatus !== IngestionStatus.ERROR) {
- return i18n.translate('xpack.enterpriseSearch.content.index.syncButton.syncing.label', {
- defaultMessage: 'Syncing',
- });
- }
- return i18n.translate('xpack.enterpriseSearch.content.index.syncButton.label', {
- defaultMessage: 'Sync',
- });
- };
- return (
-
- {getSyncButtonText()}
-
- );
-};
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/syncs_context_menu.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/syncs_context_menu.test.tsx
new file mode 100644
index 0000000000000..e49077f040542
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/syncs_context_menu.test.tsx
@@ -0,0 +1,106 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import '../../../../../__mocks__/shallow_useeffect.mock';
+import { setMockValues, setMockActions } from '../../../../../__mocks__/kea_logic';
+
+import React from 'react';
+
+import {
+ EuiPopover,
+ EuiContextMenuItem,
+ EuiContextMenuPanel,
+ EuiButton,
+ EuiResizeObserver,
+} from '@elastic/eui';
+
+import { mountWithIntl } from '@kbn/test-jest-helpers';
+
+import { Status } from '../../../../../../../common/types/api';
+
+import { IngestionMethod, IngestionStatus } from '../../../../types';
+
+import { SyncsContextMenu } from './syncs_context_menu';
+
+describe('SyncsContextMenu', () => {
+ const startSync = jest.fn();
+ const cancelSyncs = jest.fn();
+
+ const mockValues = {
+ ingestionMethod: IngestionMethod.CONNECTOR,
+ ingestionStatus: IngestionStatus.CONNECTED,
+ isCanceling: false,
+ isSyncing: false,
+ isWaitingForSync: false,
+ status: Status.SUCCESS,
+ };
+
+ beforeEach(() => {
+ setMockValues(mockValues);
+ setMockActions({
+ cancelSyncs,
+ startSync,
+ });
+ });
+
+ it('renders', () => {
+ setMockValues({ ...mockValues, isWaitingForSync: true });
+ const wrapper = mountWithIntl( );
+ const popover = wrapper.find(EuiPopover);
+
+ expect(popover).toHaveLength(1);
+ expect(popover.props().isOpen).toEqual(false);
+ });
+
+ it('Can cancel syncs', () => {
+ setMockValues({ ...mockValues, isSyncing: true });
+ const wrapper = mountWithIntl( );
+ const button = wrapper.find(EuiButton);
+ button.simulate('click');
+
+ const menuItems = wrapper
+ .find(EuiContextMenuPanel)
+ .find(EuiResizeObserver)
+ .find(EuiContextMenuItem);
+ expect(menuItems).toHaveLength(1);
+
+ const firstButton = menuItems.get(0);
+
+ expect(firstButton.props).toEqual(
+ expect.objectContaining({
+ children: 'Cancel Syncs',
+ disabled: false,
+ })
+ );
+ menuItems.first().simulate('click');
+ expect(cancelSyncs).toHaveBeenCalled();
+ });
+
+ it('Can start a sync', () => {
+ setMockValues({ ...mockValues, ingestionStatus: IngestionStatus.ERROR });
+ const wrapper = mountWithIntl( );
+ const button = wrapper.find(EuiButton);
+ button.simulate('click');
+
+ const menuItems = wrapper
+ .find(EuiContextMenuPanel)
+ .find(EuiResizeObserver)
+ .find(EuiContextMenuItem);
+ expect(menuItems).toHaveLength(2);
+
+ const firstButton = menuItems.get(0);
+
+ expect(firstButton.props).toEqual(
+ expect.objectContaining({
+ children: 'Sync',
+ disabled: false,
+ })
+ );
+ menuItems.first().simulate('click');
+ expect(startSync).toHaveBeenCalled();
+ });
+});
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/syncs_context_menu.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/syncs_context_menu.tsx
new file mode 100644
index 0000000000000..5ffda5726bdbd
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/syncs_context_menu.tsx
@@ -0,0 +1,126 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license 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 { useActions, useValues } from 'kea';
+
+import {
+ EuiButton,
+ EuiContextMenuItem,
+ EuiContextMenuPanel,
+ EuiFlexGroup,
+ EuiFlexItem,
+ EuiLoadingSpinner,
+ EuiPopover,
+} from '@elastic/eui';
+
+import { i18n } from '@kbn/i18n';
+
+import { Status } from '../../../../../../../common/types/api';
+import { CancelSyncsApiLogic } from '../../../../api/connector/cancel_syncs_api_logic';
+import { IngestionStatus } from '../../../../types';
+import { CancelSyncsLogic } from '../../connector/cancel_syncs_logic';
+import { IndexViewLogic } from '../../index_view_logic';
+
+export const SyncsContextMenu: React.FC = () => {
+ const { ingestionMethod, ingestionStatus, isCanceling, isSyncing, isWaitingForSync } =
+ useValues(IndexViewLogic);
+ const { cancelSyncs } = useActions(CancelSyncsLogic);
+ const { status } = useValues(CancelSyncsApiLogic);
+ const { startSync } = useActions(IndexViewLogic);
+
+ const [isPopoverOpen, setPopover] = useState(false);
+
+ const togglePopover = () => setPopover(!isPopoverOpen);
+ const closePopover = () => setPopover(false);
+
+ const getSyncButtonText = () => {
+ if (isWaitingForSync) {
+ return i18n.translate(
+ 'xpack.enterpriseSearch.content.index.syncButton.waitingForSync.label',
+ {
+ defaultMessage: 'Waiting for sync',
+ }
+ );
+ }
+ if (isSyncing && ingestionStatus !== IngestionStatus.ERROR) {
+ return i18n.translate('xpack.enterpriseSearch.content.index.syncButton.syncing.label', {
+ defaultMessage: 'Syncing',
+ });
+ }
+ return i18n.translate('xpack.enterpriseSearch.content.index.syncButton.label', {
+ defaultMessage: 'Sync',
+ });
+ };
+
+ const syncLoading = (isSyncing || isWaitingForSync) && ingestionStatus !== IngestionStatus.ERROR;
+
+ return (
+
+
+ {syncLoading && (
+
+
+
+ )}
+ {getSyncButtonText()}
+
+
+ }
+ isOpen={isPopoverOpen}
+ closePopover={closePopover}
+ panelPaddingSize="none"
+ anchorPosition="downLeft"
+ >
+ {
+ closePopover();
+ startSync();
+ }}
+ icon="play"
+ >
+ {getSyncButtonText()}
+ ,
+ ]),
+ {
+ closePopover();
+ cancelSyncs();
+ }}
+ icon="trash"
+ >
+ {i18n.translate('xpack.enterpriseSearch.index.header.cancelSyncsTitle', {
+ defaultMessage: 'Cancel Syncs',
+ })}
+ ,
+ ]}
+ />
+
+ );
+};
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/cancel_syncs_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/cancel_syncs_logic.test.ts
new file mode 100644
index 0000000000000..a63dac6806cc8
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/cancel_syncs_logic.test.ts
@@ -0,0 +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.
+ */
+
+import { LogicMounter, mockFlashMessageHelpers } from '../../../../__mocks__/kea_logic';
+
+import { indices } from '../../../__mocks__/search_indices.mock';
+
+import { FetchIndexApiLogic } from '../../../api/index/fetch_index_api_logic';
+import { IndexViewLogic } from '../index_view_logic';
+
+import { CancelSyncsLogic } from './cancel_syncs_logic';
+
+describe('CancelSyncsLogic', () => {
+ const { mount } = new LogicMounter(CancelSyncsLogic);
+ const { mount: IndexViewLogicMount } = new LogicMounter(IndexViewLogic);
+ const { mount: FetchIndexApiLogicMount } = new LogicMounter(FetchIndexApiLogic);
+ const { clearFlashMessages, flashAPIErrors, flashSuccessToast } = mockFlashMessageHelpers;
+ const DEFAULT_VALUES = {
+ connectorId: null,
+ isConnectorIndex: false,
+ };
+
+ beforeEach(() => {
+ jest.clearAllMocks();
+ IndexViewLogicMount();
+ FetchIndexApiLogicMount();
+ mount();
+ });
+ it('has expected default values', () => {
+ expect(CancelSyncsLogic.values).toEqual(DEFAULT_VALUES);
+ });
+
+ describe('actions', () => {
+ describe('cancelSyncs', () => {
+ it('should not call makeCancelSyncRequest if index is not a connector', () => {
+ CancelSyncsLogic.actions.makeCancelSyncsRequest = jest.fn();
+ CancelSyncsLogic.actions.cancelSyncs();
+ expect(CancelSyncsLogic.actions.makeCancelSyncsRequest).not.toHaveBeenCalled();
+ });
+ it('should call clearFlashMessages and request if index is a connector', () => {
+ CancelSyncsLogic.actions.makeCancelSyncsRequest = jest.fn();
+ FetchIndexApiLogic.actions.apiSuccess(indices[1]);
+ CancelSyncsLogic.actions.cancelSyncs();
+ expect(CancelSyncsLogic.actions.makeCancelSyncsRequest).toHaveBeenCalled();
+ });
+ });
+ describe('makeRequest', () => {
+ it('should call clearFlashMessages', () => {
+ CancelSyncsLogic.actions.makeCancelSyncsRequest({
+ connectorId: 'id',
+ });
+ expect(clearFlashMessages).toHaveBeenCalled();
+ });
+ });
+ describe('apiError', () => {
+ it('should call flashAPIError', () => {
+ CancelSyncsLogic.actions.cancelSyncsApiError('error' as any);
+ expect(flashAPIErrors).toHaveBeenCalledWith('error');
+ });
+ });
+ describe('apiSuccess', () => {
+ it('should call flashAPIError', () => {
+ CancelSyncsLogic.actions.cancelSyncsApiSuccess('success' as any);
+ expect(flashSuccessToast).toHaveBeenCalledWith('Successfully canceled syncs');
+ });
+ });
+ });
+});
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/cancel_syncs_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/cancel_syncs_logic.ts
new file mode 100644
index 0000000000000..73fa34d69c83d
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/cancel_syncs_logic.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 { kea, MakeLogicType } from 'kea';
+
+import { i18n } from '@kbn/i18n';
+
+import { Actions } from '../../../../shared/api_logic/create_api_logic';
+import {
+ clearFlashMessages,
+ flashAPIErrors,
+ flashSuccessToast,
+} from '../../../../shared/flash_messages';
+
+import {
+ CancelSyncsApiArgs,
+ CancelSyncsApiLogic,
+} from '../../../api/connector/cancel_syncs_api_logic';
+import { IndexViewLogic } from '../index_view_logic';
+
+type CancelSyncsApiActions = Actions;
+
+interface CancelSyncsLogicValues {
+ connectorId?: string;
+ isConnectorIndex: boolean;
+}
+
+interface CancelSyncsLogicActions {
+ cancelSyncs: () => void;
+ cancelSyncsApiError: CancelSyncsApiActions['apiError'];
+ cancelSyncsApiSuccess: CancelSyncsApiActions['apiSuccess'];
+ makeCancelSyncsRequest: CancelSyncsApiActions['makeRequest'];
+}
+
+export const CancelSyncsLogic = kea>(
+ {
+ actions: {
+ cancelSyncs: true,
+ },
+ connect: {
+ actions: [
+ CancelSyncsApiLogic,
+ [
+ 'apiError as cancelSyncsApiError',
+ 'apiSuccess as cancelSyncsApiSuccess',
+ 'makeRequest as makeCancelSyncsRequest',
+ ],
+ ],
+ values: [IndexViewLogic, ['connectorId', 'isConnectorIndex']],
+ },
+ listeners: ({ actions, values }) => ({
+ cancelSyncs: () => {
+ if (values.isConnectorIndex && values.connectorId) {
+ actions.makeCancelSyncsRequest({ connectorId: values.connectorId });
+ }
+ },
+ cancelSyncsApiError: (e) => flashAPIErrors(e),
+ cancelSyncsApiSuccess: () => {
+ flashSuccessToast(
+ i18n.translate('xpack.enterpriseSearch.content.searchIndex.cancelSyncs.successMessage', {
+ defaultMessage: 'Successfully canceled syncs',
+ })
+ );
+ },
+ makeCancelSyncsRequest: () => {
+ clearFlashMessages();
+ },
+ }),
+ }
+);
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.test.ts
index 1b0a11d17f546..2bce9072d169d 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.test.ts
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.test.ts
@@ -32,6 +32,8 @@ const DEFAULT_VALUES = {
indexName: '',
ingestionMethod: IngestionMethod.API,
ingestionStatus: IngestionStatus.CONNECTED,
+ isCanceling: false,
+ isConnectorIndex: false,
isSyncing: false,
isWaitingForSync: false,
lastUpdated: null,
@@ -93,8 +95,11 @@ describe('IndexViewLogic', () => {
...CONNECTOR_VALUES.index,
connector: { ...CONNECTOR_VALUES.index.connector, sync_now: true },
},
+ isCanceling: false,
+ isConnectorIndex: true,
isWaitingForSync: true,
localSyncNowValue: true,
+ pipelineData: undefined,
syncStatus: SyncStatus.COMPLETED,
})
);
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.ts
index 454bc5f9a0be0..a31b4f4b491f6 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.ts
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.ts
@@ -14,6 +14,7 @@ import {
IngestPipelineParams,
SyncStatus,
} from '../../../../../common/types/connectors';
+import { ElasticsearchIndexWithIngestion } from '../../../../../common/types/indices';
import { Actions } from '../../../shared/api_logic/create_api_logic';
import {
flashAPIErrors,
@@ -43,25 +44,26 @@ import { IndexNameLogic } from './index_name_logic';
const FETCH_INDEX_POLLING_DURATION = 5000; // 1 seconds
const FETCH_INDEX_POLLING_DURATION_ON_FAILURE = 30000; // 30 seconds
-type FetchIndexApiValues = Actions;
-type StartSyncApiValues = Actions;
+type FetchIndexApiActions = Actions;
+type StartSyncApiActions = Actions;
export interface IndexViewActions {
+ cancelSyncs(): void;
clearFetchIndexTimeout(): void;
createNewFetchIndexTimeout(duration: number): { duration: number };
fetchCrawlerData: () => void;
fetchIndex: () => void;
- fetchIndexApiSuccess: FetchIndexApiValues['apiSuccess'];
- makeFetchIndexRequest: FetchIndexApiValues['makeRequest'];
- makeStartSyncRequest: StartSyncApiValues['makeRequest'];
+ fetchIndexApiSuccess: FetchIndexApiActions['apiSuccess'];
+ makeFetchIndexRequest: FetchIndexApiActions['makeRequest'];
+ makeStartSyncRequest: StartSyncApiActions['makeRequest'];
recheckIndex: () => void;
- resetFetchIndexApi: FetchIndexApiValues['apiReset'];
+ resetFetchIndexApi: FetchIndexApiActions['apiReset'];
resetRecheckIndexLoading: () => void;
setFetchIndexTimeoutId(timeoutId: NodeJS.Timeout): { timeoutId: NodeJS.Timeout };
startFetchIndexPoll(): void;
startSync(): void;
- startSyncApiError: StartSyncApiValues['apiError'];
- startSyncApiSuccess: StartSyncApiValues['apiSuccess'];
+ startSyncApiError: StartSyncApiActions['apiError'];
+ startSyncApiSuccess: StartSyncApiActions['apiSuccess'];
stopFetchIndexPoll(): void;
}
@@ -74,6 +76,7 @@ export interface IndexViewValues {
indexName: string;
ingestionMethod: IngestionMethod;
ingestionStatus: IngestionStatus;
+ isCanceling: boolean;
isSyncing: boolean;
isWaitingForSync: boolean;
lastUpdated: string | null;
@@ -237,6 +240,14 @@ export const IndexViewLogic = kea [selectors.data], (data) => (data ? indexToViewIndex(data) : undefined)],
ingestionMethod: [() => [selectors.data], (data) => getIngestionMethod(data)],
ingestionStatus: [() => [selectors.data], (data) => getIngestionStatus(data)],
+ isCanceling: [
+ () => [selectors.syncStatus],
+ (syncStatus: SyncStatus) => syncStatus === SyncStatus.CANCELING,
+ ],
+ isConnectorIndex: [
+ () => [selectors.data],
+ (data: ElasticsearchIndexWithIngestion | undefined) => isConnectorIndex(data),
+ ],
isSyncing: [
() => [selectors.syncStatus],
(syncStatus: SyncStatus) => syncStatus === SyncStatus.IN_PROGRESS,
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/crawler_status_indicator/stop_crawl_popover_context_menu.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/crawler_status_indicator/stop_crawl_popover_context_menu.tsx
index 2c9024b5b771b..d893369eace3e 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/crawler_status_indicator/stop_crawl_popover_context_menu.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/crawler_status_indicator/stop_crawl_popover_context_menu.tsx
@@ -73,7 +73,7 @@ export const StopCrawlPopoverContextMenu: React.FC = () => {
{i18n.translate(
'xpack.enterpriseSearch.crawler.crawlerStatusIndicator.cancelCrawlMenuItemLabel',
{
- defaultMessage: 'Cancel Crawl',
+ defaultMessage: 'Cancel Crawls',
}
)}
,
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/sync_status_to_text.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/sync_status_to_text.test.ts
index d9ecdf6ebc556..4272eaf11641e 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/sync_status_to_text.test.ts
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/sync_status_to_text.test.ts
@@ -19,6 +19,18 @@ describe('syncStatusToText', () => {
it('should return correct value for in progress', () => {
expect(syncStatusToText(SyncStatus.IN_PROGRESS)).toEqual('Sync in progress');
});
+ it('should return correct value for canceling', () => {
+ expect(syncStatusToText(SyncStatus.CANCELING)).toEqual('Canceling sync');
+ });
+ it('should return correct value for canceled', () => {
+ expect(syncStatusToText(SyncStatus.CANCELED)).toEqual('Sync canceled');
+ });
+ it('should return correct value for pending', () => {
+ expect(syncStatusToText(SyncStatus.PENDING)).toEqual('Sync pending');
+ });
+ it('should return correct value for suspended', () => {
+ expect(syncStatusToText(SyncStatus.SUSPENDED)).toEqual('Sync suspended');
+ });
});
describe('syncStatusToColor', () => {
@@ -31,4 +43,16 @@ describe('syncStatusToColor', () => {
it('should return correct value for in progress', () => {
expect(syncStatusToColor(SyncStatus.IN_PROGRESS)).toEqual('warning');
});
+ it('should return correct value for canceling', () => {
+ expect(syncStatusToColor(SyncStatus.CANCELING)).toEqual('warning');
+ });
+ it('should return correct value for canceled', () => {
+ expect(syncStatusToColor(SyncStatus.CANCELED)).toEqual('danger');
+ });
+ it('should return correct value for pending', () => {
+ expect(syncStatusToColor(SyncStatus.PENDING)).toEqual('warning');
+ });
+ it('should return correct value for suspended', () => {
+ expect(syncStatusToColor(SyncStatus.SUSPENDED)).toEqual('warning');
+ });
});
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/sync_status_to_text.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/sync_status_to_text.ts
index 51d69f2e53ad7..5d79f92565a34 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/sync_status_to_text.ts
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/sync_status_to_text.ts
@@ -23,6 +23,22 @@ export function syncStatusToText(status: SyncStatus): string {
return i18n.translate('xpack.enterpriseSearch.content.syncStatus.inProgress', {
defaultMessage: 'Sync in progress',
});
+ case SyncStatus.CANCELED:
+ return i18n.translate('xpack.enterpriseSearch.content.syncStatus.canceling', {
+ defaultMessage: 'Sync canceled',
+ });
+ case SyncStatus.CANCELING:
+ return i18n.translate('xpack.enterpriseSearch.content.syncStatus.canceled', {
+ defaultMessage: 'Canceling sync',
+ });
+ case SyncStatus.PENDING:
+ return i18n.translate('xpack.enterpriseSearch.content.syncStatus.pending', {
+ defaultMessage: 'Sync pending',
+ });
+ case SyncStatus.SUSPENDED:
+ return i18n.translate('xpack.enterpriseSearch.content.syncStatus.suspended', {
+ defaultMessage: 'Sync suspended',
+ });
}
}
@@ -31,8 +47,12 @@ export function syncStatusToColor(status: SyncStatus): string {
case SyncStatus.COMPLETED:
return 'success';
case SyncStatus.ERROR:
+ case SyncStatus.CANCELED:
return 'danger';
case SyncStatus.IN_PROGRESS:
+ case SyncStatus.PENDING:
+ case SyncStatus.SUSPENDED:
+ case SyncStatus.CANCELING:
return 'warning';
}
}
diff --git a/x-pack/plugins/enterprise_search/server/lib/connectors/post_cancel_syncs.test.ts b/x-pack/plugins/enterprise_search/server/lib/connectors/post_cancel_syncs.test.ts
new file mode 100644
index 0000000000000..ed4544cdeb2eb
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/server/lib/connectors/post_cancel_syncs.test.ts
@@ -0,0 +1,90 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { IScopedClusterClient } from '@kbn/core/server';
+
+import { CONNECTORS_INDEX, CONNECTORS_JOBS_INDEX } from '../..';
+import { SyncStatus } from '../../../common/types/connectors';
+
+import { cancelSyncs } from './post_cancel_syncs';
+
+describe('addConnector lib function', () => {
+ const mockClient = {
+ asCurrentUser: {
+ update: jest.fn(),
+ updateByQuery: jest.fn(),
+ },
+ asInternalUser: {},
+ };
+
+ beforeEach(() => {
+ jest.clearAllMocks();
+ });
+
+ it('should call updateByQuery to cancel syncs', async () => {
+ mockClient.asCurrentUser.updateByQuery.mockImplementation(() => ({ _id: 'fakeId' }));
+
+ await expect(
+ cancelSyncs(mockClient as unknown as IScopedClusterClient, 'connectorId')
+ ).resolves.toEqual(undefined);
+ expect(mockClient.asCurrentUser.updateByQuery).toHaveBeenCalledTimes(2);
+ expect(mockClient.asCurrentUser.updateByQuery).toHaveBeenCalledWith({
+ index: CONNECTORS_JOBS_INDEX,
+ query: {
+ bool: {
+ must: [
+ {
+ term: {
+ connector_id: 'connectorId',
+ },
+ },
+ {
+ terms: {
+ status: [SyncStatus.IN_PROGRESS],
+ },
+ },
+ ],
+ },
+ },
+ refresh: true,
+ script: {
+ lang: 'painless',
+ source: `ctx._source['status'] = '${SyncStatus.CANCELING}'`,
+ },
+ });
+ expect(mockClient.asCurrentUser.updateByQuery).toHaveBeenCalledWith({
+ index: CONNECTORS_JOBS_INDEX,
+ query: {
+ bool: {
+ must: [
+ {
+ term: {
+ connector_id: 'connectorId',
+ },
+ },
+ {
+ terms: {
+ status: [SyncStatus.PENDING, SyncStatus.SUSPENDED],
+ },
+ },
+ ],
+ },
+ },
+ refresh: true,
+ script: {
+ lang: 'painless',
+ source: `ctx._source['status'] = '${SyncStatus.CANCELED}'`,
+ },
+ });
+ await expect(mockClient.asCurrentUser.update).toHaveBeenCalledWith({
+ doc: { last_sync_status: SyncStatus.CANCELED, sync_now: false },
+ id: 'connectorId',
+ index: CONNECTORS_INDEX,
+ refresh: true,
+ });
+ });
+});
diff --git a/x-pack/plugins/enterprise_search/server/lib/connectors/post_cancel_syncs.ts b/x-pack/plugins/enterprise_search/server/lib/connectors/post_cancel_syncs.ts
new file mode 100644
index 0000000000000..91b439f072d94
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/server/lib/connectors/post_cancel_syncs.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 { IScopedClusterClient } from '@kbn/core-elasticsearch-server';
+
+import { CONNECTORS_INDEX, CONNECTORS_JOBS_INDEX } from '../..';
+import { SyncStatus } from '../../../common/types/connectors';
+
+export const cancelSyncs = async (
+ client: IScopedClusterClient,
+ connectorId: string
+): Promise => {
+ await client.asCurrentUser.updateByQuery({
+ index: CONNECTORS_JOBS_INDEX,
+ query: {
+ bool: {
+ must: [
+ {
+ term: {
+ connector_id: connectorId,
+ },
+ },
+ {
+ terms: {
+ status: [SyncStatus.PENDING, SyncStatus.SUSPENDED],
+ },
+ },
+ ],
+ },
+ },
+ refresh: true,
+ script: {
+ lang: 'painless',
+ source: `ctx._source['status'] = '${SyncStatus.CANCELED}'`,
+ },
+ });
+ await client.asCurrentUser.updateByQuery({
+ index: CONNECTORS_JOBS_INDEX,
+ query: {
+ bool: {
+ must: [
+ {
+ term: {
+ connector_id: connectorId,
+ },
+ },
+ {
+ terms: {
+ status: [SyncStatus.IN_PROGRESS],
+ },
+ },
+ ],
+ },
+ },
+ refresh: true,
+ script: {
+ lang: 'painless',
+ source: `ctx._source['status'] = '${SyncStatus.CANCELING}'`,
+ },
+ });
+ await client.asCurrentUser.update({
+ doc: { last_sync_status: SyncStatus.CANCELED, sync_now: false },
+ id: connectorId,
+ index: CONNECTORS_INDEX,
+ refresh: true,
+ });
+};
diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts
index 9663b216ec91c..81207f19d1261 100644
--- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts
+++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts
@@ -14,6 +14,7 @@ import { ConnectorStatus } from '../../../common/types/connectors';
import { ErrorCode } from '../../../common/types/error_codes';
import { addConnector } from '../../lib/connectors/add_connector';
import { fetchSyncJobsByConnectorId } from '../../lib/connectors/fetch_sync_jobs';
+import { cancelSyncs } from '../../lib/connectors/post_cancel_syncs';
import { startConnectorSync } from '../../lib/connectors/start_sync';
import { updateConnectorConfiguration } from '../../lib/connectors/update_connector_configuration';
import { updateConnectorNameAndDescription } from '../../lib/connectors/update_connector_name_and_description';
@@ -69,6 +70,22 @@ export function registerConnectorRoutes({ router, log }: RouteDependencies) {
})
);
+ router.post(
+ {
+ path: '/internal/enterprise_search/connectors/{connectorId}/cancel_syncs',
+ validate: {
+ params: schema.object({
+ connectorId: schema.string(),
+ }),
+ },
+ },
+ elasticsearchErrorHandler(log, async (context, request, response) => {
+ const { client } = (await context.core).elasticsearch;
+ await cancelSyncs(client, request.params.connectorId);
+ return response.ok();
+ })
+ );
+
router.post(
{
path: '/internal/enterprise_search/connectors/{connectorId}/configuration',
From 9e6ee2a58cf54fa902708b94a47c8bd00e364b3a Mon Sep 17 00:00:00 2001
From: Mark Hopkin
Date: Fri, 4 Nov 2022 09:39:26 +0000
Subject: [PATCH 07/31] support dotted notation in elasticsearch settings and
mappings (#144570)
(cherry picked from commit 4de8993fe96824ae125622bff264a4b15b42516e)
---
.../server/services/epm/archive/parse.test.ts | 14 +++++++++++++
.../server/services/epm/archive/parse.ts | 20 ++++++++++---------
2 files changed, 25 insertions(+), 9 deletions(-)
diff --git a/x-pack/plugins/fleet/server/services/epm/archive/parse.test.ts b/x-pack/plugins/fleet/server/services/epm/archive/parse.test.ts
index a6c59f6dea616..38a070e7eca8f 100644
--- a/x-pack/plugins/fleet/server/services/epm/archive/parse.test.ts
+++ b/x-pack/plugins/fleet/server/services/epm/archive/parse.test.ts
@@ -54,6 +54,9 @@ describe('parseDefaultIngestPipeline', () => {
});
describe('parseDataStreamElasticsearchEntry', () => {
+ it('Should handle undefined elasticsearch', () => {
+ expect(parseDataStreamElasticsearchEntry()).toEqual({});
+ });
it('Should handle empty elasticsearch', () => {
expect(parseDataStreamElasticsearchEntry({})).toEqual({});
});
@@ -108,4 +111,15 @@ describe('parseDataStreamElasticsearchEntry', () => {
},
});
});
+ it('Should handle dotted values for mappings and settings', () => {
+ expect(
+ parseDataStreamElasticsearchEntry({
+ 'index_template.mappings': { dynamic: false },
+ 'index_template.settings': { 'index.lifecycle.name': 'reference' },
+ })
+ ).toEqual({
+ 'index_template.mappings': { dynamic: false },
+ 'index_template.settings': { 'index.lifecycle.name': 'reference' },
+ });
+ });
});
diff --git a/x-pack/plugins/fleet/server/services/epm/archive/parse.ts b/x-pack/plugins/fleet/server/services/epm/archive/parse.ts
index a6107d81355c4..06a92e84c0af6 100644
--- a/x-pack/plugins/fleet/server/services/epm/archive/parse.ts
+++ b/x-pack/plugins/fleet/server/services/epm/archive/parse.ts
@@ -503,7 +503,7 @@ export function parseAndVerifyInputs(manifestInputs: any, location: string): Reg
}
export function parseDataStreamElasticsearchEntry(
- elasticsearch: Record,
+ elasticsearch?: Record,
ingestPipeline?: string
) {
const parsedElasticsearchEntry: Record = {};
@@ -520,16 +520,18 @@ export function parseDataStreamElasticsearchEntry(
parsedElasticsearchEntry.source_mode = elasticsearch.source_mode;
}
- if (elasticsearch?.index_template?.mappings) {
- parsedElasticsearchEntry['index_template.mappings'] = expandDottedEntries(
- elasticsearch.index_template.mappings
- );
+ const indexTemplateMappings =
+ elasticsearch?.index_template?.mappings || elasticsearch?.['index_template.mappings'];
+ if (indexTemplateMappings) {
+ parsedElasticsearchEntry['index_template.mappings'] =
+ expandDottedEntries(indexTemplateMappings);
}
- if (elasticsearch?.index_template?.settings) {
- parsedElasticsearchEntry['index_template.settings'] = expandDottedEntries(
- elasticsearch.index_template.settings
- );
+ const indexTemplateSettings =
+ elasticsearch?.index_template?.settings || elasticsearch?.['index_template.settings'];
+ if (indexTemplateSettings) {
+ parsedElasticsearchEntry['index_template.settings'] =
+ expandDottedEntries(indexTemplateSettings);
}
return parsedElasticsearchEntry;
From d4064c888a65bf1c170905a3a24a2f2f3adac179 Mon Sep 17 00:00:00 2001
From: Tre
Date: Fri, 4 Nov 2022 10:06:25 +0000
Subject: [PATCH 08/31] [Archive Migrations] security_solution-timelines
(#142363)
* [Archive Migrations] security_solution-timelines
Add new kbn archive with an index pattern
taken from the es archive.
Change the test to use both es and kbn archives.
Since all these objects are loaded into a space,
just delete the space afterwards instead of
unloading with es archiver.
Helps with: #102552
* Drop exclusive
* Drop unneeded fn.
* Lint in my pocket.
* Thanks to J. Buttner, "re-drop" non needed objects from the
original archive.
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
---
scripts/archive_migration_functions.sh | 29 ++++++++++++++----
.../security_solution/timeline_migrations.ts | 12 +++++---
.../timelines/7.15.0_space/data.json.gz | Bin 3247 -> 2832 bytes
.../security_solution/timelines/7.15.0_space | 20 ++++++++++++
4 files changed, 50 insertions(+), 11 deletions(-)
create mode 100644 x-pack/test/functional/fixtures/kbn_archiver/security_solution/timelines/7.15.0_space
diff --git a/scripts/archive_migration_functions.sh b/scripts/archive_migration_functions.sh
index 7dcba01175731..36c7f61abdba1 100755
--- a/scripts/archive_migration_functions.sh
+++ b/scripts/archive_migration_functions.sh
@@ -1,13 +1,30 @@
-standard_list="url,index-pattern,query,graph-workspace,tag,visualization,canvas-element,canvas-workpad,dashboard,search,lens,map,cases,uptime-dynamic-settings,osquery-saved-query,osquery-pack,infrastructure-ui-source,metrics-explorer-view,inventory-view,infrastructure-monitoring-log-view,apm-indices"
+#!/bin/bash
+
+# ??? Should we migrate
+# x-pack/test/functional/es_archives/security_solution/timelines/7.15.0_space
+# ### Yes, it needs migration
+# ### Saved Object type(s) that we care about:
+# index-pattern
+# ### Test file(s) that use it:
+# x-pack/test/api_integration/apis/security_solution/timeline_migrations.ts
+# ### Config(s) that govern the test file(s):
+# x-pack/test/api_integration/config.ts
+# The other types it contains:
+# config
+# index-pattern
+# siem-ui-timeline
+# siem-ui-timeline-note
+# siem-ui-timeline-pinned-event
+# space
-orig_archive="x-pack/test/functional/es_archives/banners/multispace"
-new_archive="x-pack/test/functional/fixtures/kbn_archiver/banners/multi_space"
+standard_list="url,index-pattern,query,graph-workspace,tag,visualization,canvas-element,canvas-workpad,dashboard,search,lens,map,cases,uptime-dynamic-settings,osquery-saved-query,osquery-pack,infrastructure-ui-source,metrics-explorer-view,inventory-view,infrastructure-monitoring-log-view,apm-indices"
-# newArchives=("x-pack/test/functional/fixtures/kbn_archiver/dashboard/session_in_space")
+orig_archive="x-pack/test/functional/es_archives/security_solution/timelines/7.15.0_space"
+new_archive="x-pack/test/functional/fixtures/kbn_archiver/security_solution/timelines/7.15.0_space"
-# testFiles=("x-pack/test/functional/apps/discover/preserve_url.ts")
+testFiles=("x-pack/test/api_integration/apis/security_solution/timeline_migrations.ts")
-test_config="x-pack/test/banners_functional/config.ts"
+test_config="x-pack/test/api_integration/config.ts"
list_stragglers() {
diff --git a/x-pack/test/api_integration/apis/security_solution/timeline_migrations.ts b/x-pack/test/api_integration/apis/security_solution/timeline_migrations.ts
index 47c6e28d9bab7..fe47677040d73 100644
--- a/x-pack/test/api_integration/apis/security_solution/timeline_migrations.ts
+++ b/x-pack/test/api_integration/apis/security_solution/timeline_migrations.ts
@@ -36,6 +36,8 @@ export default function ({ getService }: FtrProviderContext) {
describe('Timeline migrations', () => {
const esArchiver = getService('esArchiver');
const es = getService('es');
+ const kibanaServer = getService('kibanaServer');
+ const spacesService = getService('spaces');
describe('8.0 id migration', () => {
const resolveWithSpaceApi = '/s/awesome-space/api/timeline/resolve';
@@ -44,14 +46,14 @@ export default function ({ getService }: FtrProviderContext) {
await esArchiver.load(
'x-pack/test/functional/es_archives/security_solution/timelines/7.15.0_space'
);
- });
-
- after(async () => {
- await esArchiver.unload(
- 'x-pack/test/functional/es_archives/security_solution/timelines/7.15.0_space'
+ await kibanaServer.importExport.load(
+ 'x-pack/test/functional/fixtures/kbn_archiver/security_solution/timelines/7.15.0_space',
+ { space: 'awesome-space' }
);
});
+ after(async () => await spacesService.delete('awesome-space'));
+
describe('resolve', () => {
it('should return an aliasMatch outcome', async () => {
const resp = await supertest
diff --git a/x-pack/test/functional/es_archives/security_solution/timelines/7.15.0_space/data.json.gz b/x-pack/test/functional/es_archives/security_solution/timelines/7.15.0_space/data.json.gz
index 9036d465e3fcee3694ac527d169d6d84d14f002d..863d72c8f64d17bd6bcb4269b9dead1f2d065ebc 100644
GIT binary patch
literal 2832
zcmV+r3-9zFiwFP!000026YX4EbKAHTe)q57@TuJ~6oPl^so8eh`XSpiadz5985<-(
zi4%%cc=2UD{_i~iNtvXmt0h_XGVzRQ;s7`|92|TH(!-e~$=Usk$wNt|u_vGN7dIr#
z`I`s$1O5ysZzZ=Zji(HyGvcvf8n7wK1C#|*76uU;VijXo*A%20zKt+u9wLs7k!xAD
zZh0p2HARfh2aG7Y<6{oK2QG=o6|P#+I8VH%so{+mC+tHoPDmES(QhnC;TP{}4X`n&
zMg+QuOqpP9f!8ORg!wFCk;hUX`dYsIHg9grRAWOh66VvW-jn}(s6Ee#{>cbs$z`e5
zD9(@{gc(dt=e(5kg=+u8XG}9Poh`I;O$m0RJPccnT;%SSl##@n5I3yaYt4`6`({54
z#t{hzNglERWvQ10Gj6O`DGR${Q8pmns}*3D#NglQK=AXj0+8`IVPle&J+mZdt&u&F
zv2mQ-*BEc}ysZ}M4hW=|6DHlp$@d@{OEgHBm%(&W>`NImRJv-9!R}xw3ZCV66Nn@4
zNEmo*wZ6+quI7^*O8Kq!DtM<^0@KT{$TaVhga}iV!%HL?=TlgI>A3{KFv+;hZi8$h
zY(?A@rpv%+gujVL5q}FB^>QJ_U=)p_4=|w1q>2F`Pld0HG
zR$2b*NPd^6$vZcQ-lgeeB%hCD6pCMY$`bK_l>z^c&5`_VwR?bU=}CLU^Pn(TyBlZNy4|Pr(yemvva^XMDTci%qT5<@}c7tZ2Pe^X+T$*MOSro
zBb^^Go-I*%luuoj97g5b_x7ys&yzUGBrdiTCsG)XgQ&`?_-w0;Ktd2S>o$Yvd&t!F
z1sr}7r`evh|Eth@p>96Bh+h|(QS1Nb$2U_b(wy
zv%sqfBU5k{2v9emm}CurKqA^AXfRW(rHBhhyFHKHd0|dPt53p|b*j8VI1omfXmI*WrSTcq?i87`i&gusD~(+wA!Zx*I$P&_ViF3Nn8
zhuM1X0^eYtNHk_Gweb1)K&ql*gcYP1m)IO)XK1Jc@V@^wIF-eDsX?x{$j>@BZikh+
z&k7)<3QZ&o8*QbJeTr{CiB->%3)*z-x`;(kTiy=t^dY8VqJmUzHdemYP)|YG)x
zz80L%64>S!<*hmfh1QD!R$3YYUjX6qcSfJqLZ`Ls3Qx&RNq<2XqLZA)!iWtyi=E%u8L(G!0clKK4wcd)P;|
zrD0@x%wW`EhJ~$FqddX3YMrWVt(>gt)fg$rilpHmECPLd(l6yIl&Z1o)cK6AiPR-U
zGg6Ug&KV?@PZ?o>p!0M1x`m1KI*4EgMJK~PC_4MYD@947byo=Ml^B+h4uPK#M$AwFJ(S>+FXi&Pr$K()n^%={-PO4)7vLkp|Lp2dqm$uR&UU>jC0>55f*_lDYBo4G`-!(RMix5ZfJLYS#X
z?z)k?V@Aj)C}}5D$Fi;Cp*qsSp>z$jvjM!*4e=0$ZRYDP@=ZrUIvfxXQFV$K)?CxZ
zw(k;K?igqV%+rK=vI$q!fJJaHn-m3=DaUpg6_*|#yE?B#fHp;eHbsJ(XwVvV<<8!#
zL82B=v{oSt-5)ztv~k!KvRvKsRf{3hvTdYOn;{3olV#eLuP~P=zIrH!5>|Xg
z9#zmB)TK(5?8m2$hdf)k4`t1)8KcmN31A~
z*IB?^u_7#9wiWWY%(3c06
zmj~9upBHOx7q2N7EL-q9l@4^rAk-oj(y+;pZs!qT-(BpBDE&qF6A72EspNBDH~GU=
zl3wwR=2u*xIvFqCQ{C$|MZ5kY{3+~}2fy&WWAV>^i^V^tS@7c-h?vYmx~AEPzzH7d
zmg~Eo<|z!bXVq$&(QZGLnbje*8*<--lR5~$$rM{vXxh`iwt5WnEX(#4jIgb!NLPFX
zIn;L%qc&yOHx1KscdEzC6T0WsU6v+>UB0k%&bkY%7;xiyOKqZ)sH@o9)m7~N0|EU9
z0(M9B9c*i`a~epsO^S5pGUVE}jxbRbn_`TKr5p*>|CMF@I~cYA^z9b{^pE|40H!j>
z?!TF5zkvR3r`+AR02Wd*X7Ulf`DT7vI^MVJyugjX{Z~%rnZ(f!--n*-=>)p{amvP;
zg0*GGDGOs$#ky&3cA(lRCo(S;ZD>Hibq0>(tj&pxOGO_l3j7QdMcE-Idc!wE!WX$0
z62{{c{nQktc~_*lm7G@ocok4-DE+kWH1c62yKx+jec`$8YB&c^X8)G@o7-y{^QaFrdMYkEe1QrJ%ZO?yLL0vBLM9oArrpOT^`A
zYn!l@xmNd?x)Rs-kyN^{lx>o;+N$E%&a#~KDX8u_YgHBafgpO^tQElq#fBBP329w
zbX~x8uB}>F(GTU?`}Wl~v(NU`hNdHh(o9)c0&aR31R$AAa`
literal 3247
zcmV;g3{dkQiwFo^eOzGx17u-zVJ>QOZ*BnXU0HM6I1+x(uRv*EcBc%5;7vWPvy<8N
zgR|MhncAHwWrGALu|kmw4(s+&?I>I+J4rdgKPePgt1ccslnc;WO#sR)WMM)f{
zk@L_Ld*g%=J@+ONPP{PqoklVH#j6@aqz$FK9+R83Wr{XHJ{Vq2AL^`DUa%-@N7SVe
z4ICOXp|APdZ)I^&z0#r+`eDRd{L8PW<~vm@N5aa87h~I}Bs%CZn419tj8DK;0B}>iOhDI%98D
zRZ^v@C8KRGLUP+iR+x+y_fa}|gXbs)A(1Z~4GRm0J#t8}1aGZ-v~&g&^%DCE{H
zk=nI#RwK1AO5WLerq@QAGE^*OtELxLhI5=GGzvy*8Dfj>qBfekom`LlCOB`o1)YBAHD}A!
zfwqjmdY|h8Q8kAWvbGAu*rPL;dXSsM_X0XXGD5bh2rQZ}fW-|cy*a1WUX{**`ZfeA
z0u`ZuQA}ubk*hTb6X<$AvmhlEG*(pmciv;1;Mu%Y&NU^58>GJ9D9rbTL4*7Tisa#?n=E#)`L%P2L8SoebiGRxT!M
zTT6d?g^1^Qo4MB(`1zd8X#=BGCsT!LpTDU&-Mo3>zs?fi-~c#bkYHwwn<-Af
z6))xLxdIVQ(kO^Q7=SN0rkXqOBV~cE>rpZeNI2t-@Tw==!Z@>a
zJg1J30QTL3u>p^=nU7?X0fY(X#G6X9@(9z(Tc<3${R!*<4IuKWtt;SNUZpqMU4D
zRgkVIswNqhtXrrp@lKfgy^rI>b81vJg9>v{*Gw_d3IYKKq#;lnjF6#$AjZ3qM{gZJ
zC8E^De%vh1R9-L~5J6QpHG*XoDw@MSDXs!dOC}JxY?j1!HBC30hWY-(|4&LYbT`X_
zHZ>>S|KJtQapFvCv`V2NFP{7OPLO-TM@+aE7M40$BKvzzQZaRqdFTbrHC7OftC|bv
zG{Q-ih8VSruUp;JBo<4+m2>8+(Zz|pPdJ#+hFW-kO>$2kA#0?`Lx#RTY9k$p^HNP*
zZHSlBi)!a}w^GHdAVLb)gnhqOmSgNwc=JiDdK#UPc9G}PB<)4&1tc6Z%R}~)P>s$
zc#o&fCF-8~O+!r&J4BNZE+v)|@WrAtG=0|uyyRL)I}-3m0{%$Azu*Lp1pJYJKMd0x
z3HW_N#F2pC0HTis{9c>qNWi~Z+a3w{9+e*n_#**-B;ePudHKAOfH(BE#6c49rY_48
zk}%YfYeUtN2(*zdLz`m9augk#n(`C^{=Rw;T{NX0MaQ>o2wF6Jr%Xw}_Z*7B`V@R)
zN;SDn0P~f6ccagM<%`)`H_i#JQHu|RFh>@gNBAIsLC3G7Q!}^b=kEM
zMuu!UeXVSei7x`awTbwe$KD|kuN%82;$=z0$D8oaB;wZ$1vkr>ZzcW|4txu=YDSW?
zm~+m*AXi3&8H3IP(u=7VgRG*>B0^qRIX<)JiacP^E0dlvkQG6u!-`ovdzA?kGrD3;
zzt0X6`~XkE)g%hjImCoqoq(%+i-uw!q~aBu5`}q)c9q4dVqLNR#zDY`!((4UU52!B
z79Q__a|8Wn86N(^IgaC-Fd~peoqYf9G*E=(RGV9NWFh|0YTkdRn|1**#RF+oDEWP?@=w_~&`Ng^TgKoqT1
zNUQpyLq&ZYQfHlA0m`sd$CV8Vb;C5FN=ynZ#GVY@G+c?=SaO?b7SYfq041z=K#0m@
zwhF0SC7Z!i?ekWdXM@-VVLlgPQ^HU+H3eD*!qAdb1z8UB$cE8$^J_8BJ*r~ro_Wqo
z)6pvj_zaGEjmg(4zYKBBcG|}f*FwCM?jf!P%#2g9)b)`PR-4
z`)2|19Ija)?9al{B%@COXJ=}6!v^$+|8LP%+?pys-TxyG+{&*J)R~L=e1CMpco2Jk
zay=qRs=ZD;YBRfjr%~DXpdpYGS7mt@msQnVgV(PIcAIAQ1<}Z}md!wEFcf58Mu^3*
z^}U5-dSH2aU?u(8n=Ak;(*?^G{F71#s-hr%=^Y6`CwgfR-a!Cc%^%dT%Qm
zOdVVZ7n!g3b@K=Hv%wDY2bQ+`{DFzoWB%ZHk$*of@*lGuuPfVez*o7BNtEM7_|>_Y
zLvojgl=9g!On$md(gELSKHvn^-k^9xd9OqAcCR3v_6qjOtzY=Aj=p?eo%}P~5{IAs
zql&?P91UWf8ca0KZ?~DuOuq}Q*D3!H%NipA6%u}(
zE*_PkX?EX|-t&A6bqvFFB?OTv$xxMC30lOpAtffE$kjF7v7eNWDFeFae-t6MCts?wX#80{{v0<-(YwIp>MV&c0%ay`U?S6rj~j9%RHMU^q+RhecCA45Mn%`
z+wG*0tlmLiIX%3iv&L4td59#o+D#*7-D+PCC(y?qr%a?sNLhBAG7!>br0V*52dXE<
zMEZrKj5OwOt)XRED`O(l(;!L6ILRm3~2${Qua;8}*G&_=YOSN_BRYAHs!BxPwSBofs{A>M4lm
hB=vDr_||QrvpLM&dQw#%>gGD0^#89V>XLAH002`|HD~|;
diff --git a/x-pack/test/functional/fixtures/kbn_archiver/security_solution/timelines/7.15.0_space b/x-pack/test/functional/fixtures/kbn_archiver/security_solution/timelines/7.15.0_space
new file mode 100644
index 0000000000000..53acfb24cb301
--- /dev/null
+++ b/x-pack/test/functional/fixtures/kbn_archiver/security_solution/timelines/7.15.0_space
@@ -0,0 +1,20 @@
+{
+ "attributes": {
+ "fieldAttrs": "{}",
+ "fields": "[]",
+ "runtimeFieldMap": "{}",
+ "timeFieldName": "",
+ "title": ".kibana_7.15.0",
+ "typeMeta": "{}"
+ },
+ "coreMigrationVersion": "8.6.0",
+ "id": "cf0a7895-d367-5eff-9d71-8d6b58b0b5d9",
+ "migrationVersion": {
+ "index-pattern": "8.0.0"
+ },
+ "originId": "4f57d680-25f3-11ec-a981-b77847c6ef30",
+ "references": [],
+ "type": "index-pattern",
+ "updated_at": "2021-10-05T15:45:48.019Z",
+ "version": "WzIyLDJd"
+}
\ No newline at end of file
From b78f785b3c25792e1803f7c77512bc38d1a10afa Mon Sep 17 00:00:00 2001
From: Shahzad
Date: Fri, 4 Nov 2022 11:44:01 +0100
Subject: [PATCH 09/31] [Synthetics] User experience and monitor details, load
when in view (#144385)
Co-authored-by: Abdul Zahid
---
.../public/components/shared/index.tsx | 11 ++++
.../load_when_in_view/load_when_in_view.tsx | 52 +++++++++++++++++++
x-pack/plugins/observability/public/index.ts | 1 +
.../e2e/page_objects/monitor_management.tsx | 4 +-
.../monitor_summary/monitor_summary.tsx | 7 ++-
.../monitor_summary/test_runs_table.tsx | 2 +-
.../ux/e2e/journeys/ux_js_errors.journey.ts | 3 +-
.../journeys/ux_long_task_metric_journey.ts | 4 +-
.../journeys/ux_visitor_breakdown.journey.ts | 2 +
.../app/rum_dashboard/rum_dashboard.tsx | 16 +++++-
10 files changed, 92 insertions(+), 10 deletions(-)
create mode 100644 x-pack/plugins/observability/public/components/shared/load_when_in_view/load_when_in_view.tsx
diff --git a/x-pack/plugins/observability/public/components/shared/index.tsx b/x-pack/plugins/observability/public/components/shared/index.tsx
index c8d6771cc4892..fab875ebaf078 100644
--- a/x-pack/plugins/observability/public/components/shared/index.tsx
+++ b/x-pack/plugins/observability/public/components/shared/index.tsx
@@ -7,6 +7,7 @@
import React, { lazy, Suspense } from 'react';
import { EuiLoadingSpinner } from '@elastic/eui';
+import { LoadWhenInViewProps } from './load_when_in_view/load_when_in_view';
import type { CoreVitalProps, HeaderMenuPortalProps } from './types';
import type {
FieldValueSuggestionsProps,
@@ -102,3 +103,13 @@ export function DatePicker(props: DatePickerProps) {
);
}
+
+const LoadWhenInViewLazy = lazy(() => import('./load_when_in_view/load_when_in_view'));
+
+export function LoadWhenInView(props: LoadWhenInViewProps) {
+ return (
+ }>
+
+
+ );
+}
diff --git a/x-pack/plugins/observability/public/components/shared/load_when_in_view/load_when_in_view.tsx b/x-pack/plugins/observability/public/components/shared/load_when_in_view/load_when_in_view.tsx
new file mode 100644
index 0000000000000..16cb8c35b34a6
--- /dev/null
+++ b/x-pack/plugins/observability/public/components/shared/load_when_in_view/load_when_in_view.tsx
@@ -0,0 +1,52 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React, { useEffect, useState } from 'react';
+import { EuiLoadingContent } from '@elastic/eui';
+import useIntersection from 'react-use/lib/useIntersection';
+
+export interface LoadWhenInViewProps {
+ children: JSX.Element;
+ initialHeight?: string | number;
+ placeholderTitle: string;
+}
+
+// eslint-disable-next-line import/no-default-export
+export default function LoadWhenInView({
+ children,
+ placeholderTitle,
+ initialHeight = 100,
+}: LoadWhenInViewProps) {
+ const intersectionRef = React.useRef(null);
+ const intersection = useIntersection(intersectionRef, {
+ root: null,
+ rootMargin: '0px',
+ threshold: 0.25,
+ });
+
+ const [isVisible, setIsVisible] = useState(false);
+
+ useEffect(() => {
+ if (intersection && intersection.intersectionRatio > 0.25) {
+ setIsVisible(true);
+ }
+ }, [intersection, intersection?.intersectionRatio]);
+
+ return isVisible ? (
+ children
+ ) : (
+
+
+
+ );
+}
diff --git a/x-pack/plugins/observability/public/index.ts b/x-pack/plugins/observability/public/index.ts
index 8c083012448e6..dcd7a1cd08c93 100644
--- a/x-pack/plugins/observability/public/index.ts
+++ b/x-pack/plugins/observability/public/index.ts
@@ -55,6 +55,7 @@ export {
SelectableUrlList,
ExploratoryView,
DatePicker,
+ LoadWhenInView,
} from './components/shared';
export type { LazyObservabilityPageTemplateProps } from './components/shared';
diff --git a/x-pack/plugins/synthetics/e2e/page_objects/monitor_management.tsx b/x-pack/plugins/synthetics/e2e/page_objects/monitor_management.tsx
index 0046326bad612..3791aa8068176 100644
--- a/x-pack/plugins/synthetics/e2e/page_objects/monitor_management.tsx
+++ b/x-pack/plugins/synthetics/e2e/page_objects/monitor_management.tsx
@@ -5,7 +5,7 @@
* 2.0.
*/
import { expect, Page } from '@elastic/synthetics';
-import { getQuerystring } from '@kbn/observability-plugin/e2e/utils';
+import { getQuerystring, TIMEOUT_60_SEC } from '@kbn/observability-plugin/e2e/utils';
import { DataStream } from '../../common/runtime_types/monitor_management';
import { loginPageProvider } from './login';
import { utilsPageProvider } from './utils';
@@ -162,7 +162,7 @@ export function monitorManagementPageProvider({
async selectLocations({ locations }: { locations: string[] }) {
for (let i = 0; i < locations.length; i++) {
- await page.check(`text=${locations[i]}`);
+ await page.check(`text=${locations[i]}`, TIMEOUT_60_SEC);
}
},
diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/monitor_summary.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/monitor_summary.tsx
index 11ff2313c706f..03ccc403d0b30 100644
--- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/monitor_summary.tsx
+++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/monitor_summary.tsx
@@ -16,6 +16,7 @@ import {
EuiLoadingSpinner,
} from '@elastic/eui';
import { i18n } from '@kbn/i18n';
+import { LoadWhenInView } from '@kbn/observability-plugin/public';
import { useEarliestStartDate } from '../hooks/use_earliest_start_data';
import { MonitorErrorSparklines } from './monitor_error_sparklines';
@@ -27,7 +28,7 @@ import { DurationPanel } from './duration_panel';
import { MonitorDetailsPanel } from './monitor_details_panel';
import { AvailabilitySparklines } from './availability_sparklines';
import { LastTestRun } from './last_test_run';
-import { TestRunsTable } from './test_runs_table';
+import { LAST_10_TEST_RUNS, TestRunsTable } from './test_runs_table';
import { MonitorErrorsCount } from './monitor_errors_count';
export const MonitorSummary = () => {
@@ -121,7 +122,9 @@ export const MonitorSummary = () => {
-
+
+
+
>
);
};
diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/test_runs_table.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/test_runs_table.tsx
index d9b1beb45088a..f49d116f48798 100644
--- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/test_runs_table.tsx
+++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/test_runs_table.tsx
@@ -230,7 +230,7 @@ const TEST_RUNS = i18n.translate('xpack.synthetics.monitorDetails.summary.testRu
defaultMessage: 'Test Runs',
});
-const LAST_10_TEST_RUNS = i18n.translate(
+export const LAST_10_TEST_RUNS = i18n.translate(
'xpack.synthetics.monitorDetails.summary.lastTenTestRuns',
{
defaultMessage: 'Last 10 Test Runs',
diff --git a/x-pack/plugins/ux/e2e/journeys/ux_js_errors.journey.ts b/x-pack/plugins/ux/e2e/journeys/ux_js_errors.journey.ts
index 8e124d8a5e4b7..e29807a3edd5d 100644
--- a/x-pack/plugins/ux/e2e/journeys/ux_js_errors.journey.ts
+++ b/x-pack/plugins/ux/e2e/journeys/ux_js_errors.journey.ts
@@ -45,7 +45,8 @@ journey('UX JsErrors', async ({ page, params }) => {
step('Confirm error count', async () => {
// Wait until chart data is loaded
- page.waitForLoadState('networkidle');
+ await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
+ await page.waitForLoadState('networkidle');
await page.waitForSelector(`text=${jsErrorCount}`);
const jsErrors = await (
diff --git a/x-pack/plugins/ux/e2e/journeys/ux_long_task_metric_journey.ts b/x-pack/plugins/ux/e2e/journeys/ux_long_task_metric_journey.ts
index ba4cb014379e1..803a18e379e5e 100644
--- a/x-pack/plugins/ux/e2e/journeys/ux_long_task_metric_journey.ts
+++ b/x-pack/plugins/ux/e2e/journeys/ux_long_task_metric_journey.ts
@@ -54,9 +54,9 @@ journey('UX LongTaskMetrics', async ({ page, params }) => {
step('Confirm metrics values', async () => {
// Wait until chart data is loaded
- page.waitForLoadState('networkidle');
+ await page.waitForLoadState('networkidle');
// wait for first metric to be shown
- page.waitForSelector(`text="237 ms"`);
+ await page.waitForSelector(`text="237 ms"`);
let metric = await (
await page.waitForSelector(byTestId(longestMetric))
diff --git a/x-pack/plugins/ux/e2e/journeys/ux_visitor_breakdown.journey.ts b/x-pack/plugins/ux/e2e/journeys/ux_visitor_breakdown.journey.ts
index 88e0b90120ec7..be655789b2596 100644
--- a/x-pack/plugins/ux/e2e/journeys/ux_visitor_breakdown.journey.ts
+++ b/x-pack/plugins/ux/e2e/journeys/ux_visitor_breakdown.journey.ts
@@ -45,7 +45,9 @@ journey('UX Visitor Breakdown', async ({ page, params }) => {
step('Confirm charts are visible', async () => {
// Wait until chart data is loaded
+ await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
await page.waitForLoadState('networkidle');
+ await waitForLoadingToFinish({ page });
await Promise.all(
chartIds.map(
diff --git a/x-pack/plugins/ux/public/components/app/rum_dashboard/rum_dashboard.tsx b/x-pack/plugins/ux/public/components/app/rum_dashboard/rum_dashboard.tsx
index d6b454bd948f7..a05915dc816b6 100644
--- a/x-pack/plugins/ux/public/components/app/rum_dashboard/rum_dashboard.tsx
+++ b/x-pack/plugins/ux/public/components/app/rum_dashboard/rum_dashboard.tsx
@@ -7,6 +7,8 @@
import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
import React from 'react';
+import { LoadWhenInView } from '@kbn/observability-plugin/public';
+import { I18LABELS } from './translations';
import { UXMetrics } from './ux_metrics';
import { ImpactfulMetrics } from './impactful_metrics';
import { PageLoadAndViews } from './panels/page_load_and_views';
@@ -29,10 +31,20 @@ export function RumDashboard() {
-
+
+
+
-
+
+
+
);
From 92251b2567965d795940bfe2c7e30a2d6218efb9 Mon Sep 17 00:00:00 2001
From: Michael Dokolin
Date: Fri, 4 Nov 2022 13:20:46 +0100
Subject: [PATCH 10/31] [Expressions] Add a flag to opt out of the partial
results in the expressions (#144241)
* Add a flag to opt out of the partial results in the expressions
* Align the partial results flag with the expression loader
* Move the partial results throttling to the execution service
---
.../public/app/app.tsx | 2 +-
.../common/execution/execution.test.ts | 121 +++++++++-
.../expressions/common/execution/execution.ts | 223 +++++++++++-------
.../execution/execution_contract.test.ts | 2 +-
.../common/service/expressions_services.ts | 12 +
src/plugins/expressions/public/loader.ts | 68 +-----
6 files changed, 275 insertions(+), 153 deletions(-)
diff --git a/examples/partial_results_example/public/app/app.tsx b/examples/partial_results_example/public/app/app.tsx
index 8988b631a8e94..5f72fb356195a 100644
--- a/examples/partial_results_example/public/app/app.tsx
+++ b/examples/partial_results_example/public/app/app.tsx
@@ -37,7 +37,7 @@ export function App() {
useEffect(() => {
const subscription = expressions
- ?.execute(expression, null)
+ ?.execute(expression, null, { partial: true })
.getData()
.pipe(pluck('result'))
.subscribe((value) => setDatatable(value as Datatable));
diff --git a/src/plugins/expressions/common/execution/execution.test.ts b/src/plugins/expressions/common/execution/execution.test.ts
index 3575552401914..b3c3cf8ec92f0 100644
--- a/src/plugins/expressions/common/execution/execution.test.ts
+++ b/src/plugins/expressions/common/execution/execution.test.ts
@@ -404,7 +404,7 @@ describe('Execution', () => {
jest.useRealTimers();
});
- test('handles functions returning observables', () => {
+ test('handles partial results when functions return observables', () => {
testScheduler.run(({ cold, expectObservable }) => {
const arg = cold(' -a-b-c|', { a: 1, b: 2, c: 3 });
const expected = ' -a-b-c|';
@@ -417,7 +417,7 @@ describe('Execution', () => {
const executor = createUnitTestExecutor();
executor.registerFunction(observable);
- const result = executor.run('observable', null, {});
+ const result = executor.run('observable', null, { partial: true });
expectObservable(result).toBe(expected, {
a: { result: 1, partial: true },
@@ -426,6 +426,68 @@ describe('Execution', () => {
});
});
});
+
+ test('ignores partial results by default', () => {
+ testScheduler.run(({ cold, expectObservable, flush }) => {
+ const a = 1;
+ const b = 2;
+ const c = 3;
+ const arg = cold(' -a-b-c|', { a, b, c });
+ const expected = ' ------(c|)';
+ const spyFn = jest.fn((value) => value);
+ const executor = createUnitTestExecutor();
+ executor.registerFunction({
+ name: 'observable',
+ args: {},
+ help: '',
+ fn: () => arg,
+ });
+ executor.registerFunction({
+ name: 'spy',
+ args: {},
+ help: '',
+ fn: (input) => spyFn(input),
+ });
+
+ const result = executor.run('observable | spy', null);
+
+ expectObservable(result).toBe(expected, {
+ c: { result: c, partial: false },
+ });
+
+ flush();
+
+ expect(spyFn).toHaveBeenCalledTimes(1);
+ expect(spyFn).toHaveBeenCalledWith(c);
+ });
+ });
+
+ it('throttles partial results', async () => {
+ testScheduler.run(({ cold, expectObservable }) => {
+ const a = 1;
+ const b = 2;
+ const c = 3;
+ const d = 4;
+ const observable = cold('a 5ms b 5ms c 10ms (d|)', { a, b, c, d });
+ const expected = ' a 19ms c 2ms (d|)';
+
+ const executor = createUnitTestExecutor();
+ executor.registerFunction({
+ name: 'observable',
+ args: {},
+ help: '',
+ fn: () => observable,
+ });
+
+ const result = executor.run('observable', null, { partial: true, throttle: 20 });
+
+ expectObservable(result).toBe(expected, {
+ a: expect.objectContaining({ result: a }),
+ c: expect.objectContaining({ result: c }),
+ d: expect.objectContaining({ result: d }),
+ });
+ });
+ });
});
describe('when function throws', () => {
@@ -525,7 +587,7 @@ describe('Execution', () => {
fn: (value) => spyFn(value),
});
- const result = executor.run('observable | flaky | spy', null, {});
+ const result = executor.run('observable | flaky | spy', null, { partial: true });
expectObservable(result).toBe('abc|', {
a: { partial: true, result: a },
@@ -659,7 +721,7 @@ describe('Execution', () => {
const executor = createUnitTestExecutor();
executor.registerFunction(observable);
- const result = executor.run('add val={observable}', 1, {});
+ const result = executor.run('add val={observable}', 1, { partial: true });
expectObservable(result).toBe(expected, {
a: { partial: true, result: { type: 'num', value: 2 } },
@@ -705,7 +767,11 @@ describe('Execution', () => {
executor.registerFunction(observable2);
executor.registerFunction(max);
- const result = executor.run('max val1={observable1} val2={observable2}', {});
+ const result = executor.run(
+ 'max val1={observable1} val2={observable2}',
+ {},
+ { partial: true }
+ );
expectObservable(result).toBe(expected, {
a: { partial: true, result: { type: 'num', value: 1 } },
@@ -730,7 +796,7 @@ describe('Execution', () => {
const executor = createUnitTestExecutor();
executor.registerFunction(observable);
- const result = executor.run('add val={observable}', 1, {});
+ const result = executor.run('add val={observable}', 1, { partial: true });
expectObservable(result).toBe(expected, {
a: expect.objectContaining({ result: { type: 'num', value: 2 } }),
@@ -788,7 +854,7 @@ describe('Execution', () => {
fn: (input, args) => spyFn(input, args),
});
- const result = executor.run('spy arg={observable | flaky}', null, {});
+ const result = executor.run('spy arg={observable | flaky}', null, { partial: true });
expectObservable(result).toBe('abcd|', {
a: { partial: true, result: a },
@@ -818,6 +884,47 @@ describe('Execution', () => {
expect(spyFn).toHaveBeenNthCalledWith(2, null, { arg: d });
});
});
+
+ test('supports opting out of partial results in sub-expression', async () => {
+ testScheduler.run(({ cold, expectObservable, flush }) => {
+ const a = 1;
+ const b = 2;
+ const c = 3;
+ const observable$ = cold('abc|', { a, b, c });
+ const expected = ' ---(c|)';
+ const spyFn = jest.fn((input, { arg }) => arg);
+
+ const executor = createUnitTestExecutor();
+ executor.registerFunction({
+ name: 'observable',
+ args: {},
+ help: '',
+ fn: () => observable$,
+ });
+ executor.registerFunction({
+ name: 'spy',
+ args: {
+ arg: {
+ help: '',
+ types: ['number'],
+ },
+ },
+ help: '',
+ fn: (input, args) => spyFn(input, args),
+ });
+
+ const result = executor.run('spy arg={observable}', null);
+
+ expectObservable(result).toBe(expected, {
+ c: { partial: false, result: c },
+ });
+
+ flush();
+
+ expect(spyFn).toHaveBeenCalledTimes(1);
+ expect(spyFn).toHaveBeenCalledWith(null, { arg: c });
+ });
+ });
});
describe('when arguments are missing', () => {
diff --git a/src/plugins/expressions/common/execution/execution.ts b/src/plugins/expressions/common/execution/execution.ts
index 8edf6d3227c02..d8932f234e39a 100644
--- a/src/plugins/expressions/common/execution/execution.ts
+++ b/src/plugins/expressions/common/execution/execution.ts
@@ -10,16 +10,21 @@ import { i18n } from '@kbn/i18n';
import type { Logger } from '@kbn/logging';
import { isPromise } from '@kbn/std';
import { ObservableLike, UnwrapObservable } from '@kbn/utility-types';
-import { keys, last, mapValues, reduce, zipObject } from 'lodash';
+import { keys, last as lastOf, mapValues, reduce, zipObject } from 'lodash';
import {
combineLatest,
defer,
from,
+ identity,
isObservable,
+ last,
of,
+ takeWhile,
throwError,
+ timer,
Observable,
ReplaySubject,
+ Subscription,
} from 'rxjs';
import { catchError, finalize, map, pluck, shareReplay, switchMap, tap } from 'rxjs/operators';
import { now, AbortError } from '@kbn/kibana-utils-plugin/common';
@@ -99,6 +104,61 @@ function markPartial() {
});
}
+/**
+ * RxJS' `throttle` operator does not emit the last value immediately when the source observable is completed.
+ * Instead, it waits for the next throttle period to emit that.
+ * It might cause delays until we get the final value, even though it is already there.
+ * @see https://github.com/ReactiveX/rxjs/blob/master/src/internal/operators/throttle.ts#L121
+ */
+function throttle(timeout: number) {
+ return (source: Observable): Observable =>
+ new Observable((subscriber) => {
+ let latest: T | undefined;
+ let hasValue = false;
+
+ const emit = () => {
+ if (hasValue) {
+ subscriber.next(latest);
+ hasValue = false;
+ latest = undefined;
+ }
+ };
+
+ let throttled: Subscription | undefined;
+ const timer$ = timer(0, timeout).pipe(
+ takeWhile(() => hasValue),
+ finalize(() => {
+ subscriber.remove(throttled!);
+ throttled = undefined;
+ })
+ );
+
+ subscriber.add(
+ source.subscribe({
+ next: (value) => {
+ latest = value;
+ hasValue = true;
+
+ if (!throttled) {
+ throttled = timer$.subscribe(emit);
+ subscriber.add(throttled);
+ }
+ },
+ error: (error) => subscriber.error(error),
+ complete: () => {
+ emit();
+ subscriber.complete();
+ },
+ })
+ );
+
+ subscriber.add(() => {
+ hasValue = false;
+ latest = undefined;
+ });
+ });
+}
+
function takeUntilAborted(signal: AbortSignal) {
return (source: Observable) =>
new Observable((subscriber) => {
@@ -235,7 +295,10 @@ export class Execution<
switchMap((input) =>
this.invokeChain(this.state.get().ast.chain, input).pipe(
takeUntilAborted(this.abortController.signal),
- markPartial()
+ markPartial(),
+ this.execution.params.partial && this.execution.params.throttle
+ ? throttle(this.execution.params.throttle)
+ : identity
)
),
catchError((error) => {
@@ -303,89 +366,85 @@ export class Execution<
return of(input as ChainOutput);
}
- return of(input).pipe(
- switchMap((currentInput) => {
- const { function: fnName, arguments: fnArgs } = head;
- const fn = getByAlias(this.state.get().functions, fnName, this.execution.params.namespace);
-
- if (!fn) {
- throw createError({
- name: 'fn not found',
- message: i18n.translate('expressions.execution.functionNotFound', {
- defaultMessage: `Function {fnName} could not be found.`,
- values: {
- fnName,
- },
- }),
- });
- }
+ return defer(() => {
+ const { function: fnName, arguments: fnArgs } = head;
+ const fn = getByAlias(this.state.get().functions, fnName, this.execution.params.namespace);
- if (fn.disabled) {
- throw createError({
- name: 'fn is disabled',
- message: i18n.translate('expressions.execution.functionDisabled', {
- defaultMessage: `Function {fnName} is disabled.`,
- values: {
- fnName,
- },
- }),
- });
- }
+ if (!fn) {
+ throw createError({
+ name: 'fn not found',
+ message: i18n.translate('expressions.execution.functionNotFound', {
+ defaultMessage: `Function {fnName} could not be found.`,
+ values: {
+ fnName,
+ },
+ }),
+ });
+ }
- if (fn.deprecated) {
- this.logger?.warn(`Function '${fnName}' is deprecated`);
- }
+ if (fn.disabled) {
+ throw createError({
+ name: 'fn is disabled',
+ message: i18n.translate('expressions.execution.functionDisabled', {
+ defaultMessage: `Function {fnName} is disabled.`,
+ values: {
+ fnName,
+ },
+ }),
+ });
+ }
- if (this.execution.params.debug) {
- head.debug = {
- args: {},
- duration: 0,
- fn: fn.name,
- input: currentInput,
- success: true,
- };
- }
+ if (fn.deprecated) {
+ this.logger?.warn(`Function '${fnName}' is deprecated`);
+ }
- const timeStart = this.execution.params.debug ? now() : 0;
-
- // `resolveArgs` returns an object because the arguments themselves might
- // actually have `then` or `subscribe` methods which would be treated as a `Promise`
- // or an `Observable` accordingly.
- return this.resolveArgs(fn, currentInput, fnArgs).pipe(
- switchMap((resolvedArgs) => {
- const args$ = isExpressionValueError(resolvedArgs)
- ? throwError(resolvedArgs.error)
- : of(resolvedArgs);
-
- return args$.pipe(
- tap((args) => this.execution.params.debug && Object.assign(head.debug, { args })),
- switchMap((args) => this.invokeFunction(fn, currentInput, args)),
- switchMap((output) =>
- getType(output) === 'error' ? throwError(output) : of(output)
- ),
- tap((output) => this.execution.params.debug && Object.assign(head.debug, { output })),
- switchMap((output) => this.invokeChain(tail, output)),
- catchError((rawError) => {
- const error = createError(rawError);
- error.error.message = `[${fnName}] > ${error.error.message}`;
-
- if (this.execution.params.debug) {
- Object.assign(head.debug, { error, rawError, success: false });
- }
-
- return of(error);
- })
- );
- }),
- finalize(() => {
- if (this.execution.params.debug) {
- Object.assign(head.debug, { duration: now() - timeStart });
- }
- })
- );
- }),
- catchError((error) => of(error))
- );
+ if (this.execution.params.debug) {
+ head.debug = {
+ input,
+ args: {},
+ duration: 0,
+ fn: fn.name,
+ success: true,
+ };
+ }
+
+ const timeStart = this.execution.params.debug ? now() : 0;
+
+ // `resolveArgs` returns an object because the arguments themselves might
+ // actually have `then` or `subscribe` methods which would be treated as a `Promise`
+ // or an `Observable` accordingly.
+ return this.resolveArgs(fn, input, fnArgs).pipe(
+ switchMap((resolvedArgs) => {
+ const args$ = isExpressionValueError(resolvedArgs)
+ ? throwError(resolvedArgs.error)
+ : of(resolvedArgs);
+
+ return args$.pipe(
+ tap((args) => this.execution.params.debug && Object.assign(head.debug, { args })),
+ switchMap((args) => this.invokeFunction(fn, input, args)),
+ this.execution.params.partial ? identity : last(),
+ switchMap((output) => (getType(output) === 'error' ? throwError(output) : of(output))),
+ tap((output) => this.execution.params.debug && Object.assign(head.debug, { output })),
+ switchMap((output) => this.invokeChain(tail, output)),
+ catchError((rawError) => {
+ const error = createError(rawError);
+ error.error.message = `[${fnName}] > ${error.error.message}`;
+
+ if (this.execution.params.debug) {
+ Object.assign(head.debug, { error, rawError, success: false });
+ }
+
+ return of(error);
+ })
+ );
+ }),
+ finalize(() => {
+ if (this.execution.params.debug) {
+ Object.assign(head.debug, { duration: now() - timeStart });
+ }
+ })
+ );
+ }).pipe(catchError((error) => of(error)));
}
invokeFunction(
@@ -581,7 +640,7 @@ export class Execution<
// function which would be treated as a promise
zipObject(argNames, values as unknown[][]),
// Just return the last unless the argument definition allows multiple
- (argValues, argName) => (argDefs[argName].multi ? argValues : last(argValues))
+ (argValues, argName) => (argDefs[argName].multi ? argValues : lastOf(argValues))
)
)
);
diff --git a/src/plugins/expressions/common/execution/execution_contract.test.ts b/src/plugins/expressions/common/execution/execution_contract.test.ts
index 6b0fa0d0db592..6934720d2d70c 100644
--- a/src/plugins/expressions/common/execution/execution_contract.test.ts
+++ b/src/plugins/expressions/common/execution/execution_contract.test.ts
@@ -141,7 +141,7 @@ describe('ExecutionContract', () => {
const executor = createUnitTestExecutor();
executor.registerFunction(observable);
- const execution = executor.createExecution('observable');
+ const execution = executor.createExecution('observable', { partial: true });
execution.start(null);
await execution.result.pipe(first()).toPromise();
diff --git a/src/plugins/expressions/common/service/expressions_services.ts b/src/plugins/expressions/common/service/expressions_services.ts
index 097b0823a98f0..0480e4966c01f 100644
--- a/src/plugins/expressions/common/service/expressions_services.ts
+++ b/src/plugins/expressions/common/service/expressions_services.ts
@@ -161,6 +161,18 @@ export interface ExpressionExecutionParams {
executionContext?: KibanaExecutionContext;
namespace?: string;
+
+ /**
+ * Toggles the partial results support.
+ * @default false
+ */
+ partial?: boolean;
+
+ /**
+ * Throttling of partial results in milliseconds. 0 is disabling the throttling.
+ * @deafult 0
+ */
+ throttle?: number;
}
/**
diff --git a/src/plugins/expressions/public/loader.ts b/src/plugins/expressions/public/loader.ts
index 5b1ae822e1a2c..e2b9d8ab22fb7 100644
--- a/src/plugins/expressions/public/loader.ts
+++ b/src/plugins/expressions/public/loader.ts
@@ -6,8 +6,8 @@
* Side Public License, v 1.
*/
-import { BehaviorSubject, Observable, Subject, Subscription, identity, timer } from 'rxjs';
-import { delay, filter, finalize, map, shareReplay, takeWhile } from 'rxjs/operators';
+import { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs';
+import { delay, filter, map, shareReplay } from 'rxjs/operators';
import { defaults } from 'lodash';
import { SerializableRecord, UnwrapObservable } from '@kbn/utility-types';
import { Adapters } from '@kbn/inspector-plugin/public';
@@ -20,61 +20,6 @@ import { getExpressionsService } from './services';
type Data = unknown;
-/**
- * RxJS' `throttle` operator does not emit the last value immediately when the source observable is completed.
- * Instead, it waits for the next throttle period to emit that.
- * It might cause delays until we get the final value, even though it is already there.
- * @see https://github.com/ReactiveX/rxjs/blob/master/src/internal/operators/throttle.ts#L121
- */
-function throttle(timeout: number) {
- return (source: Observable): Observable =>
- new Observable((subscriber) => {
- let latest: T | undefined;
- let hasValue = false;
-
- const emit = () => {
- if (hasValue) {
- subscriber.next(latest);
- hasValue = false;
- latest = undefined;
- }
- };
-
- let throttled: Subscription | undefined;
- const timer$ = timer(0, timeout).pipe(
- takeWhile(() => hasValue),
- finalize(() => {
- subscriber.remove(throttled!);
- throttled = undefined;
- })
- );
-
- subscriber.add(
- source.subscribe({
- next: (value) => {
- latest = value;
- hasValue = true;
-
- if (!throttled) {
- throttled = timer$.subscribe(emit);
- subscriber.add(throttled);
- }
- },
- error: (error) => subscriber.error(error),
- complete: () => {
- emit();
- subscriber.complete();
- },
- })
- );
-
- subscriber.add(() => {
- hasValue = false;
- latest = undefined;
- });
- });
-}
-
export class ExpressionLoader {
data$: ReturnType;
update$: ExpressionRenderHandler['update$'];
@@ -203,14 +148,13 @@ export class ExpressionLoader {
syncCursor: params?.syncCursor,
syncTooltips: params.syncTooltips,
executionContext: params.executionContext,
+ partial: params.partial,
+ throttle: params.throttle,
});
this.subscription = this.execution
.getData()
- .pipe(
- delay(0), // delaying until the next tick since we execute the expression in the constructor
- filter(({ partial }) => params.partial || !partial),
- params.partial && params.throttle ? throttle(params.throttle) : identity
- )
+ // delaying until the next tick since we execute the expression in the constructor
+ .pipe(delay(0))
.subscribe((value) => this.dataSubject.next(value));
};
From d2c5ce8274fd6fa0e42e95d52584b4e80a45beb3 Mon Sep 17 00:00:00 2001
From: Wafaa Nasr
Date: Fri, 4 Nov 2022 13:24:44 +0100
Subject: [PATCH 11/31] [Security Solution][Exceptions] Complete List-Header's
use-cases (#144383)
* kbn add more tests + enable user to export even when readonly is true
* fix test
* fix onblur one another field removes required of another
* add tests
* fix test
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
---
.../__snapshots__/comments.test.tsx.snap | 61 +
.../comments/comments.test.tsx | 9 +
.../exception_item_card/comments/index.tsx | 1 +
.../exception_item_card/meta/meta.test.tsx | 4 +-
.../__snapshots__/header_menu.test.tsx.snap | 196 +++
.../src/header_menu/header_menu.test.tsx | 12 +-
.../src/header_menu/index.tsx | 2 +
.../__snapshots__/list_header.test.tsx.snap | 1225 +++++++++++------
.../__snapshots__/edit_modal.test.tsx.snap | 33 +-
.../edit_modal/edit_modal.test.tsx | 90 +-
.../src/list_header/edit_modal/index.tsx | 42 +-
.../edit_modal/use_edit_modal.test.ts | 43 +
.../list_header/edit_modal/use_edit_modal.ts | 54 +
.../src/list_header/index.tsx | 15 +-
.../src/list_header/list_header.styles.ts | 14 +-
.../src/list_header/list_header.test.tsx | 29 +-
.../__snapshots__/menu_items.test.tsx.snap | 790 +++++++++++
.../src/list_header/menu_items/index.tsx | 35 +-
.../menu_items/menu_items.test.tsx | 47 +
.../src/list_header/use_list_header.ts | 4 +-
.../src/mocks/header.mock.ts | 15 +
.../src/mocks/rule_references.mock.ts | 2 +-
.../mocks/security_link_component.mock.tsx | 2 +-
.../text_with_edit.test.tsx.snap | 100 +-
.../src/text_with_edit/index.tsx | 35 +-
.../text_with_edit/text_with_edit.styles.ts | 25 +
.../src/translations.ts | 7 +
.../src/types/index.ts | 2 +-
28 files changed, 2378 insertions(+), 516 deletions(-)
create mode 100644 packages/kbn-securitysolution-exception-list-components/src/list_header/edit_modal/use_edit_modal.test.ts
create mode 100644 packages/kbn-securitysolution-exception-list-components/src/list_header/edit_modal/use_edit_modal.ts
create mode 100644 packages/kbn-securitysolution-exception-list-components/src/text_with_edit/text_with_edit.styles.ts
diff --git a/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/comments/__snapshots__/comments.test.tsx.snap b/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/comments/__snapshots__/comments.test.tsx.snap
index 5c0dba4573e06..27df7b34bf313 100644
--- a/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/comments/__snapshots__/comments.test.tsx.snap
+++ b/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/comments/__snapshots__/comments.test.tsx.snap
@@ -1,5 +1,66 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
+exports[`ExceptionItemCardComments should not render comments when the length is falsy 1`] = `
+Object {
+ "asFragment": [Function],
+ "baseElement":
+
+ ,
+ "container":
,
+ "debug": [Function],
+ "findAllByAltText": [Function],
+ "findAllByDisplayValue": [Function],
+ "findAllByLabelText": [Function],
+ "findAllByPlaceholderText": [Function],
+ "findAllByRole": [Function],
+ "findAllByTestId": [Function],
+ "findAllByText": [Function],
+ "findAllByTitle": [Function],
+ "findByAltText": [Function],
+ "findByDisplayValue": [Function],
+ "findByLabelText": [Function],
+ "findByPlaceholderText": [Function],
+ "findByRole": [Function],
+ "findByTestId": [Function],
+ "findByText": [Function],
+ "findByTitle": [Function],
+ "getAllByAltText": [Function],
+ "getAllByDisplayValue": [Function],
+ "getAllByLabelText": [Function],
+ "getAllByPlaceholderText": [Function],
+ "getAllByRole": [Function],
+ "getAllByTestId": [Function],
+ "getAllByText": [Function],
+ "getAllByTitle": [Function],
+ "getByAltText": [Function],
+ "getByDisplayValue": [Function],
+ "getByLabelText": [Function],
+ "getByPlaceholderText": [Function],
+ "getByRole": [Function],
+ "getByTestId": [Function],
+ "getByText": [Function],
+ "getByTitle": [Function],
+ "queryAllByAltText": [Function],
+ "queryAllByDisplayValue": [Function],
+ "queryAllByLabelText": [Function],
+ "queryAllByPlaceholderText": [Function],
+ "queryAllByRole": [Function],
+ "queryAllByTestId": [Function],
+ "queryAllByText": [Function],
+ "queryAllByTitle": [Function],
+ "queryByAltText": [Function],
+ "queryByDisplayValue": [Function],
+ "queryByLabelText": [Function],
+ "queryByPlaceholderText": [Function],
+ "queryByRole": [Function],
+ "queryByTestId": [Function],
+ "queryByText": [Function],
+ "queryByTitle": [Function],
+ "rerender": [Function],
+ "unmount": [Function],
+}
+`;
+
exports[`ExceptionItemCardComments should render comments panel closed 1`] = `
Object {
"asFragment": [Function],
diff --git a/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/comments/comments.test.tsx b/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/comments/comments.test.tsx
index 64b2d1c9e3a83..9f81c19349f93 100644
--- a/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/comments/comments.test.tsx
+++ b/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/comments/comments.test.tsx
@@ -13,6 +13,15 @@ import * as i18n from '../translations';
const comments = mockGetFormattedComments();
describe('ExceptionItemCardComments', () => {
+ it('should not render comments when the length is falsy', () => {
+ const wrapper = render(
+
+ );
+ expect(wrapper).toMatchSnapshot();
+
+ expect(wrapper.queryByTestId('ExceptionItemCardCommentsContainer')).not.toBeInTheDocument();
+ });
+
it('should render comments panel closed', () => {
const wrapper = render(
(
({ comments, dataTestSubj }) => {
+ if (!comments.length) return null;
return (
{
item={getExceptionListItemSchemaMock()}
rules={[
{
- exception_lists: [
+ exception_list: [
{
id: '123',
list_id: 'i_exist',
@@ -98,7 +98,7 @@ describe('ExceptionItemCardMetaInfo', () => {
rule_id: 'rule-2',
},
{
- exception_lists: [
+ exception_list: [
{
id: '123',
list_id: 'i_exist',
diff --git a/packages/kbn-securitysolution-exception-list-components/src/header_menu/__snapshots__/header_menu.test.tsx.snap b/packages/kbn-securitysolution-exception-list-components/src/header_menu/__snapshots__/header_menu.test.tsx.snap
index dd808cfd1889c..2e8afcea7cc3e 100644
--- a/packages/kbn-securitysolution-exception-list-components/src/header_menu/__snapshots__/header_menu.test.tsx.snap
+++ b/packages/kbn-securitysolution-exception-list-components/src/header_menu/__snapshots__/header_menu.test.tsx.snap
@@ -1,5 +1,201 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
+exports[`HeaderMenu should render button icon disabled 1`] = `
+Object {
+ "asFragment": [Function],
+ "baseElement":
+
+
+
+
+
+
+ You are in a dialog. To close this dialog, hit escape.
+
+
+
+
+
+
+
+ ,
+ "container": ,
+ "debug": [Function],
+ "findAllByAltText": [Function],
+ "findAllByDisplayValue": [Function],
+ "findAllByLabelText": [Function],
+ "findAllByPlaceholderText": [Function],
+ "findAllByRole": [Function],
+ "findAllByTestId": [Function],
+ "findAllByText": [Function],
+ "findAllByTitle": [Function],
+ "findByAltText": [Function],
+ "findByDisplayValue": [Function],
+ "findByLabelText": [Function],
+ "findByPlaceholderText": [Function],
+ "findByRole": [Function],
+ "findByTestId": [Function],
+ "findByText": [Function],
+ "findByTitle": [Function],
+ "getAllByAltText": [Function],
+ "getAllByDisplayValue": [Function],
+ "getAllByLabelText": [Function],
+ "getAllByPlaceholderText": [Function],
+ "getAllByRole": [Function],
+ "getAllByTestId": [Function],
+ "getAllByText": [Function],
+ "getAllByTitle": [Function],
+ "getByAltText": [Function],
+ "getByDisplayValue": [Function],
+ "getByLabelText": [Function],
+ "getByPlaceholderText": [Function],
+ "getByRole": [Function],
+ "getByTestId": [Function],
+ "getByText": [Function],
+ "getByTitle": [Function],
+ "queryAllByAltText": [Function],
+ "queryAllByDisplayValue": [Function],
+ "queryAllByLabelText": [Function],
+ "queryAllByPlaceholderText": [Function],
+ "queryAllByRole": [Function],
+ "queryAllByTestId": [Function],
+ "queryAllByText": [Function],
+ "queryAllByTitle": [Function],
+ "queryByAltText": [Function],
+ "queryByDisplayValue": [Function],
+ "queryByLabelText": [Function],
+ "queryByPlaceholderText": [Function],
+ "queryByRole": [Function],
+ "queryByTestId": [Function],
+ "queryByText": [Function],
+ "queryByTitle": [Function],
+ "rerender": [Function],
+ "unmount": [Function],
+}
+`;
+
exports[`HeaderMenu should render button icon with default settings 1`] = `
Object {
"asFragment": [Function],
diff --git a/packages/kbn-securitysolution-exception-list-components/src/header_menu/header_menu.test.tsx b/packages/kbn-securitysolution-exception-list-components/src/header_menu/header_menu.test.tsx
index b07079c721ff7..8b5775264e230 100644
--- a/packages/kbn-securitysolution-exception-list-components/src/header_menu/header_menu.test.tsx
+++ b/packages/kbn-securitysolution-exception-list-components/src/header_menu/header_menu.test.tsx
@@ -8,7 +8,7 @@
import { fireEvent, render } from '@testing-library/react';
import React from 'react';
import { HeaderMenu } from '.';
-import { actions } from '../mocks/header.mock';
+import { actions, actionsWithDisabledDelete } from '../mocks/header.mock';
import { getSecurityLinkAction } from '../mocks/security_link_component.mock';
describe('HeaderMenu', () => {
@@ -21,6 +21,16 @@ describe('HeaderMenu', () => {
expect(wrapper.queryByTestId('EmptyButton')).not.toBeInTheDocument();
expect(wrapper.queryByTestId('MenuPanel')).not.toBeInTheDocument();
});
+ it('should render button icon disabled', () => {
+ const wrapper = render(
+
+ );
+
+ fireEvent.click(wrapper.getByTestId('ButtonIcon'));
+ expect(wrapper).toMatchSnapshot();
+ expect(wrapper.getByTestId('ActionItemdelete')).toBeDisabled();
+ expect(wrapper.getByTestId('ActionItemedit')).toBeEnabled();
+ });
it('should render empty button icon with different icon settings', () => {
const wrapper = render(
diff --git a/packages/kbn-securitysolution-exception-list-components/src/header_menu/index.tsx b/packages/kbn-securitysolution-exception-list-components/src/header_menu/index.tsx
index 43154a865a436..ba6f3c7beff5d 100644
--- a/packages/kbn-securitysolution-exception-list-components/src/header_menu/index.tsx
+++ b/packages/kbn-securitysolution-exception-list-components/src/header_menu/index.tsx
@@ -24,6 +24,7 @@ interface Action {
key: string;
icon: string;
label: string | boolean;
+ disabled?: boolean;
onClick: () => void;
}
interface HeaderMenuComponentProps {
@@ -63,6 +64,7 @@ const HeaderMenuComponent: FC = ({
data-test-subj={`${dataTestSubj || ''}ActionItem${action.key}`}
key={action.key}
icon={action.icon}
+ disabled={action.disabled}
layoutAlign="center"
onClick={() => {
onClosePopover();
diff --git a/packages/kbn-securitysolution-exception-list-components/src/list_header/__snapshots__/list_header.test.tsx.snap b/packages/kbn-securitysolution-exception-list-components/src/list_header/__snapshots__/list_header.test.tsx.snap
index 98f026e4ce947..c3146235b9ab3 100644
--- a/packages/kbn-securitysolution-exception-list-components/src/list_header/__snapshots__/list_header.test.tsx.snap
+++ b/packages/kbn-securitysolution-exception-list-components/src/list_header/__snapshots__/list_header.test.tsx.snap
@@ -58,26 +58,34 @@ Object {
class="euiTitle emotion-euiTitle-l"
>
-
- List Name
-
-
-
+ data-test-subj="TitleText"
+ >
+ List Name
+
+
+
+
+
+
+
-
- List description
-
-
-
+ css="You have tried to stringify object returned from \`css\` function. It isn't supposed to be used directly (e.g. as value of the \`className\` prop), but rather handed to emotion so it can handle it (e.g. as value of \`css\` prop)."
+ data-test-subj="DescriptionText"
+ >
+ List description
+
+
+
+
+
+
+
-
-
-
-
-
-
-
- Linked to 0 rules
-
-
-
-
-
-
+ Linked to 0 rules
+
+
+
+
+
+