diff --git a/src/utils/settingsValidation/__tests__/index.spec.ts b/src/utils/settingsValidation/__tests__/index.spec.ts index 45e357ce..f2c2431b 100644 --- a/src/utils/settingsValidation/__tests__/index.spec.ts +++ b/src/utils/settingsValidation/__tests__/index.spec.ts @@ -53,6 +53,7 @@ describe('settingsValidation', () => { }, minimalSettingsParams); expect(settings.sync.impressionsMode).toBe(OPTIMIZED); + expect(settings.scheduler.impressionsRefreshRate).toBe(300000); }); test('impressionsMode should be configurable', () => { @@ -66,6 +67,7 @@ describe('settingsValidation', () => { }, minimalSettingsParams); expect(settings.sync.impressionsMode).toEqual(DEBUG); + expect(settings.scheduler.impressionsRefreshRate).toBe(60000); // Different default for DEBUG impressionsMode }); test('urls should be configurable', () => { @@ -247,11 +249,13 @@ describe('settingsValidation', () => { test('validate min values', () => { const settings = settingsValidation({ scheduler: { - telemetryRefreshRate: 0 + 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 1d83e2b1..2eca446a 100644 --- a/src/utils/settingsValidation/index.ts +++ b/src/utils/settingsValidation/index.ts @@ -1,7 +1,7 @@ import { merge } from '../lang'; import { mode } from './mode'; import { validateSplitFilters } from './splitFilters'; -import { STANDALONE_MODE, OPTIMIZED, LOCALHOST_MODE } from '../constants'; +import { STANDALONE_MODE, OPTIMIZED, LOCALHOST_MODE, DEBUG } from '../constants'; import { validImpressionsMode } from './impressionsMode'; import { ISettingsValidationParams } from './types'; import { ISettings } from '../../types'; @@ -33,8 +33,8 @@ const base = { segmentsRefreshRate: 60, // publish telemetry stats each 3600 secs (1 hour) telemetryRefreshRate: 3600, - // publish evaluations each 60 sec - impressionsRefreshRate: 60, + // publish evaluations each 300 sec (default value for OPTIMIZED impressions mode) + impressionsRefreshRate: 300, // fetch offline changes each 15 sec offlineRefreshRate: 15, // publish events every 60 seconds after the first flush @@ -112,6 +112,9 @@ export function settingsValidation(config: unknown, validationParams: ISettingsV const log = logger(withDefaults); // @ts-ignore, modify readonly prop withDefaults.log = log; + // ensure a valid impressionsMode + withDefaults.sync.impressionsMode = validImpressionsMode(log, withDefaults.sync.impressionsMode); + function validateMinValue(paramName: string, actualValue: number, minValue: number) { if (actualValue >= minValue) return actualValue; // actualValue is not a number or is lower than minValue @@ -123,11 +126,21 @@ export function settingsValidation(config: unknown, validationParams: ISettingsV const { scheduler, startup } = withDefaults; scheduler.featuresRefreshRate = fromSecondsToMillis(scheduler.featuresRefreshRate); scheduler.segmentsRefreshRate = fromSecondsToMillis(scheduler.segmentsRefreshRate); - scheduler.impressionsRefreshRate = fromSecondsToMillis(scheduler.impressionsRefreshRate); scheduler.offlineRefreshRate = fromSecondsToMillis(scheduler.offlineRefreshRate); 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; + } + scheduler.impressionsRefreshRate = fromSecondsToMillis(scheduler.impressionsRefreshRate); + // Log deprecation for old telemetry param if (scheduler.metricsRefreshRate) log.warn('`metricsRefreshRate` will be deprecated soon. For configuring telemetry rates, update `telemetryRefreshRate` value in configs'); @@ -189,9 +202,6 @@ export function settingsValidation(config: unknown, validationParams: ISettingsV withDefaults.sync.splitFilters = splitFiltersValidation.validFilters; withDefaults.sync.__splitFiltersValidation = splitFiltersValidation; - // ensure a valid impressionsMode - withDefaults.sync.impressionsMode = validImpressionsMode(log, withDefaults.sync.impressionsMode); - // ensure a valid user consent value // @ts-ignore, modify readonly prop withDefaults.userConsent = consent(withDefaults);