Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion src/utils/settingsValidation/__tests__/index.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ describe('settingsValidation', () => {
}, minimalSettingsParams);

expect(settings.sync.impressionsMode).toBe(OPTIMIZED);
expect(settings.scheduler.impressionsRefreshRate).toBe(300000);
});

test('impressionsMode should be configurable', () => {
Expand All @@ -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', () => {
Expand Down Expand Up @@ -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);
});

});
Expand Down
24 changes: 17 additions & 7 deletions src/utils/settingsValidation/index.ts
Original file line number Diff line number Diff line change
@@ -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';
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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');

Expand Down Expand Up @@ -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);
Expand Down