@aws-amplify/analytics
Version:
Analytics category of aws-amplify
64 lines (61 loc) • 1.79 kB
JavaScript
import { ConsoleLogger } from '@aws-amplify/core';
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
const logger = new ConsoleLogger('EventBuffer');
class EventBuffer {
constructor(config, getAnalyticsClient) {
this.list = [];
this.config = config;
this.getAnalyticsClient = getAnalyticsClient;
this.startEventLoop();
}
append(...events) {
for (const event of events) {
if (this.list.length + 1 > this.config.bufferSize) {
logger.debug(`Exceed ${typeof event} event buffer limits, event dropped`);
continue;
}
this.list.push(event);
}
}
flushAll() {
return this.submitEvents(this.list.length);
}
release() {
this.list = [];
if (this.timer) {
clearInterval(this.timer);
}
}
get length() {
return this.list.length;
}
head(count) {
return this.list.splice(0, count);
}
insertAtBeginning(...data) {
this.list.unshift(...data);
}
startEventLoop() {
if (this.timer) {
clearInterval(this.timer);
}
const { flushSize, flushInterval } = this.config;
setInterval(() => {
this.submitEvents(flushSize);
}, flushInterval);
}
submitEvents(count) {
const events = this.head(count);
if (events.length === 0) {
return Promise.resolve();
}
return this.getAnalyticsClient()(events).then(result => {
if (result.length > 0) {
this.insertAtBeginning(...result);
}
});
}
}
export { EventBuffer };
//# sourceMappingURL=EventBuffer.mjs.map