From b246cef65328f7b30bb8cf88e7001e2c1bed76cb Mon Sep 17 00:00:00 2001 From: adcoelho Date: Tue, 10 Jun 2025 16:00:03 +0200 Subject: [PATCH 1/4] Add analyticsIndex feature flag. --- .../test_suites/core_plugins/rendering.ts | 1 + .../plugins/shared/cases/server/config.ts | 3 +++ .../plugins/shared/cases/server/plugin.ts | 17 +++++++++-------- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/platform/test/plugin_functional/test_suites/core_plugins/rendering.ts b/src/platform/test/plugin_functional/test_suites/core_plugins/rendering.ts index 7b156d8345fa4..2f5f4329835f5 100644 --- a/src/platform/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/src/platform/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -224,6 +224,7 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'xpack.cases.files.maxSize (number?)', 'xpack.cases.markdownPlugins.lens (boolean?)', 'xpack.cases.stack.enabled (boolean?)', + 'xpack.cases.analyticsIndex.enabled (boolean?)', 'xpack.ccr.ui.enabled (boolean?)', 'xpack.cloud.base_url (string?)', 'xpack.cloud.cname (string?)', diff --git a/x-pack/platform/plugins/shared/cases/server/config.ts b/x-pack/platform/plugins/shared/cases/server/config.ts index 7e30671ee4734..19b15fc5e5e33 100644 --- a/x-pack/platform/plugins/shared/cases/server/config.ts +++ b/x-pack/platform/plugins/shared/cases/server/config.ts @@ -23,6 +23,9 @@ export const ConfigSchema = schema.object({ stack: schema.object({ enabled: schema.boolean({ defaultValue: true }), }), + analyticsIndex: schema.object({ + enabled: schema.boolean({ defaultValue: false }), + }), }); export type ConfigType = TypeOf; diff --git a/x-pack/platform/plugins/shared/cases/server/plugin.ts b/x-pack/platform/plugins/shared/cases/server/plugin.ts index 8f0b87bea8f61..8c5d51ff6854a 100644 --- a/x-pack/platform/plugins/shared/cases/server/plugin.ts +++ b/x-pack/platform/plugins/shared/cases/server/plugin.ts @@ -203,16 +203,17 @@ export class CasePlugin if (plugins.taskManager) { scheduleCasesTelemetryTask(plugins.taskManager, this.logger); - scheduleCasesAnalyticsSyncTasks({ taskManager: plugins.taskManager, logger: this.logger }); + if (this.caseConfig.analyticsIndex.enabled) { + scheduleCasesAnalyticsSyncTasks({ taskManager: plugins.taskManager, logger: this.logger }); + createCasesAnalyticsIndexes({ + esClient: core.elasticsearch.client.asInternalUser, + logger: this.logger, + isServerless: this.isServerless, + taskManager: plugins.taskManager, + }).catch(() => {}); // it shouldn't reject, but just in case + } } - createCasesAnalyticsIndexes({ - esClient: core.elasticsearch.client.asInternalUser, - logger: this.logger, - isServerless: this.isServerless, - taskManager: plugins.taskManager, - }).catch(() => {}); // it shouldn't reject, but just in case - this.userProfileService.initialize({ spaces: plugins.spaces, // securityPluginSetup will be set to a defined value in the setup() function From ec49a5ce1961ec009a25a9dd53cc651480bd074d Mon Sep 17 00:00:00 2001 From: adcoelho Date: Fri, 13 Jun 2025 16:49:51 +0200 Subject: [PATCH 2/4] Renaming --- .../plugin_functional/test_suites/core_plugins/rendering.ts | 2 +- x-pack/platform/plugins/shared/cases/server/config.ts | 6 ++++-- x-pack/platform/plugins/shared/cases/server/plugin.ts | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/platform/test/plugin_functional/test_suites/core_plugins/rendering.ts b/src/platform/test/plugin_functional/test_suites/core_plugins/rendering.ts index 2f5f4329835f5..b9ded7d35bfc7 100644 --- a/src/platform/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/src/platform/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -224,7 +224,7 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'xpack.cases.files.maxSize (number?)', 'xpack.cases.markdownPlugins.lens (boolean?)', 'xpack.cases.stack.enabled (boolean?)', - 'xpack.cases.analyticsIndex.enabled (boolean?)', + 'xpack.cases.analytics.index.enabled (boolean?)', 'xpack.ccr.ui.enabled (boolean?)', 'xpack.cloud.base_url (string?)', 'xpack.cloud.cname (string?)', diff --git a/x-pack/platform/plugins/shared/cases/server/config.ts b/x-pack/platform/plugins/shared/cases/server/config.ts index 19b15fc5e5e33..6a8f949d18b24 100644 --- a/x-pack/platform/plugins/shared/cases/server/config.ts +++ b/x-pack/platform/plugins/shared/cases/server/config.ts @@ -23,8 +23,10 @@ export const ConfigSchema = schema.object({ stack: schema.object({ enabled: schema.boolean({ defaultValue: true }), }), - analyticsIndex: schema.object({ - enabled: schema.boolean({ defaultValue: false }), + analytics: schema.object({ + index: schema.object({ + enabled: schema.boolean({ defaultValue: false }), + }), }), }); diff --git a/x-pack/platform/plugins/shared/cases/server/plugin.ts b/x-pack/platform/plugins/shared/cases/server/plugin.ts index 8c5d51ff6854a..c6f39f4c070fb 100644 --- a/x-pack/platform/plugins/shared/cases/server/plugin.ts +++ b/x-pack/platform/plugins/shared/cases/server/plugin.ts @@ -203,7 +203,7 @@ export class CasePlugin if (plugins.taskManager) { scheduleCasesTelemetryTask(plugins.taskManager, this.logger); - if (this.caseConfig.analyticsIndex.enabled) { + if (this.caseConfig.analytics.index.enabled) { scheduleCasesAnalyticsSyncTasks({ taskManager: plugins.taskManager, logger: this.logger }); createCasesAnalyticsIndexes({ esClient: core.elasticsearch.client.asInternalUser, From 0543d4bb060f54a686653bf6429605928acd35e9 Mon Sep 17 00:00:00 2001 From: adcoelho Date: Mon, 16 Jun 2025 11:09:50 +0200 Subject: [PATCH 3/4] Updated type. --- x-pack/platform/plugins/shared/cases/server/config.ts | 8 +++++--- .../platform/plugins/shared/cases/server/plugin.test.ts | 1 + x-pack/platform/plugins/shared/cases/server/plugin.ts | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/x-pack/platform/plugins/shared/cases/server/config.ts b/x-pack/platform/plugins/shared/cases/server/config.ts index 6a8f949d18b24..d0f62ba8824a5 100644 --- a/x-pack/platform/plugins/shared/cases/server/config.ts +++ b/x-pack/platform/plugins/shared/cases/server/config.ts @@ -24,9 +24,11 @@ export const ConfigSchema = schema.object({ enabled: schema.boolean({ defaultValue: true }), }), analytics: schema.object({ - index: schema.object({ - enabled: schema.boolean({ defaultValue: false }), - }), + index: schema.maybe( + schema.object({ + enabled: schema.boolean({ defaultValue: false }), + }) + ), }), }); diff --git a/x-pack/platform/plugins/shared/cases/server/plugin.test.ts b/x-pack/platform/plugins/shared/cases/server/plugin.test.ts index 3fdcf7a8770cf..2ec89e323ab07 100644 --- a/x-pack/platform/plugins/shared/cases/server/plugin.test.ts +++ b/x-pack/platform/plugins/shared/cases/server/plugin.test.ts @@ -28,6 +28,7 @@ function getConfig(overrides = {}) { markdownPlugins: { lens: true }, files: { maxSize: 1, allowedMimeTypes: ALLOWED_MIME_TYPES }, stack: { enabled: true }, + analytics: {}, ...overrides, }; } diff --git a/x-pack/platform/plugins/shared/cases/server/plugin.ts b/x-pack/platform/plugins/shared/cases/server/plugin.ts index c6f39f4c070fb..f642b77b47390 100644 --- a/x-pack/platform/plugins/shared/cases/server/plugin.ts +++ b/x-pack/platform/plugins/shared/cases/server/plugin.ts @@ -203,7 +203,7 @@ export class CasePlugin if (plugins.taskManager) { scheduleCasesTelemetryTask(plugins.taskManager, this.logger); - if (this.caseConfig.analytics.index.enabled) { + if (this.caseConfig.analytics.index?.enabled) { scheduleCasesAnalyticsSyncTasks({ taskManager: plugins.taskManager, logger: this.logger }); createCasesAnalyticsIndexes({ esClient: core.elasticsearch.client.asInternalUser, From 3eb3f06dc447ab477ef4dc28d36551ad6ffdc792 Mon Sep 17 00:00:00 2001 From: adcoelho Date: Mon, 16 Jun 2025 14:18:22 +0200 Subject: [PATCH 4/4] Fixed tests. --- .../test_suites/core_plugins/rendering.ts | 1 - .../synchronization_task_runner.test.ts | 27 ------------------- .../shared/cases/server/config.test.ts | 1 + 3 files changed, 1 insertion(+), 28 deletions(-) diff --git a/src/platform/test/plugin_functional/test_suites/core_plugins/rendering.ts b/src/platform/test/plugin_functional/test_suites/core_plugins/rendering.ts index b9ded7d35bfc7..7b156d8345fa4 100644 --- a/src/platform/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/src/platform/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -224,7 +224,6 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'xpack.cases.files.maxSize (number?)', 'xpack.cases.markdownPlugins.lens (boolean?)', 'xpack.cases.stack.enabled (boolean?)', - 'xpack.cases.analytics.index.enabled (boolean?)', 'xpack.ccr.ui.enabled (boolean?)', 'xpack.cloud.base_url (string?)', 'xpack.cloud.cname (string?)', diff --git a/x-pack/platform/plugins/shared/cases/server/cases_analytics/tasks/synchronization_task/synchronization_task_runner.test.ts b/x-pack/platform/plugins/shared/cases/server/cases_analytics/tasks/synchronization_task/synchronization_task_runner.test.ts index cf45525535120..d9ac1f0f4146c 100644 --- a/x-pack/platform/plugins/shared/cases/server/cases_analytics/tasks/synchronization_task/synchronization_task_runner.test.ts +++ b/x-pack/platform/plugins/shared/cases/server/cases_analytics/tasks/synchronization_task/synchronization_task_runner.test.ts @@ -338,33 +338,6 @@ describe('SynchronizationTaskRunner', () => { }); describe('Error handling', () => { - it('An error is thrown for invalid task state', async () => { - const getESClient = async () => esClient; - - taskRunner = new SynchronizationTaskRunner({ - logger, - getESClient, - taskInstance: { - ...taskInstance, - state: { - // A missing esReindexTaskId should have missing sync times - lastSyncAttempt: 'some-time', - }, - }, - }); - - try { - await taskRunner.run(); - } catch (e) { - expect(isRetryableError(e)).toBe(null); - } - - expect(logger.error).toBeCalledWith( - '[.internal.cases] Synchronization reindex failed. Error: Invalid task state.', - { tags: ['cai-synchronization', 'cai-synchronization-error', '.internal.cases'] } - ); - }); - it('calls throwRetryableError if the esClient throws a retryable error', async () => { esClient.tasks.get.mockRejectedValueOnce(new esErrors.ConnectionError('My retryable error')); diff --git a/x-pack/platform/plugins/shared/cases/server/config.test.ts b/x-pack/platform/plugins/shared/cases/server/config.test.ts index 352faac983f29..9e652cb52ffe1 100644 --- a/x-pack/platform/plugins/shared/cases/server/config.test.ts +++ b/x-pack/platform/plugins/shared/cases/server/config.test.ts @@ -12,6 +12,7 @@ describe('config validation', () => { it('sets the defaults correctly', () => { expect(ConfigSchema.validate({})).toMatchInlineSnapshot(` Object { + "analytics": Object {}, "files": Object { "allowedMimeTypes": Array [ "image/aces",