diff --git a/src/platform/plugins/shared/telemetry/moon.yml b/src/platform/plugins/shared/telemetry/moon.yml index ac8fbd1068ddd..f97ccedf2452e 100644 --- a/src/platform/plugins/shared/telemetry/moon.yml +++ b/src/platform/plugins/shared/telemetry/moon.yml @@ -46,6 +46,7 @@ dependsOn: - '@kbn/logging' - '@kbn/core-security-server' - '@kbn/telemetry-config' + - '@kbn/config' tags: - plugin - prod diff --git a/src/platform/plugins/shared/telemetry/server/config/config.test.ts b/src/platform/plugins/shared/telemetry/server/config/config.test.ts index f4cd5b71a806a..88fe37aa60d2f 100644 --- a/src/platform/plugins/shared/telemetry/server/config/config.test.ts +++ b/src/platform/plugins/shared/telemetry/server/config/config.test.ts @@ -7,8 +7,24 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { applyDeprecations, configDeprecationFactory } from '@kbn/config'; +import { configDeprecationsMock } from '@kbn/core/server/mocks'; import { config } from './config'; +const applyConfigDeprecations = (telemetrySettings: Record = {}) => { + const deprecationContext = configDeprecationsMock.createContext(); + const deprecations = config.deprecations!(configDeprecationFactory); + const { config: migrated } = applyDeprecations( + { telemetry: telemetrySettings }, + deprecations.map((deprecation) => ({ + deprecation, + path: 'telemetry', + context: deprecationContext, + })) + ); + return migrated as Record>; +}; + describe('config', () => { const baseContext = { dist: true, @@ -62,4 +78,51 @@ describe('config', () => { } ); }); + + describe('deprecations: telemetry.enabled', () => { + describe('when telemetry.enabled is set to a falsy value, the plugin stays enabled and telemetry is opted out', () => { + test.each([false, 'false', 'False', 'FALSE'])( + 'migrates telemetry.enabled: %p → removes enabled, sets optIn and allowChangingOptInStatus to false', + (enabledValue) => { + const migrated = applyConfigDeprecations({ enabled: enabledValue }); + + expect(migrated.telemetry.enabled).toBeUndefined(); + expect(migrated.telemetry.optIn).toBe(false); + expect(migrated.telemetry.allowChangingOptInStatus).toBe(false); + } + ); + + test.each([false, 'false', 'False', 'FALSE'])( + 'also disables tracing and metrics when telemetry.enabled: %p', + (enabledValue) => { + const migrated = applyConfigDeprecations({ enabled: enabledValue }); + + const telemetry = migrated.telemetry as Record>; + expect(telemetry.tracing?.enabled).toBe(false); + expect(telemetry.metrics?.enabled).toBe(false); + } + ); + }); + + describe('when telemetry.enabled is absent or truthy, the deprecation does not fire', () => { + test('does not modify config when telemetry.enabled is not set', () => { + const migrated = applyConfigDeprecations({}); + + expect(migrated.telemetry.enabled).toBeUndefined(); + expect(migrated.telemetry.optIn).toBeUndefined(); + expect(migrated.telemetry.allowChangingOptInStatus).toBeUndefined(); + }); + + test.each([true, 'true', 'True', 'TRUE'])( + 'does not modify config when telemetry.enabled: %p', + (enabledValue) => { + const migrated = applyConfigDeprecations({ enabled: enabledValue }); + + expect(migrated.telemetry.enabled).toBe(enabledValue); + expect(migrated.telemetry.optIn).toBeUndefined(); + expect(migrated.telemetry.allowChangingOptInStatus).toBeUndefined(); + } + ); + }); + }); }); diff --git a/src/platform/plugins/shared/telemetry/server/config/config.ts b/src/platform/plugins/shared/telemetry/server/config/config.ts index 9efbced17bf1e..17a41e682ba96 100644 --- a/src/platform/plugins/shared/telemetry/server/config/config.ts +++ b/src/platform/plugins/shared/telemetry/server/config/config.ts @@ -76,7 +76,11 @@ export const config: PluginConfigDescriptor = { }, deprecations: () => [ (cfg) => { - if (cfg.telemetry?.enabled === false) { + const raw = cfg.telemetry?.enabled; + const isDisabling = + raw === false || (typeof raw === 'string' && raw.toLowerCase() === 'false'); + + if (isDisabling) { return { set: [ { path: 'telemetry.optIn', value: false }, diff --git a/src/platform/plugins/shared/telemetry/tsconfig.json b/src/platform/plugins/shared/telemetry/tsconfig.json index 2d217a90632bb..994882f05c2f0 100644 --- a/src/platform/plugins/shared/telemetry/tsconfig.json +++ b/src/platform/plugins/shared/telemetry/tsconfig.json @@ -41,6 +41,7 @@ "@kbn/logging", "@kbn/core-security-server", "@kbn/telemetry-config", + "@kbn/config", ], "exclude": [ "target/**/*",