diff --git a/CHANGES.txt b/CHANGES.txt index cb625471..00388146 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,4 @@ -1.4.0 (May 23, 2022) +1.4.0 (May 24, 2022) - Added `scheduler.telemetryRefreshRate` property to SDK configuration, and deprecated `scheduler.metricsRefreshRate` property. - Updated SDK telemetry storage, metrics and updater to be more effective and send less often. - Bugfixing - Updated default values for `scheduler.impressionsRefreshRate` config parameter: 300s for OPTIMIZED impression mode and 60s for DEBUG impression mode. diff --git a/src/utils/lang/index.ts b/src/utils/lang/index.ts index bd7c7a51..0a828dda 100644 --- a/src/utils/lang/index.ts +++ b/src/utils/lang/index.ts @@ -71,7 +71,7 @@ export function forOwn(obj: { [key: string]: T }, iteratee: (value: T, key: s * Safely retrieve the specified prop from obj. If we can't retrieve * that property value, we return the default value. */ -export function get(obj: any, prop: any, val: any): any { +export function get(obj: any, prop: any, val?: any): any { let res = val; try { // No risks nor lots of checks. diff --git a/src/utils/settingsValidation/__tests__/index.spec.ts b/src/utils/settingsValidation/__tests__/index.spec.ts index 5191d546..e82d1d99 100644 --- a/src/utils/settingsValidation/__tests__/index.spec.ts +++ b/src/utils/settingsValidation/__tests__/index.spec.ts @@ -42,32 +42,36 @@ describe('settingsValidation', () => { expect(settings.sync.impressionsMode).toBe(OPTIMIZED); }); - test('override with defaults', () => { - const settings = settingsValidation({ - core: { - authorizationKey: 'dummy token' - }, - sync: { - impressionsMode: 'some', - } - }, minimalSettingsParams); + test('override with default impressionMode if provided one is invalid', () => { + const config = { + core: { authorizationKey: 'dummy token' }, + sync: { impressionsMode: 'some' } + }; + let settings = settingsValidation(config, minimalSettingsParams); expect(settings.sync.impressionsMode).toBe(OPTIMIZED); - expect(settings.scheduler.impressionsRefreshRate).toBe(300000); + expect(settings.scheduler.impressionsRefreshRate).toBe(300000); // Default + + settings = settingsValidation({ ...config, scheduler: { impressionsRefreshRate: 10 } }, minimalSettingsParams); + + expect(settings.sync.impressionsMode).toBe(OPTIMIZED); + expect(settings.scheduler.impressionsRefreshRate).toBe(10000); }); test('impressionsMode should be configurable', () => { - const settings = settingsValidation({ - core: { - authorizationKey: 'dummy token' - }, - sync: { - impressionsMode: DEBUG - } - }, minimalSettingsParams); + const config = { + core: { authorizationKey: 'dummy token' }, + sync: { impressionsMode: DEBUG } + }; + let settings = settingsValidation(config, minimalSettingsParams); expect(settings.sync.impressionsMode).toEqual(DEBUG); expect(settings.scheduler.impressionsRefreshRate).toBe(60000); // Different default for DEBUG impressionsMode + + settings = settingsValidation({ ...config, scheduler: { impressionsRefreshRate: 10 } }, minimalSettingsParams); + + expect(settings.sync.impressionsMode).toBe(DEBUG); + expect(settings.scheduler.impressionsRefreshRate).toBe(10000); }); test('urls should be configurable', () => { @@ -246,17 +250,18 @@ describe('settingsValidation', () => { expect(settings.core.trafficType).toEqual(true); // traffic type is ignored }); - test('validate min values', () => { - const settings = settingsValidation({ - scheduler: { - telemetryRefreshRate: 0, - impressionsRefreshRate: 'invalid', - } - }, minimalSettingsParams); - - expect(settings.scheduler.telemetryRefreshRate).toBe(60000); - expect(settings.scheduler.impressionsRefreshRate).toBe(60000); - }); + // Not implemented yet + // test('validate min values', () => { + // const settings = settingsValidation({ + // scheduler: { + // telemetryRefreshRate: 0, + // impressionsRefreshRate: 'invalid', + // } + // }, minimalSettingsParams); + + // expect(settings.scheduler.telemetryRefreshRate).toBe(60000); + // expect(settings.scheduler.impressionsRefreshRate).toBe(60000); + // }); }); diff --git a/src/utils/settingsValidation/index.ts b/src/utils/settingsValidation/index.ts index faf860b3..2269721f 100644 --- a/src/utils/settingsValidation/index.ts +++ b/src/utils/settingsValidation/index.ts @@ -1,4 +1,4 @@ -import { merge } from '../lang'; +import { merge, get } from '../lang'; import { mode } from './mode'; import { validateSplitFilters } from './splitFilters'; import { STANDALONE_MODE, OPTIMIZED, LOCALHOST_MODE, DEBUG } from '../constants'; @@ -131,15 +131,8 @@ export function settingsValidation(config: unknown, validationParams: ISettingsV scheduler.eventsPushRate = fromSecondsToMillis(scheduler.eventsPushRate); scheduler.telemetryRefreshRate = fromSecondsToMillis(validateMinValue('telemetryRefreshRate', scheduler.telemetryRefreshRate, 60)); - if (scheduler.impressionsRefreshRate !== base.scheduler.impressionsRefreshRate) { - // Validate impressionsRefreshRate defined by user - scheduler.impressionsRefreshRate = validateMinValue('impressionsRefreshRate', scheduler.impressionsRefreshRate, - withDefaults.sync.impressionsMode === DEBUG ? 1 : 60 // Min is 1 sec for DEBUG and 60 secs for OPTIMIZED - ); - } else { - // Default impressionsRefreshRate for DEBUG mode is 60 secs - if (withDefaults.sync.impressionsMode === DEBUG) scheduler.impressionsRefreshRate = 60; - } + // Default impressionsRefreshRate for DEBUG mode is 60 secs + if (get(config, 'scheduler.impressionsRefreshRate') === undefined && withDefaults.sync.impressionsMode === DEBUG) scheduler.impressionsRefreshRate = 60; scheduler.impressionsRefreshRate = fromSecondsToMillis(scheduler.impressionsRefreshRate); // Log deprecation for old telemetry param