UNPKG

@splitsoftware/splitio-commons

Version:
67 lines (66 loc) 2.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.firstPushWindowDecorator = exports.submitterFactory = void 0; var syncTask_1 = require("../syncTask"); var constants_1 = require("../../logger/constants"); /** * Base function to create submitters, such as ImpressionsSubmitter and EventsSubmitter */ function submitterFactory(log, postClient, sourceCache, postRate, dataName, fromCacheToPayload, maxRetries, debugLogs // true for telemetry submitters ) { if (maxRetries === void 0) { maxRetries = 0; } var retries = 0; var data; function postData() { if (sourceCache.isEmpty() && !data) return Promise.resolve(); data = sourceCache.pop(data); var dataCountMessage = typeof data.length === 'number' ? data.length + " " + dataName : dataName; log[debugLogs ? 'debug' : 'info'](constants_1.SUBMITTERS_PUSH, [dataCountMessage]); var jsonPayload = JSON.stringify(fromCacheToPayload ? fromCacheToPayload(data) : data); if (!maxRetries) data = undefined; return postClient(jsonPayload).then(function () { retries = 0; data = undefined; }).catch(function (err) { if (!maxRetries) { log[debugLogs ? 'debug' : 'warn'](constants_1.SUBMITTERS_PUSH_FAILS, [dataCountMessage, err]); } else if (retries === maxRetries) { retries = 0; data = undefined; log[debugLogs ? 'debug' : 'warn'](constants_1.SUBMITTERS_PUSH_FAILS, [dataCountMessage, err]); } else { retries++; log[debugLogs ? 'debug' : 'warn'](constants_1.SUBMITTERS_PUSH_RETRY, [dataCountMessage, err]); } }); } return (0, syncTask_1.syncTaskFactory)(log, postData, postRate, dataName + ' submitter'); } exports.submitterFactory = submitterFactory; /** * Decorates a provided submitter with a first execution window */ function firstPushWindowDecorator(submitter, firstPushWindow) { var running = false; var stopEventPublisherTimeout; var originalStart = submitter.start; submitter.start = function () { running = true; stopEventPublisherTimeout = setTimeout(originalStart, firstPushWindow); }; var originalStop = submitter.stop; submitter.stop = function () { running = false; clearTimeout(stopEventPublisherTimeout); originalStop(); }; submitter.isRunning = function () { return running; }; return submitter; } exports.firstPushWindowDecorator = firstPushWindowDecorator;