UNPKG

@splitsoftware/splitio-commons

Version:
48 lines (47 loc) 2.12 kB
import { groupBy, forOwn } from '../../utils/lang'; import { submitterFactory } from './submitter'; import { SUBMITTERS_PUSH_FULL_QUEUE } from '../../logger/constants'; /** * Converts `impressions` data from cache into request payload. */ export function fromImpressionsCollector(sendLabels, entityType, data) { var groupedByFeature = groupBy(data, 'feature'); var dto = []; forOwn(groupedByFeature, function (value, name) { dto.push({ f: name, i: value.map(function (entry) { return { k: entry.keyName, t: entry.treatment, m: entry.time, c: entry.changeNumber, r: sendLabels ? entry.label : undefined, b: entry.bucketingKey, pt: entry.pt, properties: entry.properties, et: entityType, // Definition type }; }) }); }); return dto; } /** * Submitter that periodically posts impressions data */ export function impressionsSubmitterFactory(params) { var _a = params.settings, log = _a.log, impressionsRefreshRate = _a.scheduler.impressionsRefreshRate, labelsEnabled = _a.core.labelsEnabled, postTestImpressionsBulk = params.serviceApi.postTestImpressionsBulk, impressions = params.storage.impressions, entityType = params.entityType; // retry impressions only once. var syncTask = submitterFactory(log, postTestImpressionsBulk, impressions, impressionsRefreshRate, fromImpressionsCollector.bind(undefined, labelsEnabled, entityType), 1); // register impressions submitter to be executed when impressions cache is full impressions.setOnFullQueueCb(function () { if (syncTask.isRunning()) { log.info(SUBMITTERS_PUSH_FULL_QUEUE, [impressions.name]); syncTask.execute(); } // If submitter is stopped (e.g., user consent declined or unknown, or app state offline), we don't send the data. // Data will be sent when submitter is resumed. }); return syncTask; }