diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md
new file mode 100644
index 0000000000000..2b897db7bba4c
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md
@@ -0,0 +1,22 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [createIndexAliasNotFoundError](./kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md)
+
+## SavedObjectsErrorHelpers.createIndexAliasNotFoundError() method
+
+Signature:
+
+```typescript
+static createIndexAliasNotFoundError(alias: string): DecoratedError;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| alias | string
| |
+
+Returns:
+
+`DecoratedError`
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md
new file mode 100644
index 0000000000000..c7e10fc42ead1
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md
@@ -0,0 +1,23 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [decorateIndexAliasNotFoundError](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md)
+
+## SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError() method
+
+Signature:
+
+```typescript
+static decorateIndexAliasNotFoundError(error: Error, alias: string): DecoratedError;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| error | Error
| |
+| alias | string
| |
+
+Returns:
+
+`DecoratedError`
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md
new file mode 100644
index 0000000000000..4b4ede2f77a7e
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md
@@ -0,0 +1,22 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [isGeneralError](./kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md)
+
+## SavedObjectsErrorHelpers.isGeneralError() method
+
+Signature:
+
+```typescript
+static isGeneralError(error: Error | DecoratedError): boolean;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| error | Error | DecoratedError
| |
+
+Returns:
+
+`boolean`
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.md
index 9b69012ed5f12..2dc78f2df3a83 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.md
@@ -18,6 +18,7 @@ export declare class SavedObjectsErrorHelpers
| [createBadRequestError(reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.createbadrequesterror.md) | static
| |
| [createConflictError(type, id, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.createconflicterror.md) | static
| |
| [createGenericNotFoundError(type, id)](./kibana-plugin-core-server.savedobjectserrorhelpers.creategenericnotfounderror.md) | static
| |
+| [createIndexAliasNotFoundError(alias)](./kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md) | static
| |
| [createInvalidVersionError(versionInput)](./kibana-plugin-core-server.savedobjectserrorhelpers.createinvalidversionerror.md) | static
| |
| [createTooManyRequestsError(type, id)](./kibana-plugin-core-server.savedobjectserrorhelpers.createtoomanyrequestserror.md) | static
| |
| [createUnsupportedTypeError(type)](./kibana-plugin-core-server.savedobjectserrorhelpers.createunsupportedtypeerror.md) | static
| |
@@ -27,6 +28,7 @@ export declare class SavedObjectsErrorHelpers
| [decorateEsUnavailableError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateesunavailableerror.md) | static
| |
| [decorateForbiddenError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateforbiddenerror.md) | static
| |
| [decorateGeneralError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorategeneralerror.md) | static
| |
+| [decorateIndexAliasNotFoundError(error, alias)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md) | static
| |
| [decorateNotAuthorizedError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decoratenotauthorizederror.md) | static
| |
| [decorateRequestEntityTooLargeError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decoraterequestentitytoolargeerror.md) | static
| |
| [decorateTooManyRequestsError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decoratetoomanyrequestserror.md) | static
| |
@@ -35,6 +37,7 @@ export declare class SavedObjectsErrorHelpers
| [isEsCannotExecuteScriptError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isescannotexecutescripterror.md) | static
| |
| [isEsUnavailableError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isesunavailableerror.md) | static
| |
| [isForbiddenError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isforbiddenerror.md) | static
| |
+| [isGeneralError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md) | static
| |
| [isInvalidVersionError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isinvalidversionerror.md) | static
| |
| [isNotAuthorizedError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isnotauthorizederror.md) | static
| |
| [isNotFoundError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isnotfounderror.md) | static
| |
diff --git a/packages/kbn-es-archiver/src/actions/empty_kibana_index.ts b/packages/kbn-es-archiver/src/actions/empty_kibana_index.ts
index 56c75c5aca419..6272d6ba00ee8 100644
--- a/packages/kbn-es-archiver/src/actions/empty_kibana_index.ts
+++ b/packages/kbn-es-archiver/src/actions/empty_kibana_index.ts
@@ -25,5 +25,6 @@ export async function emptyKibanaIndexAction({
await cleanKibanaIndices({ client, stats, log, kibanaPluginIds });
await migrateKibanaIndex({ client, kbnClient });
- return stats;
+ stats.createdIndex('.kibana');
+ return stats.toJSON();
}
diff --git a/packages/kbn-es-archiver/src/es_archiver.ts b/packages/kbn-es-archiver/src/es_archiver.ts
index f101c5d6867f1..8601dedad0e27 100644
--- a/packages/kbn-es-archiver/src/es_archiver.ts
+++ b/packages/kbn-es-archiver/src/es_archiver.ts
@@ -155,7 +155,7 @@ export class EsArchiver {
* @return Promise
*/
async emptyKibanaIndex() {
- await emptyKibanaIndexAction({
+ return await emptyKibanaIndexAction({
client: this.client,
log: this.log,
kbnClient: this.kbnClient,
diff --git a/packages/kbn-es-archiver/src/lib/indices/kibana_index.ts b/packages/kbn-es-archiver/src/lib/indices/kibana_index.ts
index 0459a4301cf6b..91c0bd8343a36 100644
--- a/packages/kbn-es-archiver/src/lib/indices/kibana_index.ts
+++ b/packages/kbn-es-archiver/src/lib/indices/kibana_index.ts
@@ -76,7 +76,9 @@ export async function migrateKibanaIndex({
*/
async function fetchKibanaIndices(client: Client) {
const kibanaIndices = await client.cat.indices({ index: '.kibana*', format: 'json' });
- const isKibanaIndex = (index: string) => /^\.kibana(:?_\d*)?$/.test(index);
+ const isKibanaIndex = (index: string) =>
+ /^\.kibana(:?_\d*)?$/.test(index) ||
+ /^\.kibana(_task_manager)?_(pre)?\d+\.\d+\.\d+/.test(index);
return kibanaIndices.map((x: { index: string }) => x.index).filter(isKibanaIndex);
}
@@ -103,7 +105,7 @@ export async function cleanKibanaIndices({
while (true) {
const resp = await client.deleteByQuery({
- index: `.kibana`,
+ index: `.kibana,.kibana_task_manager`,
body: {
query: {
bool: {
@@ -115,7 +117,7 @@ export async function cleanKibanaIndices({
},
},
},
- ignore: [409],
+ ignore: [404, 409],
});
if (resp.total !== resp.deleted) {
diff --git a/src/core/server/saved_objects/migrationsv2/model.test.ts b/src/core/server/saved_objects/migrationsv2/model.test.ts
index d5ab85c54a728..a9aa69960b1c2 100644
--- a/src/core/server/saved_objects/migrationsv2/model.test.ts
+++ b/src/core/server/saved_objects/migrationsv2/model.test.ts
@@ -182,6 +182,21 @@ describe('migrations v2 model', () => {
versionAlias: '.kibana_7.11.0',
versionIndex: '.kibana_7.11.0_001',
};
+ const mappingsWithUnknownType = {
+ properties: {
+ disabled_saved_object_type: {
+ properties: {
+ value: { type: 'keyword' },
+ },
+ },
+ },
+ _meta: {
+ migrationMappingPropertyHashes: {
+ disabled_saved_object_type: '7997cf5a56cc02bdc9c93361bde732b0',
+ },
+ },
+ };
+
test('INIT -> OUTDATED_DOCUMENTS_SEARCH if .kibana is already pointing to the target index', () => {
const res: ResponseType<'INIT'> = Either.right({
'.kibana_7.11.0_001': {
@@ -189,38 +204,27 @@ describe('migrations v2 model', () => {
'.kibana': {},
'.kibana_7.11.0': {},
},
- mappings: {
- properties: {
- disabled_saved_object_type: {
- properties: {
- value: { type: 'keyword' },
- },
- },
- },
- _meta: {
- migrationMappingPropertyHashes: {
- disabled_saved_object_type: '7997cf5a56cc02bdc9c93361bde732b0',
- },
- },
- },
+ mappings: mappingsWithUnknownType,
settings: {},
},
});
const newState = model(initState, res);
expect(newState.controlState).toEqual('OUTDATED_DOCUMENTS_SEARCH');
+ // This snapshot asserts that we merge the
+ // migrationMappingPropertyHashes of the existing index, but we leave
+ // the mappings for the disabled_saved_object_type untouched. There
+ // might be another Kibana instance that knows about this type and
+ // needs these mappings in place.
expect(newState.targetIndexMappings).toMatchInlineSnapshot(`
Object {
"_meta": Object {
"migrationMappingPropertyHashes": Object {
+ "disabled_saved_object_type": "7997cf5a56cc02bdc9c93361bde732b0",
"new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0",
},
},
"properties": Object {
- "disabled_saved_object_type": Object {
- "dynamic": false,
- "properties": Object {},
- },
"new_saved_object_type": Object {
"properties": Object {
"value": Object {
@@ -271,7 +275,7 @@ describe('migrations v2 model', () => {
'.kibana': {},
'.kibana_7.12.0': {},
},
- mappings: { properties: {}, _meta: { migrationMappingPropertyHashes: {} } },
+ mappings: mappingsWithUnknownType,
settings: {},
},
'.kibana_7.11.0_001': {
@@ -288,12 +292,37 @@ describe('migrations v2 model', () => {
sourceIndex: Option.some('.kibana_7.invalid.0_001'),
targetIndex: '.kibana_7.11.0_001',
});
+ // This snapshot asserts that we disable the unknown saved object
+ // type. Because it's mappings are disabled, we also don't copy the
+ // `_meta.migrationMappingPropertyHashes` for the disabled type.
+ expect(newState.targetIndexMappings).toMatchInlineSnapshot(`
+ Object {
+ "_meta": Object {
+ "migrationMappingPropertyHashes": Object {
+ "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0",
+ },
+ },
+ "properties": Object {
+ "disabled_saved_object_type": Object {
+ "dynamic": false,
+ "properties": Object {},
+ },
+ "new_saved_object_type": Object {
+ "properties": Object {
+ "value": Object {
+ "type": "text",
+ },
+ },
+ },
+ },
+ }
+ `);
});
test('INIT -> SET_SOURCE_WRITE_BLOCK when migrating from a v2 migrations index (>= 7.11.0)', () => {
const res: ResponseType<'INIT'> = Either.right({
'.kibana_7.11.0_001': {
aliases: { '.kibana': {}, '.kibana_7.11.0': {} },
- mappings: { properties: {}, _meta: { migrationMappingPropertyHashes: {} } },
+ mappings: mappingsWithUnknownType,
settings: {},
},
'.kibana_3': {
@@ -319,6 +348,31 @@ describe('migrations v2 model', () => {
sourceIndex: Option.some('.kibana_7.11.0_001'),
targetIndex: '.kibana_7.12.0_001',
});
+ // This snapshot asserts that we disable the unknown saved object
+ // type. Because it's mappings are disabled, we also don't copy the
+ // `_meta.migrationMappingPropertyHashes` for the disabled type.
+ expect(newState.targetIndexMappings).toMatchInlineSnapshot(`
+ Object {
+ "_meta": Object {
+ "migrationMappingPropertyHashes": Object {
+ "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0",
+ },
+ },
+ "properties": Object {
+ "disabled_saved_object_type": Object {
+ "dynamic": false,
+ "properties": Object {},
+ },
+ "new_saved_object_type": Object {
+ "properties": Object {
+ "value": Object {
+ "type": "text",
+ },
+ },
+ },
+ },
+ }
+ `);
expect(newState.retryCount).toEqual(0);
expect(newState.retryDelay).toEqual(0);
});
@@ -328,7 +382,7 @@ describe('migrations v2 model', () => {
aliases: {
'.kibana': {},
},
- mappings: { properties: {}, _meta: { migrationMappingPropertyHashes: {} } },
+ mappings: mappingsWithUnknownType,
settings: {},
},
});
@@ -339,6 +393,31 @@ describe('migrations v2 model', () => {
sourceIndex: Option.some('.kibana_3'),
targetIndex: '.kibana_7.11.0_001',
});
+ // This snapshot asserts that we disable the unknown saved object
+ // type. Because it's mappings are disabled, we also don't copy the
+ // `_meta.migrationMappingPropertyHashes` for the disabled type.
+ expect(newState.targetIndexMappings).toMatchInlineSnapshot(`
+ Object {
+ "_meta": Object {
+ "migrationMappingPropertyHashes": Object {
+ "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0",
+ },
+ },
+ "properties": Object {
+ "disabled_saved_object_type": Object {
+ "dynamic": false,
+ "properties": Object {},
+ },
+ "new_saved_object_type": Object {
+ "properties": Object {
+ "value": Object {
+ "type": "text",
+ },
+ },
+ },
+ },
+ }
+ `);
expect(newState.retryCount).toEqual(0);
expect(newState.retryDelay).toEqual(0);
});
@@ -346,7 +425,7 @@ describe('migrations v2 model', () => {
const res: ResponseType<'INIT'> = Either.right({
'.kibana': {
aliases: {},
- mappings: { properties: {}, _meta: {} },
+ mappings: mappingsWithUnknownType,
settings: {},
},
});
@@ -357,6 +436,31 @@ describe('migrations v2 model', () => {
sourceIndex: Option.some('.kibana_pre6.5.0_001'),
targetIndex: '.kibana_7.11.0_001',
});
+ // This snapshot asserts that we disable the unknown saved object
+ // type. Because it's mappings are disabled, we also don't copy the
+ // `_meta.migrationMappingPropertyHashes` for the disabled type.
+ expect(newState.targetIndexMappings).toMatchInlineSnapshot(`
+ Object {
+ "_meta": Object {
+ "migrationMappingPropertyHashes": Object {
+ "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0",
+ },
+ },
+ "properties": Object {
+ "disabled_saved_object_type": Object {
+ "dynamic": false,
+ "properties": Object {},
+ },
+ "new_saved_object_type": Object {
+ "properties": Object {
+ "value": Object {
+ "type": "text",
+ },
+ },
+ },
+ },
+ }
+ `);
expect(newState.retryCount).toEqual(0);
expect(newState.retryDelay).toEqual(0);
});
@@ -366,7 +470,7 @@ describe('migrations v2 model', () => {
aliases: {
'my-saved-objects': {},
},
- mappings: { properties: {}, _meta: { migrationMappingPropertyHashes: {} } },
+ mappings: mappingsWithUnknownType,
settings: {},
},
});
@@ -386,6 +490,31 @@ describe('migrations v2 model', () => {
sourceIndex: Option.some('my-saved-objects_3'),
targetIndex: 'my-saved-objects_7.11.0_001',
});
+ // This snapshot asserts that we disable the unknown saved object
+ // type. Because it's mappings are disabled, we also don't copy the
+ // `_meta.migrationMappingPropertyHashes` for the disabled type.
+ expect(newState.targetIndexMappings).toMatchInlineSnapshot(`
+ Object {
+ "_meta": Object {
+ "migrationMappingPropertyHashes": Object {
+ "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0",
+ },
+ },
+ "properties": Object {
+ "disabled_saved_object_type": Object {
+ "dynamic": false,
+ "properties": Object {},
+ },
+ "new_saved_object_type": Object {
+ "properties": Object {
+ "value": Object {
+ "type": "text",
+ },
+ },
+ },
+ },
+ }
+ `);
expect(newState.retryCount).toEqual(0);
expect(newState.retryDelay).toEqual(0);
});
@@ -395,7 +524,7 @@ describe('migrations v2 model', () => {
aliases: {
'my-saved-objects': {},
},
- mappings: { properties: {}, _meta: { migrationMappingPropertyHashes: {} } },
+ mappings: mappingsWithUnknownType,
settings: {},
},
});
@@ -416,6 +545,31 @@ describe('migrations v2 model', () => {
sourceIndex: Option.some('my-saved-objects_7.11.0'),
targetIndex: 'my-saved-objects_7.12.0_001',
});
+ // This snapshot asserts that we disable the unknown saved object
+ // type. Because it's mappings are disabled, we also don't copy the
+ // `_meta.migrationMappingPropertyHashes` for the disabled type.
+ expect(newState.targetIndexMappings).toMatchInlineSnapshot(`
+ Object {
+ "_meta": Object {
+ "migrationMappingPropertyHashes": Object {
+ "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0",
+ },
+ },
+ "properties": Object {
+ "disabled_saved_object_type": Object {
+ "dynamic": false,
+ "properties": Object {},
+ },
+ "new_saved_object_type": Object {
+ "properties": Object {
+ "value": Object {
+ "type": "text",
+ },
+ },
+ },
+ },
+ }
+ `);
expect(newState.retryCount).toEqual(0);
expect(newState.retryDelay).toEqual(0);
});
diff --git a/src/core/server/saved_objects/migrationsv2/model.ts b/src/core/server/saved_objects/migrationsv2/model.ts
index 1119edde8e268..3556bb611bb67 100644
--- a/src/core/server/saved_objects/migrationsv2/model.ts
+++ b/src/core/server/saved_objects/migrationsv2/model.ts
@@ -60,13 +60,13 @@ function throwBadResponse(state: State, res: any): never {
* Merge the _meta.migrationMappingPropertyHashes mappings of an index with
* the given target mappings.
*
- * @remarks Mapping updates are commutative (deeply merged) by Elasticsearch,
- * except for the _meta key. The source index we're migrating from might
- * contain documents created by a plugin that is disabled in the Kibana
- * instance performing this migration. We merge the
- * _meta.migrationMappingPropertyHashes mappings from the source index into
- * the targetMappings to ensure that any `migrationPropertyHashes` for
- * disabled plugins aren't lost.
+ * @remarks When another instance already completed a migration, the existing
+ * target index might contain documents and mappings created by a plugin that
+ * is disabled in the current Kibana instance performing this migration.
+ * Mapping updates are commutative (deeply merged) by Elasticsearch, except
+ * for the `_meta` key. By merging the `_meta.migrationMappingPropertyHashes`
+ * mappings from the existing target index index into the targetMappings we
+ * ensure that any `migrationPropertyHashes` for disabled plugins aren't lost.
*
* Right now we don't use these `migrationPropertyHashes` but it could be used
* in the future to detect if mappings were changed. If mappings weren't
@@ -209,7 +209,7 @@ export const model = (currentState: State, resW: ResponseType):
// index
sourceIndex: Option.none,
targetIndex: `${stateP.indexPrefix}_${stateP.kibanaVersion}_001`,
- targetIndexMappings: disableUnknownTypeMappingFields(
+ targetIndexMappings: mergeMigrationMappingPropertyHashes(
stateP.targetIndexMappings,
indices[aliases[stateP.currentAlias]].mappings
),
@@ -242,7 +242,7 @@ export const model = (currentState: State, resW: ResponseType):
controlState: 'SET_SOURCE_WRITE_BLOCK',
sourceIndex: Option.some(source) as Option.Some,
targetIndex: target,
- targetIndexMappings: mergeMigrationMappingPropertyHashes(
+ targetIndexMappings: disableUnknownTypeMappingFields(
stateP.targetIndexMappings,
indices[source].mappings
),
@@ -279,7 +279,7 @@ export const model = (currentState: State, resW: ResponseType):
controlState: 'LEGACY_SET_WRITE_BLOCK',
sourceIndex: Option.some(legacyReindexTarget) as Option.Some,
targetIndex: target,
- targetIndexMappings: mergeMigrationMappingPropertyHashes(
+ targetIndexMappings: disableUnknownTypeMappingFields(
stateP.targetIndexMappings,
indices[stateP.legacyIndex].mappings
),
diff --git a/src/core/server/saved_objects/routes/bulk_create.ts b/src/core/server/saved_objects/routes/bulk_create.ts
index 6d57eaa3777e6..b85747985e523 100644
--- a/src/core/server/saved_objects/routes/bulk_create.ts
+++ b/src/core/server/saved_objects/routes/bulk_create.ts
@@ -9,6 +9,7 @@
import { schema } from '@kbn/config-schema';
import { IRouter } from '../../http';
import { CoreUsageDataSetup } from '../../core_usage_data';
+import { catchAndReturnBoomErrors } from './utils';
interface RouteDependencies {
coreUsageData: CoreUsageDataSetup;
@@ -44,7 +45,7 @@ export const registerBulkCreateRoute = (router: IRouter, { coreUsageData }: Rout
),
},
},
- router.handleLegacyErrors(async (context, req, res) => {
+ catchAndReturnBoomErrors(async (context, req, res) => {
const { overwrite } = req.query;
const usageStatsClient = coreUsageData.getClient();
diff --git a/src/core/server/saved_objects/routes/bulk_get.ts b/src/core/server/saved_objects/routes/bulk_get.ts
index a260301633668..580bf26a4e529 100644
--- a/src/core/server/saved_objects/routes/bulk_get.ts
+++ b/src/core/server/saved_objects/routes/bulk_get.ts
@@ -9,6 +9,7 @@
import { schema } from '@kbn/config-schema';
import { IRouter } from '../../http';
import { CoreUsageDataSetup } from '../../core_usage_data';
+import { catchAndReturnBoomErrors } from './utils';
interface RouteDependencies {
coreUsageData: CoreUsageDataSetup;
@@ -28,7 +29,7 @@ export const registerBulkGetRoute = (router: IRouter, { coreUsageData }: RouteDe
),
},
},
- router.handleLegacyErrors(async (context, req, res) => {
+ catchAndReturnBoomErrors(async (context, req, res) => {
const usageStatsClient = coreUsageData.getClient();
usageStatsClient.incrementSavedObjectsBulkGet({ request: req }).catch(() => {});
diff --git a/src/core/server/saved_objects/routes/bulk_update.ts b/src/core/server/saved_objects/routes/bulk_update.ts
index f9b8d4a2f567f..e592adc72a244 100644
--- a/src/core/server/saved_objects/routes/bulk_update.ts
+++ b/src/core/server/saved_objects/routes/bulk_update.ts
@@ -9,6 +9,7 @@
import { schema } from '@kbn/config-schema';
import { IRouter } from '../../http';
import { CoreUsageDataSetup } from '../../core_usage_data';
+import { catchAndReturnBoomErrors } from './utils';
interface RouteDependencies {
coreUsageData: CoreUsageDataSetup;
@@ -39,7 +40,7 @@ export const registerBulkUpdateRoute = (router: IRouter, { coreUsageData }: Rout
),
},
},
- router.handleLegacyErrors(async (context, req, res) => {
+ catchAndReturnBoomErrors(async (context, req, res) => {
const usageStatsClient = coreUsageData.getClient();
usageStatsClient.incrementSavedObjectsBulkUpdate({ request: req }).catch(() => {});
diff --git a/src/core/server/saved_objects/routes/create.ts b/src/core/server/saved_objects/routes/create.ts
index fd256abac3526..f6043ca96398d 100644
--- a/src/core/server/saved_objects/routes/create.ts
+++ b/src/core/server/saved_objects/routes/create.ts
@@ -9,6 +9,7 @@
import { schema } from '@kbn/config-schema';
import { IRouter } from '../../http';
import { CoreUsageDataSetup } from '../../core_usage_data';
+import { catchAndReturnBoomErrors } from './utils';
interface RouteDependencies {
coreUsageData: CoreUsageDataSetup;
@@ -43,7 +44,7 @@ export const registerCreateRoute = (router: IRouter, { coreUsageData }: RouteDep
}),
},
},
- router.handleLegacyErrors(async (context, req, res) => {
+ catchAndReturnBoomErrors(async (context, req, res) => {
const { type, id } = req.params;
const { overwrite } = req.query;
const {
diff --git a/src/core/server/saved_objects/routes/delete.ts b/src/core/server/saved_objects/routes/delete.ts
index a7846c3dc845b..b127f64b74a0c 100644
--- a/src/core/server/saved_objects/routes/delete.ts
+++ b/src/core/server/saved_objects/routes/delete.ts
@@ -9,6 +9,7 @@
import { schema } from '@kbn/config-schema';
import { IRouter } from '../../http';
import { CoreUsageDataSetup } from '../../core_usage_data';
+import { catchAndReturnBoomErrors } from './utils';
interface RouteDependencies {
coreUsageData: CoreUsageDataSetup;
@@ -28,7 +29,7 @@ export const registerDeleteRoute = (router: IRouter, { coreUsageData }: RouteDep
}),
},
},
- router.handleLegacyErrors(async (context, req, res) => {
+ catchAndReturnBoomErrors(async (context, req, res) => {
const { type, id } = req.params;
const { force } = req.query;
diff --git a/src/core/server/saved_objects/routes/export.ts b/src/core/server/saved_objects/routes/export.ts
index 9b40855afec2e..f064cf1ca0ec1 100644
--- a/src/core/server/saved_objects/routes/export.ts
+++ b/src/core/server/saved_objects/routes/export.ts
@@ -18,7 +18,7 @@ import {
SavedObjectsExportByObjectOptions,
SavedObjectsExportError,
} from '../export';
-import { validateTypes, validateObjects } from './utils';
+import { validateTypes, validateObjects, catchAndReturnBoomErrors } from './utils';
interface RouteDependencies {
config: SavedObjectConfig;
@@ -163,7 +163,7 @@ export const registerExportRoute = (
}),
},
},
- router.handleLegacyErrors(async (context, req, res) => {
+ catchAndReturnBoomErrors(async (context, req, res) => {
const cleaned = cleanOptions(req.body);
const supportedTypes = context.core.savedObjects.typeRegistry
.getImportableAndExportableTypes()
diff --git a/src/core/server/saved_objects/routes/find.ts b/src/core/server/saved_objects/routes/find.ts
index 747070e54e5ad..c814fd310dc52 100644
--- a/src/core/server/saved_objects/routes/find.ts
+++ b/src/core/server/saved_objects/routes/find.ts
@@ -9,6 +9,7 @@
import { schema } from '@kbn/config-schema';
import { IRouter } from '../../http';
import { CoreUsageDataSetup } from '../../core_usage_data';
+import { catchAndReturnBoomErrors } from './utils';
interface RouteDependencies {
coreUsageData: CoreUsageDataSetup;
@@ -49,7 +50,7 @@ export const registerFindRoute = (router: IRouter, { coreUsageData }: RouteDepen
}),
},
},
- router.handleLegacyErrors(async (context, req, res) => {
+ catchAndReturnBoomErrors(async (context, req, res) => {
const query = req.query;
const namespaces =
diff --git a/src/core/server/saved_objects/routes/get.ts b/src/core/server/saved_objects/routes/get.ts
index c66a11dcf0cdd..2dd812f35cefd 100644
--- a/src/core/server/saved_objects/routes/get.ts
+++ b/src/core/server/saved_objects/routes/get.ts
@@ -9,6 +9,7 @@
import { schema } from '@kbn/config-schema';
import { IRouter } from '../../http';
import { CoreUsageDataSetup } from '../../core_usage_data';
+import { catchAndReturnBoomErrors } from './utils';
interface RouteDependencies {
coreUsageData: CoreUsageDataSetup;
@@ -25,7 +26,7 @@ export const registerGetRoute = (router: IRouter, { coreUsageData }: RouteDepend
}),
},
},
- router.handleLegacyErrors(async (context, req, res) => {
+ catchAndReturnBoomErrors(async (context, req, res) => {
const { type, id } = req.params;
const usageStatsClient = coreUsageData.getClient();
diff --git a/src/core/server/saved_objects/routes/import.ts b/src/core/server/saved_objects/routes/import.ts
index 6c4c759460ce3..5fd132acafbed 100644
--- a/src/core/server/saved_objects/routes/import.ts
+++ b/src/core/server/saved_objects/routes/import.ts
@@ -13,7 +13,7 @@ import { IRouter } from '../../http';
import { CoreUsageDataSetup } from '../../core_usage_data';
import { SavedObjectConfig } from '../saved_objects_config';
import { SavedObjectsImportError } from '../import';
-import { createSavedObjectsStreamFromNdJson } from './utils';
+import { catchAndReturnBoomErrors, createSavedObjectsStreamFromNdJson } from './utils';
interface RouteDependencies {
config: SavedObjectConfig;
@@ -61,7 +61,7 @@ export const registerImportRoute = (
}),
},
},
- router.handleLegacyErrors(async (context, req, res) => {
+ catchAndReturnBoomErrors(async (context, req, res) => {
const { overwrite, createNewCopies } = req.query;
const usageStatsClient = coreUsageData.getClient();
diff --git a/src/core/server/saved_objects/routes/migrate.ts b/src/core/server/saved_objects/routes/migrate.ts
index 8b347d4725b08..7c2f4bfb06710 100644
--- a/src/core/server/saved_objects/routes/migrate.ts
+++ b/src/core/server/saved_objects/routes/migrate.ts
@@ -8,6 +8,7 @@
import { IRouter } from '../../http';
import { IKibanaMigrator } from '../migrations';
+import { catchAndReturnBoomErrors } from './utils';
export const registerMigrateRoute = (
router: IRouter,
@@ -21,7 +22,7 @@ export const registerMigrateRoute = (
tags: ['access:migrateSavedObjects'],
},
},
- router.handleLegacyErrors(async (context, req, res) => {
+ catchAndReturnBoomErrors(async (context, req, res) => {
const migrator = await migratorPromise;
await migrator.runMigrations({ rerun: true });
return res.ok({
diff --git a/src/core/server/saved_objects/routes/resolve_import_errors.ts b/src/core/server/saved_objects/routes/resolve_import_errors.ts
index 0cf976c30b311..6f0a3d028baf9 100644
--- a/src/core/server/saved_objects/routes/resolve_import_errors.ts
+++ b/src/core/server/saved_objects/routes/resolve_import_errors.ts
@@ -13,8 +13,7 @@ import { IRouter } from '../../http';
import { CoreUsageDataSetup } from '../../core_usage_data';
import { SavedObjectConfig } from '../saved_objects_config';
import { SavedObjectsImportError } from '../import';
-import { createSavedObjectsStreamFromNdJson } from './utils';
-
+import { catchAndReturnBoomErrors, createSavedObjectsStreamFromNdJson } from './utils';
interface RouteDependencies {
config: SavedObjectConfig;
coreUsageData: CoreUsageDataSetup;
@@ -69,7 +68,7 @@ export const registerResolveImportErrorsRoute = (
}),
},
},
- router.handleLegacyErrors(async (context, req, res) => {
+ catchAndReturnBoomErrors(async (context, req, res) => {
const { createNewCopies } = req.query;
const usageStatsClient = coreUsageData.getClient();
diff --git a/src/core/server/saved_objects/routes/update.ts b/src/core/server/saved_objects/routes/update.ts
index 17cfd438d47bf..dbc69f743df76 100644
--- a/src/core/server/saved_objects/routes/update.ts
+++ b/src/core/server/saved_objects/routes/update.ts
@@ -9,6 +9,7 @@
import { schema } from '@kbn/config-schema';
import { IRouter } from '../../http';
import { CoreUsageDataSetup } from '../../core_usage_data';
+import { catchAndReturnBoomErrors } from './utils';
interface RouteDependencies {
coreUsageData: CoreUsageDataSetup;
@@ -38,7 +39,7 @@ export const registerUpdateRoute = (router: IRouter, { coreUsageData }: RouteDep
}),
},
},
- router.handleLegacyErrors(async (context, req, res) => {
+ catchAndReturnBoomErrors(async (context, req, res) => {
const { type, id } = req.params;
const { attributes, version, references } = req.body;
const options = { version, references };
diff --git a/src/core/server/saved_objects/routes/utils.test.ts b/src/core/server/saved_objects/routes/utils.test.ts
index ade7b03f6a8c2..1d7e86e288b18 100644
--- a/src/core/server/saved_objects/routes/utils.test.ts
+++ b/src/core/server/saved_objects/routes/utils.test.ts
@@ -9,6 +9,15 @@
import { createSavedObjectsStreamFromNdJson, validateTypes, validateObjects } from './utils';
import { Readable } from 'stream';
import { createPromiseFromStreams, createConcatStream } from '@kbn/utils';
+import { catchAndReturnBoomErrors } from './utils';
+import Boom from '@hapi/boom';
+import {
+ KibanaRequest,
+ RequestHandler,
+ RequestHandlerContext,
+ KibanaResponseFactory,
+ kibanaResponseFactory,
+} from '../../';
async function readStreamToCompletion(stream: Readable) {
return createPromiseFromStreams([stream, createConcatStream([])]);
@@ -143,3 +152,69 @@ describe('validateObjects', () => {
).toBeUndefined();
});
});
+
+describe('catchAndReturnBoomErrors', () => {
+ let context: RequestHandlerContext;
+ let request: KibanaRequest;
+ let response: KibanaResponseFactory;
+
+ const createHandler = (handler: () => any): RequestHandler => () => {
+ return handler();
+ };
+
+ beforeEach(() => {
+ context = {} as any;
+ request = {} as any;
+ response = kibanaResponseFactory;
+ });
+
+ it('should pass-though call parameters to the handler', async () => {
+ const handler = jest.fn();
+ const wrapped = catchAndReturnBoomErrors(handler);
+ await wrapped(context, request, response);
+ expect(handler).toHaveBeenCalledWith(context, request, response);
+ });
+
+ it('should pass-though result from the handler', async () => {
+ const handler = createHandler(() => {
+ return 'handler-response';
+ });
+ const wrapped = catchAndReturnBoomErrors(handler);
+ const result = await wrapped(context, request, response);
+ expect(result).toBe('handler-response');
+ });
+
+ it('should intercept and convert thrown Boom errors', async () => {
+ const handler = createHandler(() => {
+ throw Boom.notFound('not there');
+ });
+ const wrapped = catchAndReturnBoomErrors(handler);
+ const result = await wrapped(context, request, response);
+ expect(result.status).toBe(404);
+ expect(result.payload).toEqual({
+ error: 'Not Found',
+ message: 'not there',
+ statusCode: 404,
+ });
+ });
+
+ it('should re-throw non-Boom errors', async () => {
+ const handler = createHandler(() => {
+ throw new Error('something went bad');
+ });
+ const wrapped = catchAndReturnBoomErrors(handler);
+ await expect(wrapped(context, request, response)).rejects.toMatchInlineSnapshot(
+ `[Error: something went bad]`
+ );
+ });
+
+ it('should re-throw Boom internal/500 errors', async () => {
+ const handler = createHandler(() => {
+ throw Boom.internal();
+ });
+ const wrapped = catchAndReturnBoomErrors(handler);
+ await expect(wrapped(context, request, response)).rejects.toMatchInlineSnapshot(
+ `[Error: Internal Server Error]`
+ );
+ });
+});
diff --git a/src/core/server/saved_objects/routes/utils.ts b/src/core/server/saved_objects/routes/utils.ts
index b9e7df48a4b4c..269f3f0698561 100644
--- a/src/core/server/saved_objects/routes/utils.ts
+++ b/src/core/server/saved_objects/routes/utils.ts
@@ -7,7 +7,11 @@
*/
import { Readable } from 'stream';
-import { SavedObject, SavedObjectsExportResultDetails } from 'src/core/server';
+import {
+ RequestHandlerWrapper,
+ SavedObject,
+ SavedObjectsExportResultDetails,
+} from 'src/core/server';
import {
createSplitStream,
createMapStream,
@@ -16,6 +20,7 @@ import {
createListStream,
createConcatStream,
} from '@kbn/utils';
+import Boom from '@hapi/boom';
export async function createSavedObjectsStreamFromNdJson(ndJsonStream: Readable) {
const savedObjects = await createPromiseFromStreams([
@@ -52,3 +57,30 @@ export function validateObjects(
.join(', ')}`;
}
}
+
+/**
+ * Catches errors thrown by saved object route handlers and returns an error
+ * with the payload and statusCode of the boom error.
+ *
+ * This is very close to the core `router.handleLegacyErrors` except that it
+ * throws internal errors (statusCode: 500) so that the internal error's
+ * message get logged by Core.
+ *
+ * TODO: Remove once https://github.com/elastic/kibana/issues/65291 is fixed.
+ */
+export const catchAndReturnBoomErrors: RequestHandlerWrapper = (handler) => {
+ return async (context, request, response) => {
+ try {
+ return await handler(context, request, response);
+ } catch (e) {
+ if (Boom.isBoom(e) && e.output.statusCode !== 500) {
+ return response.customError({
+ body: e.output.payload,
+ statusCode: e.output.statusCode,
+ headers: e.output.headers as { [key: string]: string },
+ });
+ }
+ throw e;
+ }
+ };
+};
diff --git a/src/core/server/saved_objects/service/lib/decorate_es_error.test.ts b/src/core/server/saved_objects/service/lib/decorate_es_error.test.ts
index cc497ca6348b8..da1ebec2c0f7d 100644
--- a/src/core/server/saved_objects/service/lib/decorate_es_error.test.ts
+++ b/src/core/server/saved_objects/service/lib/decorate_es_error.test.ts
@@ -109,6 +109,27 @@ describe('savedObjectsClient/decorateEsError', () => {
expect(SavedObjectsErrorHelpers.isNotFoundError(genericError)).toBe(true);
});
+ it('if saved objects index does not exist makes NotFound a SavedObjectsClient/generalError', () => {
+ const error = new esErrors.ResponseError(
+ elasticsearchClientMock.createApiResponse({
+ statusCode: 404,
+ body: {
+ error: {
+ reason:
+ 'no such index [.kibana_8.0.0] and [require_alias] request flag is [true] and [.kibana_8.0.0] is not an alias',
+ },
+ },
+ })
+ );
+ expect(SavedObjectsErrorHelpers.isGeneralError(error)).toBe(false);
+ const genericError = decorateEsError(error);
+ expect(genericError.message).toEqual(
+ `Saved object index alias [.kibana_8.0.0] not found: Response Error`
+ );
+ expect(genericError.output.statusCode).toBe(500);
+ expect(SavedObjectsErrorHelpers.isGeneralError(error)).toBe(true);
+ });
+
it('makes BadRequest a SavedObjectsClient/BadRequest error', () => {
const error = new esErrors.ResponseError(
elasticsearchClientMock.createApiResponse({ statusCode: 400 })
diff --git a/src/core/server/saved_objects/service/lib/decorate_es_error.ts b/src/core/server/saved_objects/service/lib/decorate_es_error.ts
index 40f18c9c94c25..aabca2d602cb3 100644
--- a/src/core/server/saved_objects/service/lib/decorate_es_error.ts
+++ b/src/core/server/saved_objects/service/lib/decorate_es_error.ts
@@ -63,6 +63,12 @@ export function decorateEsError(error: EsErrors) {
}
if (responseErrors.isNotFound(error.statusCode)) {
+ const match = error?.meta?.body?.error?.reason?.match(
+ /no such index \[(.+)\] and \[require_alias\] request flag is \[true\] and \[.+\] is not an alias/
+ );
+ if (match?.length > 0) {
+ return SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError(error, match[1]);
+ }
return SavedObjectsErrorHelpers.createGenericNotFoundError();
}
diff --git a/src/core/server/saved_objects/service/lib/errors.ts b/src/core/server/saved_objects/service/lib/errors.ts
index f216e72efbcf8..c348196aaba21 100644
--- a/src/core/server/saved_objects/service/lib/errors.ts
+++ b/src/core/server/saved_objects/service/lib/errors.ts
@@ -135,6 +135,19 @@ export class SavedObjectsErrorHelpers {
return decorate(Boom.notFound(), CODE_NOT_FOUND, 404);
}
+ public static createIndexAliasNotFoundError(alias: string) {
+ return SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError(Boom.internal(), alias);
+ }
+
+ public static decorateIndexAliasNotFoundError(error: Error, alias: string) {
+ return decorate(
+ error,
+ CODE_GENERAL_ERROR,
+ 500,
+ `Saved object index alias [${alias}] not found`
+ );
+ }
+
public static isNotFoundError(error: Error | DecoratedError) {
return isSavedObjectsClientError(error) && error[code] === CODE_NOT_FOUND;
}
@@ -185,4 +198,8 @@ export class SavedObjectsErrorHelpers {
public static decorateGeneralError(error: Error, reason?: string) {
return decorate(error, CODE_GENERAL_ERROR, 500, reason);
}
+
+ public static isGeneralError(error: Error | DecoratedError) {
+ return isSavedObjectsClientError(error) && error[code] === CODE_GENERAL_ERROR;
+ }
}
diff --git a/src/core/server/saved_objects/service/lib/repository.test.js b/src/core/server/saved_objects/service/lib/repository.test.js
index 216e1c4bd2d3c..68fdea0f9eb25 100644
--- a/src/core/server/saved_objects/service/lib/repository.test.js
+++ b/src/core/server/saved_objects/service/lib/repository.test.js
@@ -18,6 +18,7 @@ import { DocumentMigrator } from '../../migrations/core/document_migrator';
import { mockKibanaMigrator } from '../../migrations/kibana/kibana_migrator.mock';
import { elasticsearchClientMock } from '../../../elasticsearch/client/mocks';
import { esKuery } from '../../es_query';
+import { errors as EsErrors } from '@elastic/elasticsearch';
const { nodeTypes } = esKuery;
jest.mock('./search_dsl/search_dsl', () => ({ getSearchDsl: jest.fn() }));
@@ -4341,8 +4342,14 @@ describe('SavedObjectsRepository', () => {
});
it(`throws when ES is unable to find the document during update`, async () => {
+ const notFoundError = new EsErrors.ResponseError(
+ elasticsearchClientMock.createApiResponse({
+ statusCode: 404,
+ body: { error: { type: 'es_type', reason: 'es_reason' } },
+ })
+ );
client.update.mockResolvedValueOnce(
- elasticsearchClientMock.createSuccessTransportRequestPromise({}, { statusCode: 404 })
+ elasticsearchClientMock.createErrorTransportRequestPromise(notFoundError)
);
await expectNotFoundError(type, id);
expect(client.update).toHaveBeenCalledTimes(1);
diff --git a/src/core/server/saved_objects/service/lib/repository.ts b/src/core/server/saved_objects/service/lib/repository.ts
index 2993d4234bd2e..da80971635a93 100644
--- a/src/core/server/saved_objects/service/lib/repository.ts
+++ b/src/core/server/saved_objects/service/lib/repository.ts
@@ -299,6 +299,7 @@ export class SavedObjectsRepository {
refresh,
body: raw._source,
...(overwrite && version ? decodeRequestVersion(version) : {}),
+ require_alias: true,
};
const { body } =
@@ -469,6 +470,7 @@ export class SavedObjectsRepository {
const bulkResponse = bulkCreateParams.length
? await this.client.bulk({
refresh,
+ require_alias: true,
body: bulkCreateParams,
})
: undefined;
@@ -1117,8 +1119,8 @@ export class SavedObjectsRepository {
...(Array.isArray(references) && { references }),
};
- const { body, statusCode } = await this.client.update(
- {
+ const { body } = await this.client
+ .update({
id: this._serializer.generateRawId(namespace, type, id),
index: this.getIndexForType(type),
...getExpectedVersionProperties(version, preflightResult),
@@ -1128,14 +1130,15 @@ export class SavedObjectsRepository {
doc,
},
_source_includes: ['namespace', 'namespaces', 'originId'],
- },
- { ignore: [404] }
- );
-
- if (statusCode === 404) {
- // see "404s from missing index" above
- throw SavedObjectsErrorHelpers.createGenericNotFoundError(type, id);
- }
+ require_alias: true,
+ })
+ .catch((err) => {
+ if (SavedObjectsErrorHelpers.isNotFoundError(err)) {
+ // see "404s from missing index" above
+ throw SavedObjectsErrorHelpers.createGenericNotFoundError(type, id);
+ }
+ throw err;
+ });
const { originId } = body.get._source;
let namespaces = [];
@@ -1496,6 +1499,7 @@ export class SavedObjectsRepository {
refresh,
body: bulkUpdateParams,
_source_includes: ['originId'],
+ require_alias: true,
})
: undefined;
@@ -1712,6 +1716,7 @@ export class SavedObjectsRepository {
id: raw._id,
index: this.getIndexForType(type),
refresh,
+ require_alias: true,
_source: 'true',
body: {
script: {
@@ -1933,12 +1938,18 @@ export class SavedObjectsRepository {
}
}
-function getBulkOperationError(error: { type: string; reason?: string }, type: string, id: string) {
+function getBulkOperationError(
+ error: { type: string; reason?: string; index?: string },
+ type: string,
+ id: string
+) {
switch (error.type) {
case 'version_conflict_engine_exception':
return errorContent(SavedObjectsErrorHelpers.createConflictError(type, id));
case 'document_missing_exception':
return errorContent(SavedObjectsErrorHelpers.createGenericNotFoundError(type, id));
+ case 'index_not_found_exception':
+ return errorContent(SavedObjectsErrorHelpers.createIndexAliasNotFoundError(error.index!));
default:
return {
message: error.reason || JSON.stringify(error),
diff --git a/src/core/server/server.api.md b/src/core/server/server.api.md
index aadd16bde0ee6..9d5114e645f6e 100644
--- a/src/core/server/server.api.md
+++ b/src/core/server/server.api.md
@@ -2336,6 +2336,8 @@ export class SavedObjectsErrorHelpers {
// (undocumented)
static createGenericNotFoundError(type?: string | null, id?: string | null): DecoratedError;
// (undocumented)
+ static createIndexAliasNotFoundError(alias: string): DecoratedError;
+ // (undocumented)
static createInvalidVersionError(versionInput?: string): DecoratedError;
// (undocumented)
static createTooManyRequestsError(type: string, id: string): DecoratedError;
@@ -2354,6 +2356,8 @@ export class SavedObjectsErrorHelpers {
// (undocumented)
static decorateGeneralError(error: Error, reason?: string): DecoratedError;
// (undocumented)
+ static decorateIndexAliasNotFoundError(error: Error, alias: string): DecoratedError;
+ // (undocumented)
static decorateNotAuthorizedError(error: Error, reason?: string): DecoratedError;
// (undocumented)
static decorateRequestEntityTooLargeError(error: Error, reason?: string): DecoratedError;
@@ -2370,6 +2374,8 @@ export class SavedObjectsErrorHelpers {
// (undocumented)
static isForbiddenError(error: Error | DecoratedError): boolean;
// (undocumented)
+ static isGeneralError(error: Error | DecoratedError): boolean;
+ // (undocumented)
static isInvalidVersionError(error: Error | DecoratedError): boolean;
// (undocumented)
static isNotAuthorizedError(error: Error | DecoratedError): boolean;
diff --git a/src/core/server/ui_settings/integration_tests/doc_exists.ts b/src/core/server/ui_settings/integration_tests/doc_exists.ts
index aa6f98ddf2d03..d100b89af9609 100644
--- a/src/core/server/ui_settings/integration_tests/doc_exists.ts
+++ b/src/core/server/ui_settings/integration_tests/doc_exists.ts
@@ -8,7 +8,7 @@
import { getServices, chance } from './lib';
-export function docExistsSuite() {
+export const docExistsSuite = (savedObjectsIndex: string) => () => {
async function setup(options: any = {}) {
const { initialSettings } = options;
@@ -16,7 +16,7 @@ export function docExistsSuite() {
// delete the kibana index to ensure we start fresh
await callCluster('deleteByQuery', {
- index: kbnServer.config.get('kibana.index'),
+ index: savedObjectsIndex,
body: {
conflicts: 'proceed',
query: { match_all: {} },
@@ -212,4 +212,4 @@ export function docExistsSuite() {
});
});
});
-}
+};
diff --git a/src/core/server/ui_settings/integration_tests/doc_missing.ts b/src/core/server/ui_settings/integration_tests/doc_missing.ts
index 501976e3823f1..822ffe398b87d 100644
--- a/src/core/server/ui_settings/integration_tests/doc_missing.ts
+++ b/src/core/server/ui_settings/integration_tests/doc_missing.ts
@@ -8,7 +8,7 @@
import { getServices, chance } from './lib';
-export function docMissingSuite() {
+export const docMissingSuite = (savedObjectsIndex: string) => () => {
// ensure the kibana index has no documents
beforeEach(async () => {
const { kbnServer, callCluster } = getServices();
@@ -22,7 +22,7 @@ export function docMissingSuite() {
// delete all docs from kibana index to ensure savedConfig is not found
await callCluster('deleteByQuery', {
- index: kbnServer.config.get('kibana.index'),
+ index: savedObjectsIndex,
body: {
query: { match_all: {} },
},
@@ -136,4 +136,4 @@ export function docMissingSuite() {
});
});
});
-}
+};
diff --git a/src/core/server/ui_settings/integration_tests/doc_missing_and_index_read_only.ts b/src/core/server/ui_settings/integration_tests/doc_missing_and_index_read_only.ts
index b2ff1b2f1d4ab..997d51e36abdc 100644
--- a/src/core/server/ui_settings/integration_tests/doc_missing_and_index_read_only.ts
+++ b/src/core/server/ui_settings/integration_tests/doc_missing_and_index_read_only.ts
@@ -8,7 +8,7 @@
import { getServices, chance } from './lib';
-export function docMissingAndIndexReadOnlySuite() {
+export const docMissingAndIndexReadOnlySuite = (savedObjectsIndex: string) => () => {
// ensure the kibana index has no documents
beforeEach(async () => {
const { kbnServer, callCluster } = getServices();
@@ -22,7 +22,7 @@ export function docMissingAndIndexReadOnlySuite() {
// delete all docs from kibana index to ensure savedConfig is not found
await callCluster('deleteByQuery', {
- index: kbnServer.config.get('kibana.index'),
+ index: savedObjectsIndex,
body: {
query: { match_all: {} },
},
@@ -30,7 +30,7 @@ export function docMissingAndIndexReadOnlySuite() {
// set the index to read only
await callCluster('indices.putSettings', {
- index: kbnServer.config.get('kibana.index'),
+ index: savedObjectsIndex,
body: {
index: {
blocks: {
@@ -42,11 +42,11 @@ export function docMissingAndIndexReadOnlySuite() {
});
afterEach(async () => {
- const { kbnServer, callCluster } = getServices();
+ const { callCluster } = getServices();
// disable the read only block
await callCluster('indices.putSettings', {
- index: kbnServer.config.get('kibana.index'),
+ index: savedObjectsIndex,
body: {
index: {
blocks: {
@@ -142,4 +142,4 @@ export function docMissingAndIndexReadOnlySuite() {
});
});
});
-}
+};
diff --git a/src/core/server/ui_settings/integration_tests/index.test.ts b/src/core/server/ui_settings/integration_tests/index.test.ts
index f415f1d73de7d..e27e6c4e46874 100644
--- a/src/core/server/ui_settings/integration_tests/index.test.ts
+++ b/src/core/server/ui_settings/integration_tests/index.test.ts
@@ -6,20 +6,25 @@
* Public License, v 1.
*/
+import { Env } from '@kbn/config';
+import { REPO_ROOT } from '@kbn/dev-utils';
+import { getEnvOptions } from '@kbn/config/target/mocks';
import { startServers, stopServers } from './lib';
-
import { docExistsSuite } from './doc_exists';
import { docMissingSuite } from './doc_missing';
import { docMissingAndIndexReadOnlySuite } from './doc_missing_and_index_read_only';
+const kibanaVersion = Env.createDefault(REPO_ROOT, getEnvOptions()).packageInfo.version;
+const savedObjectIndex = `.kibana_${kibanaVersion}_001`;
+
describe('uiSettings/routes', function () {
jest.setTimeout(10000);
beforeAll(startServers);
/* eslint-disable jest/valid-describe */
- describe('doc missing', docMissingSuite);
- describe('doc missing and index readonly', docMissingAndIndexReadOnlySuite);
- describe('doc exists', docExistsSuite);
+ describe('doc missing', docMissingSuite(savedObjectIndex));
+ describe('doc missing and index readonly', docMissingAndIndexReadOnlySuite(savedObjectIndex));
+ describe('doc exists', docExistsSuite(savedObjectIndex));
/* eslint-enable jest/valid-describe */
afterAll(stopServers);
});
diff --git a/src/core/server/ui_settings/integration_tests/lib/servers.ts b/src/core/server/ui_settings/integration_tests/lib/servers.ts
index b5198b19007d0..f181272030ae1 100644
--- a/src/core/server/ui_settings/integration_tests/lib/servers.ts
+++ b/src/core/server/ui_settings/integration_tests/lib/servers.ts
@@ -37,9 +37,6 @@ export async function startServers() {
adjustTimeout: (t) => jest.setTimeout(t),
settings: {
kbn: {
- migrations: {
- enableV2: false,
- },
uiSettings: {
overrides: {
foo: 'bar',
diff --git a/src/core/test_helpers/kbn_server.ts b/src/core/test_helpers/kbn_server.ts
index 0007e1fcca0a5..6fe6819a0981a 100644
--- a/src/core/test_helpers/kbn_server.ts
+++ b/src/core/test_helpers/kbn_server.ts
@@ -40,7 +40,7 @@ const DEFAULTS_SETTINGS = {
},
logging: { silent: true },
plugins: {},
- migrations: { skip: true },
+ migrations: { skip: false },
};
const DEFAULT_SETTINGS_WITH_CORE_PLUGINS = {
diff --git a/test/accessibility/apps/kibana_overview.ts b/test/accessibility/apps/kibana_overview.ts
index c26a042b10e72..eb0b54ad07aa7 100644
--- a/test/accessibility/apps/kibana_overview.ts
+++ b/test/accessibility/apps/kibana_overview.ts
@@ -16,7 +16,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const esArchiver = getService('esArchiver');
before(async () => {
- await esArchiver.load('empty_kibana');
+ await esArchiver.emptyKibanaIndex();
await PageObjects.common.navigateToApp('kibanaOverview');
});
@@ -25,7 +25,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
useActualUrl: true,
});
await PageObjects.home.removeSampleDataSet('flights');
- await esArchiver.unload('empty_kibana');
});
it('Getting started view', async () => {
diff --git a/test/api_integration/apis/home/sample_data.ts b/test/api_integration/apis/home/sample_data.ts
index 042aff1375267..ebda93b12dc20 100644
--- a/test/api_integration/apis/home/sample_data.ts
+++ b/test/api_integration/apis/home/sample_data.ts
@@ -11,11 +11,15 @@ import { FtrProviderContext } from '../../ftr_provider_context';
export default function ({ getService }: FtrProviderContext) {
const supertest = getService('supertest');
+ const esArchiver = getService('esArchiver');
const es = getService('es');
const MILLISECOND_IN_WEEK = 1000 * 60 * 60 * 24 * 7;
describe('sample data apis', () => {
+ before(async () => {
+ await esArchiver.emptyKibanaIndex();
+ });
describe('list', () => {
it('should return list of sample data sets with installed status', async () => {
const resp = await supertest.get(`/api/sample_data`).set('kbn-xsrf', 'kibana').expect(200);
diff --git a/test/api_integration/apis/saved_objects/bulk_create.ts b/test/api_integration/apis/saved_objects/bulk_create.ts
index a548172365b07..d7cdee16214a8 100644
--- a/test/api_integration/apis/saved_objects/bulk_create.ts
+++ b/test/api_integration/apis/saved_objects/bulk_create.ts
@@ -97,10 +97,11 @@ export default function ({ getService }: FtrProviderContext) {
before(
async () =>
// just in case the kibana server has recreated it
- await es.indices.delete({ index: '.kibana' }, { ignore: [404] })
+ await es.indices.delete({ index: '.kibana*' }, { ignore: [404] })
);
- it('should return 200 with individual responses', async () =>
+ it('should return 200 with errors', async () => {
+ await new Promise((resolve) => setTimeout(resolve, 2000));
await supertest
.post('/api/saved_objects/_bulk_create')
.send(BULK_REQUESTS)
@@ -109,38 +110,27 @@ export default function ({ getService }: FtrProviderContext) {
expect(resp.body).to.eql({
saved_objects: [
{
- type: 'visualization',
- id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab',
- updated_at: resp.body.saved_objects[0].updated_at,
- version: resp.body.saved_objects[0].version,
- attributes: {
- title: 'An existing visualization',
- },
- references: [],
- namespaces: ['default'],
- migrationVersion: {
- visualization: resp.body.saved_objects[0].migrationVersion.visualization,
+ id: BULK_REQUESTS[0].id,
+ type: BULK_REQUESTS[0].type,
+ error: {
+ error: 'Internal Server Error',
+ message: 'An internal server error occurred',
+ statusCode: 500,
},
- coreMigrationVersion: KIBANA_VERSION, // updated from 1.2.3 to the latest kibana version
},
{
- type: 'dashboard',
- id: 'a01b2f57-fcfd-4864-b735-09e28f0d815e',
- updated_at: resp.body.saved_objects[1].updated_at,
- version: resp.body.saved_objects[1].version,
- attributes: {
- title: 'A great new dashboard',
- },
- references: [],
- namespaces: ['default'],
- migrationVersion: {
- dashboard: resp.body.saved_objects[1].migrationVersion.dashboard,
+ id: BULK_REQUESTS[1].id,
+ type: BULK_REQUESTS[1].type,
+ error: {
+ error: 'Internal Server Error',
+ message: 'An internal server error occurred',
+ statusCode: 500,
},
- coreMigrationVersion: KIBANA_VERSION,
},
],
});
- }));
+ });
+ });
});
});
}
diff --git a/test/api_integration/apis/saved_objects/bulk_get.ts b/test/api_integration/apis/saved_objects/bulk_get.ts
index 46631225f8e8a..b9536843d30c9 100644
--- a/test/api_integration/apis/saved_objects/bulk_get.ts
+++ b/test/api_integration/apis/saved_objects/bulk_get.ts
@@ -108,7 +108,7 @@ export default function ({ getService }: FtrProviderContext) {
before(
async () =>
// just in case the kibana server has recreated it
- await es.indices.delete({ index: '.kibana' }, { ignore: [404] })
+ await es.indices.delete({ index: '.kibana*' }, { ignore: [404] })
);
it('should return 200 with individual responses', async () =>
diff --git a/test/api_integration/apis/saved_objects/bulk_update.ts b/test/api_integration/apis/saved_objects/bulk_update.ts
index 5a2496b6dde81..2cf3ade406a93 100644
--- a/test/api_integration/apis/saved_objects/bulk_update.ts
+++ b/test/api_integration/apis/saved_objects/bulk_update.ts
@@ -235,10 +235,10 @@ export default function ({ getService }: FtrProviderContext) {
before(
async () =>
// just in case the kibana server has recreated it
- await es.indices.delete({ index: '.kibana' }, { ignore: [404] })
+ await es.indices.delete({ index: '.kibana*' }, { ignore: [404] })
);
- it('should return generic 404', async () => {
+ it('should return 200 with errors', async () => {
const response = await supertest
.put(`/api/saved_objects/_bulk_update`)
.send([
@@ -267,9 +267,9 @@ export default function ({ getService }: FtrProviderContext) {
id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab',
type: 'visualization',
error: {
- statusCode: 404,
- error: 'Not Found',
- message: 'Saved object [visualization/dd7caf20-9efd-11e7-acb3-3dab96693fab] not found',
+ statusCode: 500,
+ error: 'Internal Server Error',
+ message: 'An internal server error occurred',
},
});
@@ -277,9 +277,9 @@ export default function ({ getService }: FtrProviderContext) {
id: 'be3733a0-9efe-11e7-acb3-3dab96693fab',
type: 'dashboard',
error: {
- statusCode: 404,
- error: 'Not Found',
- message: 'Saved object [dashboard/be3733a0-9efe-11e7-acb3-3dab96693fab] not found',
+ statusCode: 500,
+ error: 'Internal Server Error',
+ message: 'An internal server error occurred',
},
});
});
diff --git a/test/api_integration/apis/saved_objects/create.ts b/test/api_integration/apis/saved_objects/create.ts
index 551e082630e8f..833cb127d0023 100644
--- a/test/api_integration/apis/saved_objects/create.ts
+++ b/test/api_integration/apis/saved_objects/create.ts
@@ -82,10 +82,10 @@ export default function ({ getService }: FtrProviderContext) {
before(
async () =>
// just in case the kibana server has recreated it
- await es.indices.delete({ index: '.kibana' }, { ignore: [404] })
+ await es.indices.delete({ index: '.kibana*' }, { ignore: [404] })
);
- it('should return 200 and create kibana index', async () => {
+ it('should return 500 and not auto-create saved objects index', async () => {
await supertest
.post(`/api/saved_objects/visualization`)
.send({
@@ -93,50 +93,16 @@ export default function ({ getService }: FtrProviderContext) {
title: 'My favorite vis',
},
})
- .expect(200)
+ .expect(500)
.then((resp) => {
- // loose uuid validation
- expect(resp.body)
- .to.have.property('id')
- .match(/^[0-9a-f-]{36}$/);
-
- // loose ISO8601 UTC time with milliseconds validation
- expect(resp.body)
- .to.have.property('updated_at')
- .match(/^[\d-]{10}T[\d:\.]{12}Z$/);
-
expect(resp.body).to.eql({
- id: resp.body.id,
- type: 'visualization',
- migrationVersion: resp.body.migrationVersion,
- coreMigrationVersion: KIBANA_VERSION,
- updated_at: resp.body.updated_at,
- version: resp.body.version,
- attributes: {
- title: 'My favorite vis',
- },
- references: [],
- namespaces: ['default'],
+ error: 'Internal Server Error',
+ message: 'An internal server error occurred.',
+ statusCode: 500,
});
- expect(resp.body.migrationVersion).to.be.ok();
});
- expect((await es.indices.exists({ index: '.kibana' })).body).to.be(true);
- });
-
- it('result should have the latest coreMigrationVersion', async () => {
- await supertest
- .post(`/api/saved_objects/visualization`)
- .send({
- attributes: {
- title: 'My favorite vis',
- },
- coreMigrationVersion: '1.2.3',
- })
- .expect(200)
- .then((resp) => {
- expect(resp.body.coreMigrationVersion).to.eql(KIBANA_VERSION);
- });
+ expect((await es.indices.exists({ index: '.kibana' })).body).to.be(false);
});
});
});
diff --git a/test/api_integration/apis/saved_objects/delete.ts b/test/api_integration/apis/saved_objects/delete.ts
index 9ba51b4b91468..d2dd4454bdf1e 100644
--- a/test/api_integration/apis/saved_objects/delete.ts
+++ b/test/api_integration/apis/saved_objects/delete.ts
@@ -44,7 +44,7 @@ export default function ({ getService }: FtrProviderContext) {
before(
async () =>
// just in case the kibana server has recreated it
- await es.indices.delete({ index: '.kibana' }, { ignore: [404] })
+ await es.indices.delete({ index: '.kibana*' }, { ignore: [404] })
);
it('returns generic 404 when kibana index is missing', async () =>
diff --git a/test/api_integration/apis/saved_objects/export.ts b/test/api_integration/apis/saved_objects/export.ts
index a45191f24d872..c0d5430070951 100644
--- a/test/api_integration/apis/saved_objects/export.ts
+++ b/test/api_integration/apis/saved_objects/export.ts
@@ -534,7 +534,7 @@ export default function ({ getService }: FtrProviderContext) {
before(
async () =>
// just in case the kibana server has recreated it
- await es.indices.delete({ index: '.kibana' }, { ignore: [404] })
+ await es.indices.delete({ index: '.kibana*' }, { ignore: [404] })
);
it('should return empty response', async () => {
diff --git a/test/api_integration/apis/saved_objects/find.ts b/test/api_integration/apis/saved_objects/find.ts
index 7aa4de86baa69..5f549dc6c5780 100644
--- a/test/api_integration/apis/saved_objects/find.ts
+++ b/test/api_integration/apis/saved_objects/find.ts
@@ -40,7 +40,7 @@ export default function ({ getService }: FtrProviderContext) {
{
type: 'visualization',
id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab',
- version: 'WzIsMV0=',
+ version: 'WzE4LDJd',
attributes: {
title: 'Count of requests',
},
@@ -137,7 +137,7 @@ export default function ({ getService }: FtrProviderContext) {
{
type: 'visualization',
id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab',
- version: 'WzIsMV0=',
+ version: 'WzE4LDJd',
attributes: {
title: 'Count of requests',
},
@@ -174,7 +174,7 @@ export default function ({ getService }: FtrProviderContext) {
{
type: 'visualization',
id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab',
- version: 'WzIsMV0=',
+ version: 'WzE4LDJd',
attributes: {
title: 'Count of requests',
},
@@ -209,7 +209,7 @@ export default function ({ getService }: FtrProviderContext) {
score: 0,
type: 'visualization',
updated_at: '2017-09-21T18:51:23.794Z',
- version: 'WzYsMV0=',
+ version: 'WzIyLDJd',
},
],
});
@@ -256,7 +256,7 @@ export default function ({ getService }: FtrProviderContext) {
migrationVersion: resp.body.saved_objects[0].migrationVersion,
coreMigrationVersion: KIBANA_VERSION,
updated_at: '2017-09-21T18:51:23.794Z',
- version: 'WzIsMV0=',
+ version: 'WzE4LDJd',
},
],
});
@@ -426,11 +426,11 @@ export default function ({ getService }: FtrProviderContext) {
}));
});
- describe.skip('without kibana index', () => {
+ describe('without kibana index', () => {
before(
async () =>
// just in case the kibana server has recreated it
- await es.indices.delete({ index: '.kibana' }, { ignore: [404] })
+ await es.indices.delete({ index: '.kibana*' }, { ignore: [404] })
);
it('should return 200 with empty response', async () =>
diff --git a/test/api_integration/apis/saved_objects/get.ts b/test/api_integration/apis/saved_objects/get.ts
index ff47b9df218dc..9bb6e32004c81 100644
--- a/test/api_integration/apis/saved_objects/get.ts
+++ b/test/api_integration/apis/saved_objects/get.ts
@@ -78,7 +78,7 @@ export default function ({ getService }: FtrProviderContext) {
before(
async () =>
// just in case the kibana server has recreated it
- await es.indices.delete({ index: '.kibana' }, { ignore: [404] })
+ await es.indices.delete({ index: '.kibana*' }, { ignore: [404] })
);
it('should return basic 404 without mentioning index', async () =>
diff --git a/test/api_integration/apis/saved_objects/resolve_import_errors.ts b/test/api_integration/apis/saved_objects/resolve_import_errors.ts
index 3686c46b229b1..042741476bb8e 100644
--- a/test/api_integration/apis/saved_objects/resolve_import_errors.ts
+++ b/test/api_integration/apis/saved_objects/resolve_import_errors.ts
@@ -13,6 +13,7 @@ import { FtrProviderContext } from '../../ftr_provider_context';
export default function ({ getService }: FtrProviderContext) {
const supertest = getService('supertest');
const esArchiver = getService('esArchiver');
+ const es = getService('legacyEs');
describe('resolve_import_errors', () => {
// mock success results including metadata
@@ -34,7 +35,14 @@ export default function ({ getService }: FtrProviderContext) {
describe('without kibana index', () => {
// Cleanup data that got created in import
- after(() => esArchiver.unload('saved_objects/basic'));
+ before(
+ async () =>
+ // just in case the kibana server has recreated it
+ await es.indices.delete({
+ index: '.kibana*',
+ ignore: [404],
+ })
+ );
it('should return 200 and import nothing when empty parameters are passed in', async () => {
await supertest
@@ -51,7 +59,7 @@ export default function ({ getService }: FtrProviderContext) {
});
});
- it('should return 200 and import everything when overwrite parameters contains all objects', async () => {
+ it('should return 200 with internal server errors', async () => {
await supertest
.post('/api/saved_objects/_resolve_import_errors')
.field(
@@ -78,12 +86,42 @@ export default function ({ getService }: FtrProviderContext) {
.expect(200)
.then((resp) => {
expect(resp.body).to.eql({
- success: true,
- successCount: 3,
- successResults: [
- { ...indexPattern, overwrite: true },
- { ...visualization, overwrite: true },
- { ...dashboard, overwrite: true },
+ successCount: 0,
+ success: false,
+ errors: [
+ {
+ ...indexPattern,
+ ...{ title: indexPattern.meta.title },
+ overwrite: true,
+ error: {
+ statusCode: 500,
+ error: 'Internal Server Error',
+ message: 'An internal server error occurred',
+ type: 'unknown',
+ },
+ },
+ {
+ ...visualization,
+ ...{ title: visualization.meta.title },
+ overwrite: true,
+ error: {
+ statusCode: 500,
+ error: 'Internal Server Error',
+ message: 'An internal server error occurred',
+ type: 'unknown',
+ },
+ },
+ {
+ ...dashboard,
+ ...{ title: dashboard.meta.title },
+ overwrite: true,
+ error: {
+ statusCode: 500,
+ error: 'Internal Server Error',
+ message: 'An internal server error occurred',
+ type: 'unknown',
+ },
+ },
],
warnings: [],
});
diff --git a/test/api_integration/apis/saved_objects/update.ts b/test/api_integration/apis/saved_objects/update.ts
index d5346e82ce98c..da7285a430fdd 100644
--- a/test/api_integration/apis/saved_objects/update.ts
+++ b/test/api_integration/apis/saved_objects/update.ts
@@ -121,10 +121,10 @@ export default function ({ getService }: FtrProviderContext) {
before(
async () =>
// just in case the kibana server has recreated it
- await es.indices.delete({ index: '.kibana' }, { ignore: [404] })
+ await es.indices.delete({ index: '.kibana*' }, { ignore: [404] })
);
- it('should return generic 404', async () =>
+ it('should return 500', async () =>
await supertest
.put(`/api/saved_objects/visualization/dd7caf20-9efd-11e7-acb3-3dab96693fab`)
.send({
@@ -132,13 +132,12 @@ export default function ({ getService }: FtrProviderContext) {
title: 'My second favorite vis',
},
})
- .expect(404)
+ .expect(500)
.then((resp) => {
expect(resp.body).eql({
- statusCode: 404,
- error: 'Not Found',
- message:
- 'Saved object [visualization/dd7caf20-9efd-11e7-acb3-3dab96693fab] not found',
+ statusCode: 500,
+ error: 'Internal Server Error',
+ message: 'An internal server error occurred.',
});
}));
});
diff --git a/test/api_integration/apis/saved_objects_management/find.ts b/test/api_integration/apis/saved_objects_management/find.ts
index acc01c73de674..8453b542903a4 100644
--- a/test/api_integration/apis/saved_objects_management/find.ts
+++ b/test/api_integration/apis/saved_objects_management/find.ts
@@ -42,7 +42,7 @@ export default function ({ getService }: FtrProviderContext) {
{
type: 'visualization',
id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab',
- version: 'WzIsMV0=',
+ version: 'WzE4LDJd',
attributes: {
title: 'Count of requests',
},
@@ -184,7 +184,7 @@ export default function ({ getService }: FtrProviderContext) {
before(
async () =>
// just in case the kibana server has recreated it
- await es.indices.delete({ index: '.kibana' }, { ignore: [404] })
+ await es.indices.delete({ index: '.kibana*' }, { ignore: [404] })
);
it('should return 200 with empty response', async () =>
diff --git a/test/api_integration/apis/saved_objects_management/get.ts b/test/api_integration/apis/saved_objects_management/get.ts
index bc05d7e392bb9..70e1faa9fd22b 100644
--- a/test/api_integration/apis/saved_objects_management/get.ts
+++ b/test/api_integration/apis/saved_objects_management/get.ts
@@ -45,7 +45,7 @@ export default function ({ getService }: FtrProviderContext) {
before(
async () =>
// just in case the kibana server has recreated it
- await es.indices.delete({ index: '.kibana' }, { ignore: [404] })
+ await es.indices.delete({ index: '.kibana*' }, { ignore: [404] })
);
it('should return 404 for object that no longer exists', async () =>
diff --git a/test/api_integration/apis/search/search.ts b/test/api_integration/apis/search/search.ts
index 155705f81fa8a..e43c449309306 100644
--- a/test/api_integration/apis/search/search.ts
+++ b/test/api_integration/apis/search/search.ts
@@ -17,6 +17,7 @@ export default function ({ getService }: FtrProviderContext) {
describe('search', () => {
before(async () => {
+ await esArchiver.emptyKibanaIndex();
await esArchiver.loadIfNeeded('../../../functional/fixtures/es_archiver/logstash_functional');
});
diff --git a/test/api_integration/apis/telemetry/opt_in.ts b/test/api_integration/apis/telemetry/opt_in.ts
index f03b33e61965e..ba5f46c38211f 100644
--- a/test/api_integration/apis/telemetry/opt_in.ts
+++ b/test/api_integration/apis/telemetry/opt_in.ts
@@ -14,10 +14,13 @@ import { FtrProviderContext } from '../../ftr_provider_context';
export default function optInTest({ getService }: FtrProviderContext) {
const supertest = getService('supertest');
const kibanaServer = getService('kibanaServer');
+ const esArchiver = getService('esArchiver');
+
describe('/api/telemetry/v2/optIn API', () => {
let defaultAttributes: TelemetrySavedObjectAttributes;
let kibanaVersion: any;
before(async () => {
+ await esArchiver.emptyKibanaIndex();
const kibanaVersionAccessor = kibanaServer.version;
kibanaVersion = await kibanaVersionAccessor.get();
defaultAttributes =
diff --git a/test/api_integration/apis/telemetry/telemetry_local.ts b/test/api_integration/apis/telemetry/telemetry_local.ts
index 25d29a807bdad..650846015a4a2 100644
--- a/test/api_integration/apis/telemetry/telemetry_local.ts
+++ b/test/api_integration/apis/telemetry/telemetry_local.ts
@@ -177,6 +177,7 @@ export default function ({ getService }: FtrProviderContext) {
describe('basic behaviour', () => {
let savedObjectIds: string[] = [];
before('create application usage entries', async () => {
+ await esArchiver.emptyKibanaIndex();
savedObjectIds = await Promise.all([
createSavedObject(),
createSavedObject('appView1'),
diff --git a/test/api_integration/apis/ui_counters/ui_counters.ts b/test/api_integration/apis/ui_counters/ui_counters.ts
index 1cf16fe433bf9..8d60c79c9698d 100644
--- a/test/api_integration/apis/ui_counters/ui_counters.ts
+++ b/test/api_integration/apis/ui_counters/ui_counters.ts
@@ -13,6 +13,7 @@ import { FtrProviderContext } from '../../ftr_provider_context';
export default function ({ getService }: FtrProviderContext) {
const supertest = getService('supertest');
+ const esArchiver = getService('esArchiver');
const es = getService('es');
const createUiCounterEvent = (eventName: string, type: UiCounterMetricType, count = 1) => ({
@@ -23,6 +24,10 @@ export default function ({ getService }: FtrProviderContext) {
});
describe('UI Counters API', () => {
+ before(async () => {
+ await esArchiver.emptyKibanaIndex();
+ });
+
const dayDate = moment().format('DDMMYYYY');
it('stores ui counter events in savedObjects', async () => {
diff --git a/test/api_integration/apis/ui_metric/ui_metric.ts b/test/api_integration/apis/ui_metric/ui_metric.ts
index d330cb037d1a1..e3b3b2ec4c542 100644
--- a/test/api_integration/apis/ui_metric/ui_metric.ts
+++ b/test/api_integration/apis/ui_metric/ui_metric.ts
@@ -13,6 +13,7 @@ import { FtrProviderContext } from '../../ftr_provider_context';
export default function ({ getService }: FtrProviderContext) {
const supertest = getService('supertest');
+ const esArchiver = getService('esArchiver');
const es = getService('es');
const createStatsMetric = (
@@ -34,6 +35,10 @@ export default function ({ getService }: FtrProviderContext) {
});
describe('ui_metric savedObject data', () => {
+ before(async () => {
+ await esArchiver.emptyKibanaIndex();
+ });
+
it('increments the count field in the document defined by the {app}/{action_type} path', async () => {
const reportManager = new ReportManager();
const uiStatsMetric = createStatsMetric('myEvent');
diff --git a/test/common/config.js b/test/common/config.js
index b6d12444b7017..8a42e6c87b214 100644
--- a/test/common/config.js
+++ b/test/common/config.js
@@ -61,8 +61,6 @@ export default function () {
...(!!process.env.CODE_COVERAGE
? [`--plugin-path=${path.join(__dirname, 'fixtures', 'plugins', 'coverage')}`]
: []),
- // Disable v2 migrations in tests for now
- '--migrations.enableV2=false',
],
},
services,
diff --git a/test/common/services/kibana_server/extend_es_archiver.js b/test/common/services/kibana_server/extend_es_archiver.js
index 5390b43a87187..1d76bc4473767 100644
--- a/test/common/services/kibana_server/extend_es_archiver.js
+++ b/test/common/services/kibana_server/extend_es_archiver.js
@@ -6,7 +6,7 @@
* Public License, v 1.
*/
-const ES_ARCHIVER_LOAD_METHODS = ['load', 'loadIfNeeded', 'unload'];
+const ES_ARCHIVER_LOAD_METHODS = ['load', 'loadIfNeeded', 'unload', 'emptyKibanaIndex'];
const KIBANA_INDEX = '.kibana';
export function extendEsArchiver({ esArchiver, kibanaServer, retry, defaults }) {
@@ -25,7 +25,7 @@ export function extendEsArchiver({ esArchiver, kibanaServer, retry, defaults })
const statsKeys = Object.keys(stats);
const kibanaKeys = statsKeys.filter(
// this also matches stats keys like '.kibana_1' and '.kibana_2,.kibana_1'
- (key) => key.includes(KIBANA_INDEX) && (stats[key].created || stats[key].deleted)
+ (key) => key.includes(KIBANA_INDEX) && stats[key].created
);
// if the kibana index was created by the esArchiver then update the uiSettings
diff --git a/test/functional/apps/management/_import_objects.ts b/test/functional/apps/management/_import_objects.ts
index 754406938e47b..e18f2a7485444 100644
--- a/test/functional/apps/management/_import_objects.ts
+++ b/test/functional/apps/management/_import_objects.ts
@@ -27,9 +27,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
describe.skip('import objects', function describeIndexTests() {
describe('.ndjson file', () => {
beforeEach(async function () {
+ await esArchiver.load('management');
await kibanaServer.uiSettings.replace({});
await PageObjects.settings.navigateTo();
- await esArchiver.load('management');
await PageObjects.settings.clickKibanaSavedObjects();
});
@@ -213,10 +213,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
describe('.json file', () => {
beforeEach(async function () {
- // delete .kibana index and then wait for Kibana to re-create it
+ await esArchiver.load('saved_objects_imports');
await kibanaServer.uiSettings.replace({});
await PageObjects.settings.navigateTo();
- await esArchiver.load('saved_objects_imports');
await PageObjects.settings.clickKibanaSavedObjects();
});
diff --git a/test/functional/apps/management/_index_pattern_filter.js b/test/functional/apps/management/_index_pattern_filter.js
index eae53682b6ccf..91ea13348d611 100644
--- a/test/functional/apps/management/_index_pattern_filter.js
+++ b/test/functional/apps/management/_index_pattern_filter.js
@@ -12,10 +12,11 @@ export default function ({ getService, getPageObjects }) {
const kibanaServer = getService('kibanaServer');
const retry = getService('retry');
const PageObjects = getPageObjects(['settings']);
+ const esArchiver = getService('esArchiver');
describe('index pattern filter', function describeIndexTests() {
before(async function () {
- // delete .kibana index and then wait for Kibana to re-create it
+ await esArchiver.emptyKibanaIndex();
await kibanaServer.uiSettings.replace({});
await PageObjects.settings.navigateTo();
await PageObjects.settings.clickKibanaIndexPatterns();
diff --git a/test/functional/apps/management/_index_patterns_empty.ts b/test/functional/apps/management/_index_patterns_empty.ts
index 3b89e05d4b582..4e86de6d70653 100644
--- a/test/functional/apps/management/_index_patterns_empty.ts
+++ b/test/functional/apps/management/_index_patterns_empty.ts
@@ -19,7 +19,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
describe('index pattern empty view', () => {
before(async () => {
- await esArchiver.load('empty_kibana');
+ await esArchiver.emptyKibanaIndex();
await esArchiver.unload('logstash_functional');
await esArchiver.unload('makelogs');
await kibanaServer.uiSettings.replace({});
@@ -27,7 +27,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
});
after(async () => {
- await esArchiver.unload('empty_kibana');
await esArchiver.loadIfNeeded('makelogs');
// @ts-expect-error
await es.transport.request({
diff --git a/test/functional/apps/management/_mgmt_import_saved_objects.js b/test/functional/apps/management/_mgmt_import_saved_objects.js
index 45a18d5932764..87eca2c7a5a65 100644
--- a/test/functional/apps/management/_mgmt_import_saved_objects.js
+++ b/test/functional/apps/management/_mgmt_import_saved_objects.js
@@ -18,14 +18,13 @@ export default function ({ getService, getPageObjects }) {
describe('mgmt saved objects', function describeIndexTests() {
beforeEach(async function () {
- await esArchiver.load('empty_kibana');
+ await esArchiver.emptyKibanaIndex();
await esArchiver.load('discover');
await PageObjects.settings.navigateTo();
});
afterEach(async function () {
await esArchiver.unload('discover');
- await esArchiver.load('empty_kibana');
});
it('should import saved objects mgmt', async function () {
diff --git a/test/functional/apps/management/_test_huge_fields.js b/test/functional/apps/management/_test_huge_fields.js
index 2ab619276d2b9..c1fca31e695cb 100644
--- a/test/functional/apps/management/_test_huge_fields.js
+++ b/test/functional/apps/management/_test_huge_fields.js
@@ -20,6 +20,7 @@ export default function ({ getService, getPageObjects }) {
const EXPECTED_FIELD_COUNT = '10006';
before(async function () {
await security.testUser.setRoles(['kibana_admin', 'test_testhuge_reader']);
+ await esArchiver.emptyKibanaIndex();
await esArchiver.loadIfNeeded('large_fields');
await PageObjects.settings.createIndexPattern('testhuge', 'date');
});
diff --git a/test/functional/apps/management/index.ts b/test/functional/apps/management/index.ts
index ca89853875027..06e652f9f3e59 100644
--- a/test/functional/apps/management/index.ts
+++ b/test/functional/apps/management/index.ts
@@ -14,13 +14,11 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) {
describe('management', function () {
before(async () => {
await esArchiver.unload('logstash_functional');
- await esArchiver.load('empty_kibana');
await esArchiver.loadIfNeeded('makelogs');
});
after(async () => {
await esArchiver.unload('makelogs');
- await esArchiver.unload('empty_kibana');
});
describe('', function () {
diff --git a/test/functional/apps/visualize/input_control_vis/input_control_range.ts b/test/functional/apps/visualize/input_control_vis/input_control_range.ts
index 9b48e78246b37..613b1a162eb63 100644
--- a/test/functional/apps/visualize/input_control_vis/input_control_range.ts
+++ b/test/functional/apps/visualize/input_control_vis/input_control_range.ts
@@ -12,7 +12,6 @@ import { FtrProviderContext } from '../../../ftr_provider_context';
export default function ({ getService, getPageObjects }: FtrProviderContext) {
const esArchiver = getService('esArchiver');
- const kibanaServer = getService('kibanaServer');
const find = getService('find');
const security = getService('security');
const { visualize, visEditor } = getPageObjects(['visualize', 'visEditor']);
@@ -53,7 +52,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await esArchiver.loadIfNeeded('logstash_functional');
await esArchiver.loadIfNeeded('long_window_logstash');
await esArchiver.load('visualize');
- await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-*' });
await security.testUser.restoreDefaults();
});
});
diff --git a/test/plugin_functional/test_suites/core_plugins/applications.ts b/test/plugin_functional/test_suites/core_plugins/applications.ts
index e72d032f63469..52924d8c93280 100644
--- a/test/plugin_functional/test_suites/core_plugins/applications.ts
+++ b/test/plugin_functional/test_suites/core_plugins/applications.ts
@@ -19,6 +19,7 @@ export default function ({ getService, getPageObjects }: PluginFunctionalProvide
const find = getService('find');
const retry = getService('retry');
const deployment = getService('deployment');
+ const esArchiver = getService('esArchiver');
const loadingScreenNotShown = async () =>
expect(await testSubjects.exists('kbnLoadingMessage')).to.be(false);
@@ -50,6 +51,7 @@ export default function ({ getService, getPageObjects }: PluginFunctionalProvide
describe('ui applications', function describeIndexTests() {
before(async () => {
+ await esArchiver.emptyKibanaIndex();
await PageObjects.common.navigateToApp('foo');
});
diff --git a/test/plugin_functional/test_suites/data_plugin/index_patterns.ts b/test/plugin_functional/test_suites/data_plugin/index_patterns.ts
index ba12e2df16d41..0cd53a5e1b764 100644
--- a/test/plugin_functional/test_suites/data_plugin/index_patterns.ts
+++ b/test/plugin_functional/test_suites/data_plugin/index_patterns.ts
@@ -12,8 +12,12 @@ import '../../plugins/core_provider_plugin/types';
export default function ({ getService }: PluginFunctionalProviderContext) {
const supertest = getService('supertest');
+ const esArchiver = getService('esArchiver');
describe('index patterns', function () {
+ before(async () => {
+ await esArchiver.emptyKibanaIndex();
+ });
let indexPatternId = '';
it('can create an index pattern', async () => {
diff --git a/test/plugin_functional/test_suites/saved_objects_management/import_warnings.ts b/test/plugin_functional/test_suites/saved_objects_management/import_warnings.ts
index 71663b19b35cb..b60e4b4a1d8b7 100644
--- a/test/plugin_functional/test_suites/saved_objects_management/import_warnings.ts
+++ b/test/plugin_functional/test_suites/saved_objects_management/import_warnings.ts
@@ -10,10 +10,15 @@ import path from 'path';
import expect from '@kbn/expect';
import { PluginFunctionalProviderContext } from '../../services';
-export default function ({ getPageObjects }: PluginFunctionalProviderContext) {
+export default function ({ getPageObjects, getService }: PluginFunctionalProviderContext) {
const PageObjects = getPageObjects(['common', 'settings', 'header', 'savedObjects']);
+ const esArchiver = getService('esArchiver');
describe('import warnings', () => {
+ before(async () => {
+ await esArchiver.emptyKibanaIndex();
+ });
+
beforeEach(async () => {
await PageObjects.settings.navigateTo();
await PageObjects.settings.clickKibanaSavedObjects();
diff --git a/test/security_functional/insecure_cluster_warning.ts b/test/security_functional/insecure_cluster_warning.ts
index 181c4cf2b46b7..2f7656b743a51 100644
--- a/test/security_functional/insecure_cluster_warning.ts
+++ b/test/security_functional/insecure_cluster_warning.ts
@@ -31,6 +31,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
before(async () => {
await browser.setLocalStorageItem('insecureClusterWarningVisibility', '');
await esArchiver.unload('hamlet');
+ await esArchiver.emptyKibanaIndex();
});
it('should not warn when the cluster contains no user data', async () => {
diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts
index 8ed979a171169..2a256266697e6 100644
--- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts
+++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts
@@ -11,10 +11,6 @@ import { setupSpacesAndUsers, tearDown } from '..';
export default function alertingTests({ loadTestFile, getService }: FtrProviderContext) {
describe('Alerts', () => {
describe('legacy alerts', () => {
- before(async () => {
- await setupSpacesAndUsers(getService);
- });
-
after(async () => {
await tearDown(getService);
});
diff --git a/x-pack/test/functional/apps/dashboard/_async_dashboard.ts b/x-pack/test/functional/apps/dashboard/_async_dashboard.ts
index 8851c83dea1ff..fceccb4609bd7 100644
--- a/x-pack/test/functional/apps/dashboard/_async_dashboard.ts
+++ b/x-pack/test/functional/apps/dashboard/_async_dashboard.ts
@@ -12,6 +12,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const retry = getService('retry');
const browser = getService('browser');
const kibanaServer = getService('kibanaServer');
+ const esArchiver = getService('esArchiver');
const log = getService('log');
const pieChart = getService('pieChart');
const find = getService('find');
@@ -29,6 +30,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
describe('sample data dashboard', function describeIndexTests() {
before(async () => {
+ await esArchiver.emptyKibanaIndex();
await PageObjects.common.sleep(5000);
await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', {
useActualUrl: true,
diff --git a/x-pack/test/functional/es_archives/visualize/default/data.json b/x-pack/test/functional/es_archives/visualize/default/data.json
index fe29bad0fa381..26b033e28b4da 100644
--- a/x-pack/test/functional/es_archives/visualize/default/data.json
+++ b/x-pack/test/functional/es_archives/visualize/default/data.json
@@ -125,26 +125,8 @@
{
"type": "doc",
"value": {
- "id": "custom-space:index-pattern:metricbeat-*",
- "index": ".kibana_1",
- "source": {
- "index-pattern": {
- "fieldFormatMap": "{\"aerospike.namespace.device.available.pct\":{\"id\":\"percent\",\"params\":{}},\"aerospike.namespace.device.free.pct\":{\"id\":\"percent\",\"params\":{}},\"aerospike.namespace.device.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aerospike.namespace.device.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aerospike.namespace.memory.free.pct\":{\"id\":\"percent\",\"params\":{}},\"aerospike.namespace.memory.used.data.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aerospike.namespace.memory.used.index.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aerospike.namespace.memory.used.sindex.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aerospike.namespace.memory.used.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.ec2.diskio.read.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.ec2.diskio.write.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.ec2.network.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.ec2.network.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.cpu.total.pct\":{\"id\":\"percent\",\"params\":{}},\"aws.rds.disk_usage.bin_log.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.free_local_storage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.free_storage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.freeable_memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.latency.commit\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.ddl\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.dml\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.insert\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.read\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.select\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.update\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.write\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.replica_lag.sec\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.swap_usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.volume_used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.s3_daily_storage.bucket.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.s3_request.downloaded.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.s3_request.latency.first_byte.ms\":{\"id\":\"duration\",\"params\":{}},\"aws.s3_request.latency.total_request.ms\":{\"id\":\"duration\",\"params\":{}},\"aws.s3_request.requests.select_returned.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.s3_request.requests.select_scanned.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.s3_request.uploaded.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.sqs.oldest_message_age.sec\":{\"id\":\"duration\",\"params\":{}},\"aws.sqs.sent_message_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_disk.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_disk.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_disk.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.degraded.ratio\":{\"id\":\"percent\",\"params\":{}},\"ceph.cluster_status.misplace.ratio\":{\"id\":\"percent\",\"params\":{}},\"ceph.cluster_status.pg.avail_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.pg.data_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.pg.total_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.pg.used_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.traffic.read_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.traffic.write_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.monitor_health.store_stats.log.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.monitor_health.store_stats.misc.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.monitor_health.store_stats.sst.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.monitor_health.store_stats.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.osd_df.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.osd_df.total.byte\":{\"id\":\"bytes\",\"params\":{}},\"ceph.osd_df.used.byte\":{\"id\":\"bytes\",\"params\":{}},\"ceph.osd_df.used.pct\":{\"id\":\"percent\",\"params\":{}},\"ceph.pool_disk.stats.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.pool_disk.stats.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"client.bytes\":{\"id\":\"bytes\",\"params\":{}},\"client.nat.port\":{\"id\":\"string\",\"params\":{}},\"client.port\":{\"id\":\"string\",\"params\":{}},\"coredns.stats.dns.request.duration.ns.sum\":{\"id\":\"duration\",\"params\":{}},\"couchbase.bucket.data.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.bucket.disk.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.bucket.memory.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.bucket.quota.ram.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.bucket.quota.use.pct\":{\"id\":\"percent\",\"params\":{}},\"couchbase.cluster.hdd.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.hdd.quota.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.hdd.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.hdd.used.by_data.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.hdd.used.value.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.quota.total.per_node.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.quota.total.value.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.quota.used.per_node.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.quota.used.value.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.used.by_data.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.used.value.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.node.couch.docs.data_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.node.couch.docs.disk_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.node.mcd_memory.allocated.bytes\":{\"id\":\"bytes\",\"params\":{}},\"destination.bytes\":{\"id\":\"bytes\",\"params\":{}},\"destination.nat.port\":{\"id\":\"string\",\"params\":{}},\"destination.port\":{\"id\":\"string\",\"params\":{}},\"docker.cpu.core.*.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.cpu.kernel.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.cpu.system.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.cpu.total.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.cpu.user.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.diskio.read.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.diskio.summary.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.diskio.write.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.commit.peak\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.commit.total\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.limit\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.private_working_set.total\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.rss.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.memory.rss.total\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.usage.max\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.usage.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.memory.usage.total\":{\"id\":\"bytes\",\"params\":{}},\"docker.network.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.network.inbound.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.network.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.network.outbound.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.summary.primaries.segments.memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.summary.primaries.store.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.summary.total.segments.memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.summary.total.store.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.total.segments.memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.total.store.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.jvm.memory.heap.init.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.jvm.memory.heap.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.jvm.memory.nonheap.init.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.jvm.memory.nonheap.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.fs.summary.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.fs.summary.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.fs.summary.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.indices.segments.memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.old.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.old.peak.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.old.peak_max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.old.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.survivor.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.survivor.peak.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.survivor.peak_max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.survivor.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.young.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.young.peak.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.young.peak_max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.young.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"etcd.disk.mvcc_db_total_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"etcd.memory.go_memstats_alloc.bytes\":{\"id\":\"bytes\",\"params\":{}},\"etcd.network.client_grpc_received.bytes\":{\"id\":\"bytes\",\"params\":{}},\"etcd.network.client_grpc_sent.bytes\":{\"id\":\"bytes\",\"params\":{}},\"event.duration\":{\"id\":\"duration\",\"params\":{\"inputFormat\":\"nanoseconds\",\"outputFormat\":\"asMilliseconds\",\"outputPrecision\":1}},\"event.sequence\":{\"id\":\"string\",\"params\":{}},\"event.severity\":{\"id\":\"string\",\"params\":{}},\"golang.heap.allocations.active\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.allocations.allocated\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.allocations.idle\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.allocations.total\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.gc.next_gc_limit\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.system.obtained\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.system.released\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.system.stack\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.system.total\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.info.idle.pct\":{\"id\":\"percent\",\"params\":{}},\"haproxy.info.memory.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.info.ssl.frontend.session_reuse.pct\":{\"id\":\"percent\",\"params\":{}},\"haproxy.stat.compressor.bypassed.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.compressor.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.compressor.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.compressor.response.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.throttle.pct\":{\"id\":\"percent\",\"params\":{}},\"http.request.body.bytes\":{\"id\":\"bytes\",\"params\":{}},\"http.request.bytes\":{\"id\":\"bytes\",\"params\":{}},\"http.response.body.bytes\":{\"id\":\"bytes\",\"params\":{}},\"http.response.bytes\":{\"id\":\"bytes\",\"params\":{}},\"http.response.status_code\":{\"id\":\"string\",\"params\":{}},\"kibana.stats.process.memory.heap.size_limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kibana.stats.process.memory.heap.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kibana.stats.process.memory.heap.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.apiserver.http.request.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.apiserver.http.response.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.apiserver.process.memory.resident.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.apiserver.process.memory.virtual.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.cpu.usage.limit.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.container.cpu.usage.node.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.container.logs.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.logs.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.logs.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.request.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.usage.limit.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.container.memory.usage.node.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.container.memory.workingset.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.rootfs.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.rootfs.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.rootfs.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.controllermanager.http.request.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.controllermanager.http.response.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.controllermanager.process.memory.resident.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.controllermanager.process.memory.virtual.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.fs.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.fs.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.fs.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.allocatable.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.workingset.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.network.rx.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.network.tx.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.runtime.imagefs.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.runtime.imagefs.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.runtime.imagefs.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.cpu.usage.limit.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.pod.cpu.usage.node.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.pod.memory.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.memory.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.memory.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.memory.usage.limit.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.pod.memory.usage.node.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.pod.memory.working_set.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.network.rx.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.network.tx.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.proxy.http.request.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.proxy.http.response.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.proxy.process.memory.resident.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.proxy.process.memory.virtual.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.scheduler.http.request.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.scheduler.http.response.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.scheduler.process.memory.resident.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.scheduler.process.memory.virtual.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.system.memory.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.system.memory.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.system.memory.workingset.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.volume.fs.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.volume.fs.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.volume.fs.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.avg_obj_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.data_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.extent_free_list.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.file_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.index_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.storage_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.replstatus.headroom.max\":{\"id\":\"duration\",\"params\":{}},\"mongodb.replstatus.headroom.min\":{\"id\":\"duration\",\"params\":{}},\"mongodb.replstatus.lag.max\":{\"id\":\"duration\",\"params\":{}},\"mongodb.replstatus.lag.min\":{\"id\":\"duration\",\"params\":{}},\"mongodb.replstatus.oplog.size.allocated\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.replstatus.oplog.size.used\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.extra_info.heap_usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.network.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.network.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.cache.dirty.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.cache.maximum.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.cache.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.log.max_file_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.log.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.log.write.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mysql.status.bytes.received\":{\"id\":\"bytes\",\"params\":{}},\"mysql.status.bytes.sent\":{\"id\":\"bytes\",\"params\":{}},\"nats.stats.cpu\":{\"id\":\"percent\",\"params\":{}},\"nats.stats.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"nats.stats.mem.bytes\":{\"id\":\"bytes\",\"params\":{}},\"nats.stats.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"nats.stats.uptime\":{\"id\":\"duration\",\"params\":{}},\"nats.subscriptions.cache.hit_rate\":{\"id\":\"percent\",\"params\":{}},\"network.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.data_file.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.data_file.size.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.data_file.size.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.space.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.space.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.space.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"process.pgid\":{\"id\":\"string\",\"params\":{}},\"process.pid\":{\"id\":\"string\",\"params\":{}},\"process.ppid\":{\"id\":\"string\",\"params\":{}},\"process.thread.id\":{\"id\":\"string\",\"params\":{}},\"rabbitmq.connection.frame_max\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.disk.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.disk.free.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.gc.reclaimed.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.io.read.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.io.write.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.mem.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.queue.consumers.utilisation.pct\":{\"id\":\"percent\",\"params\":{}},\"rabbitmq.queue.memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.allocator_stats.active\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.allocator_stats.allocated\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.allocator_stats.fragmentation.bytes\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.allocator_stats.resident\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.allocator_stats.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.fragmentation.bytes\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.max.value\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.used.dataset\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.used.lua\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.used.peak\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.used.rss\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.used.value\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.aof.buffer.size\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.aof.copy_on_write.last_size\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.aof.rewrite.buffer.size\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.aof.rewrite.current_time.sec\":{\"id\":\"duration\",\"params\":{}},\"redis.info.persistence.aof.rewrite.last_time.sec\":{\"id\":\"duration\",\"params\":{}},\"redis.info.persistence.aof.size.base\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.aof.size.current\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.rdb.bgsave.current_time.sec\":{\"id\":\"duration\",\"params\":{}},\"redis.info.persistence.rdb.bgsave.last_time.sec\":{\"id\":\"duration\",\"params\":{}},\"redis.info.persistence.rdb.copy_on_write.last_size\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.replication.backlog.size\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.replication.master.last_io_seconds_ago\":{\"id\":\"duration\",\"params\":{}},\"redis.info.replication.master.sync.last_io_seconds_ago\":{\"id\":\"duration\",\"params\":{}},\"redis.info.replication.master.sync.left_bytes\":{\"id\":\"bytes\",\"params\":{}},\"server.bytes\":{\"id\":\"bytes\",\"params\":{}},\"server.nat.port\":{\"id\":\"string\",\"params\":{}},\"server.port\":{\"id\":\"string\",\"params\":{}},\"source.bytes\":{\"id\":\"bytes\",\"params\":{}},\"source.nat.port\":{\"id\":\"string\",\"params\":{}},\"source.port\":{\"id\":\"string\",\"params\":{}},\"system.core.idle.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.iowait.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.irq.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.nice.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.softirq.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.steal.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.system.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.user.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.idle.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.idle.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.iowait.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.iowait.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.irq.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.irq.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.nice.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.nice.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.softirq.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.softirq.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.steal.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.steal.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.system.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.system.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.total.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.total.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.user.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.user.pct\":{\"id\":\"percent\",\"params\":{}},\"system.diskio.iostat.read.per_sec.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.diskio.iostat.write.per_sec.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.diskio.read.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.diskio.write.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.entropy.pct\":{\"id\":\"percent\",\"params\":{}},\"system.filesystem.available\":{\"id\":\"bytes\",\"params\":{}},\"system.filesystem.free\":{\"id\":\"bytes\",\"params\":{}},\"system.filesystem.total\":{\"id\":\"bytes\",\"params\":{}},\"system.filesystem.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.filesystem.used.pct\":{\"id\":\"percent\",\"params\":{}},\"system.fsstat.total_size.free\":{\"id\":\"bytes\",\"params\":{}},\"system.fsstat.total_size.total\":{\"id\":\"bytes\",\"params\":{}},\"system.fsstat.total_size.used\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.actual.free\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.actual.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.actual.used.pct\":{\"id\":\"percent\",\"params\":{}},\"system.memory.free\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.hugepages.default_size\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.hugepages.free\":{\"id\":\"number\",\"params\":{}},\"system.memory.hugepages.reserved\":{\"id\":\"number\",\"params\":{}},\"system.memory.hugepages.surplus\":{\"id\":\"number\",\"params\":{}},\"system.memory.hugepages.total\":{\"id\":\"number\",\"params\":{}},\"system.memory.hugepages.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.hugepages.used.pct\":{\"id\":\"percent\",\"params\":{}},\"system.memory.swap.free\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.swap.total\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.swap.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.swap.used.pct\":{\"id\":\"percent\",\"params\":{}},\"system.memory.total\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.used.pct\":{\"id\":\"percent\",\"params\":{}},\"system.network.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.network.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.blkio.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem.usage.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem_tcp.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem_tcp.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem_tcp.usage.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.mem.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.mem.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.mem.usage.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.memsw.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.memsw.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.memsw.usage.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.active_anon.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.active_file.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.cache.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.hierarchical_memory_limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.hierarchical_memsw_limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.inactive_anon.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.inactive_file.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.mapped_file.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.rss_huge.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.swap.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.unevictable.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cpu.total.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.process.cpu.total.pct\":{\"id\":\"percent\",\"params\":{}},\"system.process.memory.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.memory.rss.pct\":{\"id\":\"percent\",\"params\":{}},\"system.process.memory.share\":{\"id\":\"bytes\",\"params\":{}},\"system.process.memory.size\":{\"id\":\"bytes\",\"params\":{}},\"system.socket.summary.tcp.memory\":{\"id\":\"bytes\",\"params\":{}},\"system.socket.summary.udp.memory\":{\"id\":\"bytes\",\"params\":{}},\"system.uptime.duration.ms\":{\"id\":\"duration\",\"params\":{\"inputFormat\":\"milliseconds\"}},\"url.port\":{\"id\":\"string\",\"params\":{}},\"vsphere.datastore.capacity.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.datastore.capacity.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.datastore.capacity.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.datastore.capacity.used.pct\":{\"id\":\"percent\",\"params\":{}},\"vsphere.host.memory.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.host.memory.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.host.memory.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.virtualmachine.memory.free.guest.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.virtualmachine.memory.total.guest.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.virtualmachine.memory.used.guest.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.virtualmachine.memory.used.host.bytes\":{\"id\":\"bytes\",\"params\":{}},\"windows.service.uptime.ms\":{\"id\":\"duration\",\"params\":{\"inputFormat\":\"milliseconds\"}}}",
- "timeFieldName": "@timestamp",
- "title": "metricbeat-*"
- },
- "migrationVersion": {
- "index-pattern": "7.6.0"
- },
- "type": "index-pattern",
- "updated_at": "2020-01-22T15:34:59.061Z"
- }
- }
-}
-
-{
- "type": "doc",
- "value": {
+ "index": ".kibana",
+ "type": "doc",
"id": "index-pattern:logstash-*",
"index": ".kibana_1",
"source": {
@@ -297,4 +279,4 @@
"updated_at": "2019-07-17T17:54:26.378Z"
}
}
-}
\ No newline at end of file
+}
diff --git a/x-pack/test/reporting_api_integration/reporting_without_security.config.ts b/x-pack/test/reporting_api_integration/reporting_without_security.config.ts
index 11182bbcdb3b0..4a95a15169b59 100644
--- a/x-pack/test/reporting_api_integration/reporting_without_security.config.ts
+++ b/x-pack/test/reporting_api_integration/reporting_without_security.config.ts
@@ -32,7 +32,6 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) {
kbnTestServer: {
...apiConfig.get('kbnTestServer'),
serverArgs: [
- `--migrations.enableV2=false`,
`--elasticsearch.hosts=${formatUrl(esTestConfig.getUrlParts())}`,
`--logging.json=false`,
`--server.maxPayloadBytes=1679958`,