Skip to content

Commit 93f2720

Browse files
Merge branch 'master' into aleap/switch_odp_event_rest_endpoint
2 parents 5d62216 + 70bdda4 commit 93f2720

File tree

4 files changed

+87
-17
lines changed

4 files changed

+87
-17
lines changed

packages/optimizely-sdk/lib/core/odp/odp_event_manager.ts

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -142,19 +142,28 @@ export class OdpEventManager implements IOdpEventManager {
142142
this.clientEngine = clientEngine;
143143
this.clientVersion = clientVersion;
144144

145-
let defaultQueueSize = DEFAULT_BROWSER_QUEUE_SIZE;
146-
// browser only accepts batchSize = 1
147-
this.batchSize = 1
145+
const isBrowser = browserMode();
148146

149-
if (!browserMode()) {
150-
defaultQueueSize = DEFAULT_SERVER_QUEUE_SIZE;
151-
this.batchSize = batchSize || DEFAULT_BATCH_SIZE;
152-
} else if (typeof batchSize !== 'undefined' && batchSize !== 1) {
153-
this.logger.log(LogLevel.WARNING, 'ODP event batch size must be 1 in the browser.');
147+
const defaultQueueSize = isBrowser ? DEFAULT_BROWSER_QUEUE_SIZE : DEFAULT_SERVER_QUEUE_SIZE;
148+
this.queueSize = queueSize || defaultQueueSize;
149+
this.batchSize = batchSize || DEFAULT_BATCH_SIZE;
150+
151+
if (flushInterval === 0 || isBrowser) {
152+
// disable event batching
153+
this.batchSize = 1;
154+
this.flushInterval = 0;
155+
} else {
156+
this.flushInterval = flushInterval || DEFAULT_FLUSH_INTERVAL_MSECS;
154157
}
155158

156-
this.queueSize = queueSize || defaultQueueSize;
157-
this.flushInterval = flushInterval || DEFAULT_FLUSH_INTERVAL_MSECS;
159+
if (isBrowser) {
160+
if (typeof batchSize !== 'undefined' && batchSize !== 1) {
161+
this.logger.log(LogLevel.WARNING, 'ODP event batch size must be 1 in the browser.');
162+
}
163+
if (typeof flushInterval !== 'undefined' && flushInterval !== 0) {
164+
this.logger.log(LogLevel.WARNING, 'ODP event flush interval must be 0 in the browser.');
165+
}
166+
}
158167

159168
this.state = STATE.STOPPED;
160169
}

packages/optimizely-sdk/lib/plugins/odp_manager/index.browser.ts

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,14 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { BROWSER_CLIENT_VERSION, ERROR_MESSAGES, JAVASCRIPT_CLIENT_ENGINE, ODP_USER_KEY } from '../../utils/enums';
17+
import {
18+
BROWSER_CLIENT_VERSION,
19+
ERROR_MESSAGES,
20+
JAVASCRIPT_CLIENT_ENGINE,
21+
ODP_USER_KEY,
22+
REQUEST_TIMEOUT_ODP_SEGMENTS_MS,
23+
REQUEST_TIMEOUT_ODP_EVENTS_MS
24+
} from '../../utils/enums';
1825
import { getLogger, LoggerFacade, LogHandler, LogLevel } from '../../modules/logging';
1926

2027
import { BrowserRequestHandler } from './../../utils/http_request_handler/browser_request_handler';
@@ -50,16 +57,22 @@ export class BrowserOdpManager extends OdpManager {
5057

5158
if (odpOptions?.segmentsRequestHandler) {
5259
customSegmentRequestHandler = odpOptions.segmentsRequestHandler;
53-
} else if (odpOptions?.segmentsApiTimeout) {
54-
customSegmentRequestHandler = new BrowserRequestHandler(browserLogger, odpOptions.segmentsApiTimeout);
60+
} else {
61+
customSegmentRequestHandler = new BrowserRequestHandler(
62+
browserLogger,
63+
odpOptions?.segmentsApiTimeout || REQUEST_TIMEOUT_ODP_SEGMENTS_MS
64+
);
5565
}
5666

5767
let customEventRequestHandler;
5868

5969
if (odpOptions?.eventRequestHandler) {
6070
customEventRequestHandler = odpOptions.eventRequestHandler;
61-
} else if (odpOptions?.eventApiTimeout) {
62-
customEventRequestHandler = new BrowserRequestHandler(browserLogger, odpOptions.eventApiTimeout);
71+
} else {
72+
customEventRequestHandler = new BrowserRequestHandler(
73+
browserLogger,
74+
odpOptions?.eventApiTimeout || REQUEST_TIMEOUT_ODP_EVENTS_MS
75+
);
6376
}
6477

6578
super({
@@ -69,8 +82,8 @@ export class BrowserOdpManager extends OdpManager {
6982
maxSize: odpOptions?.segmentsCacheSize,
7083
timeout: odpOptions?.segmentsCacheTimeout,
7184
}),
72-
segmentRequestHandler: customSegmentRequestHandler || new BrowserRequestHandler(browserLogger),
73-
eventRequestHandler: customEventRequestHandler || new BrowserRequestHandler(browserLogger),
85+
segmentRequestHandler: customSegmentRequestHandler,
86+
eventRequestHandler: customEventRequestHandler,
7487
logger: browserLogger,
7588
clientEngine: browserClientEngine,
7689
clientVersion: browserClientVersion,

packages/optimizely-sdk/lib/utils/enums/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,8 @@ export enum NOTIFICATION_TYPES {
337337
* Default milliseconds before request timeout
338338
*/
339339
export const REQUEST_TIMEOUT_MS = 60 * 1000; // 1 minute
340+
export const REQUEST_TIMEOUT_ODP_SEGMENTS_MS = 10 * 1000; // 10 secs
341+
export const REQUEST_TIMEOUT_ODP_EVENTS_MS = 10 * 1000; // 10 secs
340342

341343
/**
342344
* ODP User Key Options

packages/optimizely-sdk/tests/odpManager.browser.spec.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,13 @@ describe('OdpManager', () => {
336336
expect(browserOdpManager.segmentManager.odpSegmentApiManager.requestHandler.timeout).toBe(4000);
337337
});
338338

339+
it('Browser default Segments API Request Handler timeout should be used when odpOptions does not include segmentsApiTimeout', () => {
340+
const browserOdpManager = new BrowserOdpManager({});
341+
342+
// @ts-ignore
343+
expect(browserOdpManager.segmentManager.odpSegmentApiManager.requestHandler.timeout).toBe(10000);
344+
});
345+
339346
it('Custom odpOptions.segmentsRequestHandler overrides default Segment API Request Handler', () => {
340347
const odpOptions: OdpOptions = {
341348
segmentsRequestHandler: new BrowserRequestHandler(fakeLogger, 4000),
@@ -431,6 +438,18 @@ describe('OdpManager', () => {
431438
expect(browserOdpManager.eventManager.apiManager.requestHandler.timeout).toBe(4000);
432439
});
433440

441+
it('Browser default Events API Request Handler timeout should be used when odpOptions does not include eventsApiTimeout', () => {
442+
const odpOptions: OdpOptions = {
443+
};
444+
445+
const browserOdpManager = new BrowserOdpManager({
446+
odpOptions,
447+
});
448+
449+
// @ts-ignore
450+
expect(browserOdpManager.eventManager.apiManager.requestHandler.timeout).toBe(10000);
451+
});
452+
434453
it('Custom odpOptions.eventFlushInterval overrides default Event Manager flush interval', () => {
435454
const odpOptions: OdpOptions = {
436455
eventFlushInterval: 4000,
@@ -444,6 +463,33 @@ describe('OdpManager', () => {
444463
expect(browserOdpManager.eventManager.flushInterval).toBe(4000);
445464
});
446465

466+
it('Default ODP event flush interval is used when odpOptions does not include eventFlushInterval', () => {
467+
const odpOptions: OdpOptions = {};
468+
469+
const browserOdpManager = new BrowserOdpManager({
470+
odpOptions,
471+
});
472+
473+
// @ts-ignore
474+
expect(browserOdpManager.eventManager.flushInterval).toBe(1000);
475+
});
476+
477+
it('ODP event batch size set to one when odpOptions.eventFlushInterval set to 0', () => {
478+
const odpOptions: OdpOptions = {
479+
eventFlushInterval: 0,
480+
};
481+
482+
const browserOdpManager = new BrowserOdpManager({
483+
odpOptions,
484+
});
485+
486+
// @ts-ignore
487+
expect(browserOdpManager.eventManager.flushInterval).toBe(0);
488+
489+
// @ts-ignore
490+
expect(browserOdpManager.eventManager.batchSize).toBe(1);
491+
});
492+
447493
it('Custom odpOptions.eventBatchSize overrides default Event Manager batch size', () => {
448494
const odpOptions: OdpOptions = {
449495
eventBatchSize: 2,

0 commit comments

Comments
 (0)