Skip to content

Commit 4a3ce6c

Browse files
authored
feat(events): Allow providing a maxQueueSize configuration (#137)
1 parent 63c8b11 commit 4a3ce6c

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

src/i-client-config.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,15 +123,21 @@ export interface IClientConfig extends IBaseRequestConfig {
123123

124124
/** Configuration settings for the event dispatcher */
125125
eventIngestionConfig?: {
126-
/** number of milliseconds to wait between each batch delivery. Defaults to 10 seconds. */
126+
/** Number of milliseconds to wait between each batch delivery. Defaults to 10 seconds. */
127127
deliveryIntervalMs?: number;
128-
/** minimum amount of milliseconds to wait before retrying a failed delivery. Defaults to 5 seconds */
128+
/** Minimum amount of milliseconds to wait before retrying a failed delivery. Defaults to 5 seconds */
129129
retryIntervalMs?: number;
130-
/** maximum amount of milliseconds to wait before retrying a failed delivery. Defaults to 30 seconds. */
130+
/** Maximum amount of milliseconds to wait before retrying a failed delivery. Defaults to 30 seconds. */
131131
maxRetryDelayMs?: number;
132-
/** maximum number of retry attempts before giving up on a batch delivery. Defaults to 3 retries. */
132+
/** Maximum number of retry attempts before giving up on a batch delivery. Defaults to 3 retries. */
133133
maxRetries?: number;
134-
/** maximum number of events to send per delivery request. Defaults to 1000 events. */
134+
/** Maximum number of events to send per delivery request. Defaults to 1000 events. */
135135
batchSize?: number;
136+
/**
137+
* Maximum number of events to queue in memory before starting to drop events.
138+
* Note: This is only used if localStorage is not available.
139+
* Defaults to 10000 events.
140+
*/
141+
maxQueueSize?: number;
136142
};
137143
}

src/index.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -619,22 +619,23 @@ function newEventDispatcher(
619619
sdkKey: string,
620620
config: IClientConfig['eventIngestionConfig'] = {},
621621
): EventDispatcher {
622-
const eventQueue = hasWindowLocalStorage()
623-
? new LocalStorageBackedNamedEventQueue<Event>('events')
624-
: new BoundedEventQueue<Event>('events');
625-
const emptyNetworkStatusListener =
626-
// eslint-disable-next-line @typescript-eslint/no-empty-function
627-
{ isOffline: () => false, onNetworkStatusChange: () => {} };
628-
const networkStatusListener =
629-
typeof window !== 'undefined' ? new BrowserNetworkStatusListener() : emptyNetworkStatusListener;
630622
// initialize config with default values
631623
const {
632624
batchSize = 1_000,
633625
deliveryIntervalMs = 10_000,
634626
retryIntervalMs = 5_000,
635627
maxRetryDelayMs = 30_000,
636628
maxRetries = 3,
629+
maxQueueSize = 10_000,
637630
} = config;
631+
const eventQueue = hasWindowLocalStorage()
632+
? new LocalStorageBackedNamedEventQueue<Event>('events')
633+
: new BoundedEventQueue<Event>('events', [], maxQueueSize);
634+
const emptyNetworkStatusListener =
635+
// eslint-disable-next-line @typescript-eslint/no-empty-function
636+
{ isOffline: () => false, onNetworkStatusChange: () => {} };
637+
const networkStatusListener =
638+
typeof window !== 'undefined' ? new BrowserNetworkStatusListener() : emptyNetworkStatusListener;
638639
return newDefaultEventDispatcher(eventQueue, networkStatusListener, sdkKey, batchSize, {
639640
deliveryIntervalMs,
640641
retryIntervalMs,

0 commit comments

Comments
 (0)