diff --git a/docs/development/core/server/kibana-plugin-server.md b/docs/development/core/server/kibana-plugin-server.md index 5716f168107921..3a0001f8685b7a 100644 --- a/docs/development/core/server/kibana-plugin-server.md +++ b/docs/development/core/server/kibana-plugin-server.md @@ -61,6 +61,7 @@ The plugin integrates with the core system via lifecycle events: `setup` | [SavedObjectsCreateOptions](./kibana-plugin-server.savedobjectscreateoptions.md) | | | [SavedObjectsFindOptions](./kibana-plugin-server.savedobjectsfindoptions.md) | | | [SavedObjectsFindResponse](./kibana-plugin-server.savedobjectsfindresponse.md) | | +| [SavedObjectsMigrationLogger](./kibana-plugin-server.savedobjectsmigrationlogger.md) | | | [SavedObjectsMigrationVersion](./kibana-plugin-server.savedobjectsmigrationversion.md) | Information about the migrations that have been applied to this SavedObject. When Kibana starts up, KibanaMigrator detects outdated documents and migrates them based on this value. For each migration that has been applied, the plugin's name is used as a key and the latest migration version as the value. | | [SavedObjectsRawDoc](./kibana-plugin-server.savedobjectsrawdoc.md) | A raw document as represented directly in the saved object index. | | [SavedObjectsService](./kibana-plugin-server.savedobjectsservice.md) | | diff --git a/docs/development/core/server/kibana-plugin-server.savedobjectsmigrationlogger.debug.md b/docs/development/core/server/kibana-plugin-server.savedobjectsmigrationlogger.debug.md new file mode 100644 index 00000000000000..be44bc7422d6ce --- /dev/null +++ b/docs/development/core/server/kibana-plugin-server.savedobjectsmigrationlogger.debug.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-server](./kibana-plugin-server.md) > [SavedObjectsMigrationLogger](./kibana-plugin-server.savedobjectsmigrationlogger.md) > [debug](./kibana-plugin-server.savedobjectsmigrationlogger.debug.md) + +## SavedObjectsMigrationLogger.debug property + +Signature: + +```typescript +debug: (msg: string) => void; +``` diff --git a/docs/development/core/server/kibana-plugin-server.savedobjectsmigrationlogger.info.md b/docs/development/core/server/kibana-plugin-server.savedobjectsmigrationlogger.info.md new file mode 100644 index 00000000000000..f8bbd5e4e6250a --- /dev/null +++ b/docs/development/core/server/kibana-plugin-server.savedobjectsmigrationlogger.info.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-server](./kibana-plugin-server.md) > [SavedObjectsMigrationLogger](./kibana-plugin-server.savedobjectsmigrationlogger.md) > [info](./kibana-plugin-server.savedobjectsmigrationlogger.info.md) + +## SavedObjectsMigrationLogger.info property + +Signature: + +```typescript +info: (msg: string) => void; +``` diff --git a/docs/development/core/server/kibana-plugin-server.savedobjectsmigrationlogger.md b/docs/development/core/server/kibana-plugin-server.savedobjectsmigrationlogger.md new file mode 100644 index 00000000000000..9e21cb0641bafc --- /dev/null +++ b/docs/development/core/server/kibana-plugin-server.savedobjectsmigrationlogger.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-server](./kibana-plugin-server.md) > [SavedObjectsMigrationLogger](./kibana-plugin-server.savedobjectsmigrationlogger.md) + +## SavedObjectsMigrationLogger interface + + +Signature: + +```typescript +export interface SavedObjectsMigrationLogger +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [debug](./kibana-plugin-server.savedobjectsmigrationlogger.debug.md) | (msg: string) => void | | +| [info](./kibana-plugin-server.savedobjectsmigrationlogger.info.md) | (msg: string) => void | | +| [warning](./kibana-plugin-server.savedobjectsmigrationlogger.warning.md) | (msg: string) => void | | + diff --git a/docs/development/core/server/kibana-plugin-server.savedobjectsmigrationlogger.warning.md b/docs/development/core/server/kibana-plugin-server.savedobjectsmigrationlogger.warning.md new file mode 100644 index 00000000000000..978090f9fc8855 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-server.savedobjectsmigrationlogger.warning.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-server](./kibana-plugin-server.md) > [SavedObjectsMigrationLogger](./kibana-plugin-server.savedobjectsmigrationlogger.md) > [warning](./kibana-plugin-server.savedobjectsmigrationlogger.warning.md) + +## SavedObjectsMigrationLogger.warning property + +Signature: + +```typescript +warning: (msg: string) => void; +``` diff --git a/src/core/server/index.ts b/src/core/server/index.ts index 2959208f9cbd36..6b5ea6ea9079c4 100644 --- a/src/core/server/index.ts +++ b/src/core/server/index.ts @@ -91,11 +91,12 @@ export { SavedObjectsBulkGetObject, SavedObjectsBulkResponse, SavedObjectsClient, - SavedObjectsCreateOptions, SavedObjectsClientWrapperFactory, SavedObjectsClientWrapperOptions, + SavedObjectsCreateOptions, SavedObjectsErrorHelpers, SavedObjectsFindResponse, + SavedObjectsMigrationLogger, SavedObjectsRawDoc, SavedObjectsSchema, SavedObjectsSerializer, diff --git a/src/core/server/saved_objects/index.ts b/src/core/server/saved_objects/index.ts index 623c722eb95b1b..8921f537ac331b 100644 --- a/src/core/server/saved_objects/index.ts +++ b/src/core/server/saved_objects/index.ts @@ -24,3 +24,5 @@ export { SavedObjectsSchema } from './schema'; export { SavedObjectsManagement } from './management'; export { SavedObjectsSerializer, RawDoc as SavedObjectsRawDoc } from './serialization'; + +export { SavedObjectsMigrationLogger } from './migrations/core/migration_logger'; diff --git a/src/core/server/saved_objects/migrations/core/document_migrator.ts b/src/core/server/saved_objects/migrations/core/document_migrator.ts index e7092b59524d09..0576f1d22199fa 100644 --- a/src/core/server/saved_objects/migrations/core/document_migrator.ts +++ b/src/core/server/saved_objects/migrations/core/document_migrator.ts @@ -66,9 +66,12 @@ import cloneDeep from 'lodash.clonedeep'; import Semver from 'semver'; import { RawSavedObjectDoc } from '../../serialization'; import { SavedObjectsMigrationVersion } from '../../types'; -import { LogFn, Logger, MigrationLogger } from './migration_logger'; +import { LogFn, SavedObjectsMigrationLogger, MigrationLogger } from './migration_logger'; -export type TransformFn = (doc: RawSavedObjectDoc, log?: Logger) => RawSavedObjectDoc; +export type TransformFn = ( + doc: RawSavedObjectDoc, + log?: SavedObjectsMigrationLogger +) => RawSavedObjectDoc; type ValidateDoc = (doc: RawSavedObjectDoc) => void; @@ -204,7 +207,10 @@ function validateMigrationDefinition(migrations: MigrationDefinition) { * From: { type: { version: fn } } * To: { type: { latestVersion: string, transforms: [{ version: string, transform: fn }] } } */ -function buildActiveMigrations(migrations: MigrationDefinition, log: Logger): ActiveMigrations { +function buildActiveMigrations( + migrations: MigrationDefinition, + log: SavedObjectsMigrationLogger +): ActiveMigrations { return _.mapValues(migrations, (versions, prop) => { const transforms = Object.entries(versions) .map(([version, transform]) => ({ @@ -293,7 +299,12 @@ function markAsUpToDate(doc: RawSavedObjectDoc, migrations: ActiveMigrations) { * If a specific transform function fails, this tacks on a bit of information * about the document and transform that caused the failure. */ -function wrapWithTry(version: string, prop: string, transform: TransformFn, log: Logger) { +function wrapWithTry( + version: string, + prop: string, + transform: TransformFn, + log: SavedObjectsMigrationLogger +) { return function tryTransformDoc(doc: RawSavedObjectDoc) { try { const result = transform(doc, log); diff --git a/src/core/server/saved_objects/migrations/core/migration_context.ts b/src/core/server/saved_objects/migrations/core/migration_context.ts index a151a8d37a524c..633bccf8aceecb 100644 --- a/src/core/server/saved_objects/migrations/core/migration_context.ts +++ b/src/core/server/saved_objects/migrations/core/migration_context.ts @@ -30,7 +30,7 @@ import { buildActiveMappings } from './build_active_mappings'; import { CallCluster } from './call_cluster'; import { VersionedTransformer } from './document_migrator'; import { fetchInfo, FullIndexInfo } from './elastic_index'; -import { LogFn, Logger, MigrationLogger } from './migration_logger'; +import { LogFn, SavedObjectsMigrationLogger, MigrationLogger } from './migration_logger'; export interface MigrationOpts { batchSize: number; @@ -57,7 +57,7 @@ export interface Context { source: FullIndexInfo; dest: FullIndexInfo; documentMigrator: VersionedTransformer; - log: Logger; + log: SavedObjectsMigrationLogger; batchSize: number; pollInterval: number; scrollDuration: string; diff --git a/src/core/server/saved_objects/migrations/core/migration_coordinator.ts b/src/core/server/saved_objects/migrations/core/migration_coordinator.ts index c424b88335a98c..ddd82edd934484 100644 --- a/src/core/server/saved_objects/migrations/core/migration_coordinator.ts +++ b/src/core/server/saved_objects/migrations/core/migration_coordinator.ts @@ -35,7 +35,7 @@ */ import _ from 'lodash'; -import { Logger } from './migration_logger'; +import { SavedObjectsMigrationLogger } from './migration_logger'; const DEFAULT_POLL_INTERVAL = 15000; @@ -52,7 +52,7 @@ export type MigrationResult = interface Opts { runMigration: () => Promise; isMigrated: () => Promise; - log: Logger; + log: SavedObjectsMigrationLogger; pollInterval?: number; } @@ -86,7 +86,7 @@ export async function coordinateMigration(opts: Opts): Promise * and is the cue for us to fall into a polling loop, waiting for some * other Kibana instance to complete the migration. */ -function handleIndexExists(error: any, log: Logger) { +function handleIndexExists(error: any, log: SavedObjectsMigrationLogger) { const isIndexExistsError = _.get(error, 'body.error.type') === 'resource_already_exists_exception'; if (!isIndexExistsError) { diff --git a/src/core/server/saved_objects/migrations/core/migration_logger.ts b/src/core/server/saved_objects/migrations/core/migration_logger.ts index 8b9e3f0a21ac38..9c98b7d85a8d82 100644 --- a/src/core/server/saved_objects/migrations/core/migration_logger.ts +++ b/src/core/server/saved_objects/migrations/core/migration_logger.ts @@ -24,13 +24,14 @@ export type LogFn = (path: string[], message: string) => void; -export interface Logger { +/** @public */ +export interface SavedObjectsMigrationLogger { debug: (msg: string) => void; info: (msg: string) => void; warning: (msg: string) => void; } -export class MigrationLogger implements Logger { +export class MigrationLogger implements SavedObjectsMigrationLogger { private log: LogFn; constructor(log: LogFn) { diff --git a/src/core/server/server.api.md b/src/core/server/server.api.md index 60e61a43121d6c..a056aa86296ed2 100644 --- a/src/core/server/server.api.md +++ b/src/core/server/server.api.md @@ -620,6 +620,16 @@ export interface SavedObjectsFindResponse total: number; } +// @public (undocumented) +export interface SavedObjectsMigrationLogger { + // (undocumented) + debug: (msg: string) => void; + // (undocumented) + info: (msg: string) => void; + // (undocumented) + warning: (msg: string) => void; +} + // @public export interface SavedObjectsMigrationVersion { // (undocumented) diff --git a/src/legacy/core_plugins/kibana/public/dashboard/migrations/migrations_730.ts b/src/legacy/core_plugins/kibana/public/dashboard/migrations/migrations_730.ts index a497a7ff44bd5e..451920d892f163 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/migrations/migrations_730.ts +++ b/src/legacy/core_plugins/kibana/public/dashboard/migrations/migrations_730.ts @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -import { Logger } from 'src/core/server/saved_objects/migrations/core/migration_logger'; +import { SavedObjectsMigrationLogger } from 'src/core/server'; import { DashboardDoc730ToLatest, DashboardDoc700To720 } from './types'; import { isDashboardDoc } from './is_dashboard_doc'; import { moveFiltersToQuery } from './move_filters_to_query'; @@ -28,7 +28,7 @@ export function migrations730( [key: string]: unknown; } | DashboardDoc700To720, - logger: Logger + logger: SavedObjectsMigrationLogger ): DashboardDoc730ToLatest | { [key: string]: unknown } { if (!isDashboardDoc(doc)) { // NOTE: we should probably throw an error here... but for now following suit and in the