1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-01-31 00:16:47 +01:00

feat: add support for turning telemetry off with environment variable (#3987)

<!-- Thanks for creating a PR! To make it easier for reviewers and
everyone else to understand what your changes relate to, please add some
relevant content to the headings below. Feel free to ignore or delete
sections that you don't think are relevant. Thank you! ❤️ -->

## About the changes
<!-- Describe the changes introduced. What are they and why are they
being introduced? Feel free to also add screenshots or steps to view the
changes if they're visual. -->

Adds an environment variable for switching off feature telemetry in
version check
This commit is contained in:
David Leek 2023-06-15 15:11:58 +02:00 committed by GitHub
parent 58607f7f48
commit 4cc1505308
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 27 additions and 2 deletions

View File

@ -185,6 +185,7 @@ exports[`should create default config 1`] = `
"ttlHours": 48, "ttlHours": 48,
}, },
"strategySegmentsLimit": 5, "strategySegmentsLimit": 5,
"telemetry": true,
"ui": { "ui": {
"environment": "Open Source", "environment": "Open Source",
}, },

View File

@ -397,6 +397,9 @@ export function createConfig(options: IUnleashOptions): IUnleashConfig {
options.versionCheck || {}, options.versionCheck || {},
]); ]);
const telemetry: boolean =
options.telemetry ||
parseEnvVarBoolean(process.env.SEND_TELEMETRY, true);
const initApiTokens = loadInitApiTokens(); const initApiTokens = loadInitApiTokens();
const authentication: IAuthOption = mergeAll([ const authentication: IAuthOption = mergeAll([
@ -475,6 +478,7 @@ export function createConfig(options: IUnleashOptions): IUnleashConfig {
server, server,
listen, listen,
versionCheck, versionCheck,
telemetry,
authentication, authentication,
ui, ui,
import: importSetting, import: importSetting,

View File

@ -50,6 +50,7 @@ test('yields current versions', async () => {
getLogger, getLogger,
versionCheck: { url, enable: true }, versionCheck: { url, enable: true },
flagResolver: getTestFlagResolver(true), flagResolver: getTestFlagResolver(true),
telemetry: true,
}); });
await service.checkLatestVersion(); await service.checkLatestVersion();
const versionInfo = service.getVersionInfo(); const versionInfo = service.getVersionInfo();
@ -84,6 +85,7 @@ test('supports setting enterprise version as well', async () => {
versionCheck: { url, enable: true }, versionCheck: { url, enable: true },
enterpriseVersion, enterpriseVersion,
flagResolver: getTestFlagResolver(true), flagResolver: getTestFlagResolver(true),
telemetry: true,
}); });
await service.checkLatestVersion(); await service.checkLatestVersion();
const versionInfo = service.getVersionInfo(); const versionInfo = service.getVersionInfo();
@ -118,6 +120,7 @@ test('if version check is not enabled should not make any calls', async () => {
versionCheck: { url, enable: false }, versionCheck: { url, enable: false },
enterpriseVersion, enterpriseVersion,
flagResolver: getTestFlagResolver(true), flagResolver: getTestFlagResolver(true),
telemetry: true,
}); });
await service.checkLatestVersion(); await service.checkLatestVersion();
const versionInfo = service.getVersionInfo(); const versionInfo = service.getVersionInfo();
@ -160,6 +163,7 @@ test('sets featureinfo', async () => {
versionCheck: { url, enable: true }, versionCheck: { url, enable: true },
enterpriseVersion, enterpriseVersion,
flagResolver: getTestFlagResolver(true), flagResolver: getTestFlagResolver(true),
telemetry: true,
}); });
await service.checkLatestVersion(); await service.checkLatestVersion();
expect(scope.isDone()).toEqual(true); expect(scope.isDone()).toEqual(true);
@ -208,6 +212,7 @@ test('counts toggles', async () => {
versionCheck: { url, enable: true }, versionCheck: { url, enable: true },
enterpriseVersion, enterpriseVersion,
flagResolver: getTestFlagResolver(true), flagResolver: getTestFlagResolver(true),
telemetry: true,
}); });
await service.checkLatestVersion(); await service.checkLatestVersion();
expect(scope.isDone()).toEqual(true); expect(scope.isDone()).toEqual(true);
@ -247,6 +252,7 @@ test('doesnt report featureinfo when flag off', async () => {
versionCheck: { url, enable: true }, versionCheck: { url, enable: true },
enterpriseVersion, enterpriseVersion,
flagResolver: getTestFlagResolver(false), flagResolver: getTestFlagResolver(false),
telemetry: true,
}); });
await service.checkLatestVersion(); await service.checkLatestVersion();
expect(scope.isDone()).toEqual(true); expect(scope.isDone()).toEqual(true);
@ -309,6 +315,7 @@ test('counts custom strategies', async () => {
versionCheck: { url, enable: true }, versionCheck: { url, enable: true },
enterpriseVersion, enterpriseVersion,
flagResolver: getTestFlagResolver(true), flagResolver: getTestFlagResolver(true),
telemetry: true,
}); });
await service.checkLatestVersion(); await service.checkLatestVersion();
expect(scope.isDone()).toEqual(true); expect(scope.isDone()).toEqual(true);

View File

@ -92,6 +92,8 @@ export default class VersionService {
private enabled: boolean; private enabled: boolean;
private telemetryEnabled: boolean;
private versionCheckUrl: string; private versionCheckUrl: string;
private instanceId?: string; private instanceId?: string;
@ -136,9 +138,14 @@ export default class VersionService {
versionCheck, versionCheck,
enterpriseVersion, enterpriseVersion,
flagResolver, flagResolver,
telemetry,
}: Pick< }: Pick<
IUnleashConfig, IUnleashConfig,
'getLogger' | 'versionCheck' | 'enterpriseVersion' | 'flagResolver' | 'getLogger'
| 'versionCheck'
| 'enterpriseVersion'
| 'flagResolver'
| 'telemetry'
>, >,
) { ) {
this.logger = getLogger('lib/services/version-service.js'); this.logger = getLogger('lib/services/version-service.js');
@ -159,6 +166,7 @@ export default class VersionService {
enterprise: enterpriseVersion || '', enterprise: enterpriseVersion || '',
}; };
this.enabled = versionCheck.enable; this.enabled = versionCheck.enable;
this.telemetryEnabled = telemetry;
this.versionCheckUrl = versionCheck.url; this.versionCheckUrl = versionCheck.url;
this.isLatest = true; this.isLatest = true;
this.flagResolver = flagResolver; this.flagResolver = flagResolver;
@ -193,7 +201,10 @@ export default class VersionService {
}; };
if ( if (
this.flagResolver.isEnabled('experimentalExtendedTelemetry') this.flagResolver.isEnabled(
'experimentalExtendedTelemetry',
) &&
this.telemetryEnabled
) { ) {
const featureInfo = await this.getFeatureUsageInfo(); const featureInfo = await this.getFeatureUsageInfo();
versionPayload.featureInfo = featureInfo; versionPayload.featureInfo = featureInfo;

View File

@ -98,6 +98,7 @@ export interface IUnleashOptions {
logLevel?: LogLevel; logLevel?: LogLevel;
server?: Partial<IServerOption>; server?: Partial<IServerOption>;
versionCheck?: Partial<IVersionOption>; versionCheck?: Partial<IVersionOption>;
telemetry?: boolean;
authentication?: Partial<IAuthOption>; authentication?: Partial<IAuthOption>;
ui?: object; ui?: object;
frontendApi?: IFrontendApi; frontendApi?: IFrontendApi;
@ -182,6 +183,7 @@ export interface IUnleashConfig {
server: IServerOption; server: IServerOption;
listen: IListeningHost | IListeningPipe; listen: IListeningHost | IListeningPipe;
versionCheck: IVersionOption; versionCheck: IVersionOption;
telemetry: boolean;
authentication: IAuthOption; authentication: IAuthOption;
ui: IUIConfig; ui: IUIConfig;
import: IImportOption; import: IImportOption;