@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
126 lines (125 loc) • 6.39 kB
JavaScript
;
var _a, _b, _c;
Object.defineProperty(exports, "__esModule", { value: true });
exports.telemetrySubmitterFactory = exports.telemetryCacheConfigAdapter = exports.getTelemetryConfigStats = void 0;
var submitter_1 = require("./submitter");
var constants_1 = require("../../utils/constants");
var constants_2 = require("../../readiness/constants");
var settingsValidation_1 = require("../../utils/settingsValidation");
var apiKey_1 = require("../../utils/inputValidation/apiKey");
var timer_1 = require("../../utils/timeTracker/timer");
var objectAssign_1 = require("../../utils/lang/objectAssign");
var OPERATION_MODE_MAP = (_a = {},
_a[constants_1.STANDALONE_MODE] = constants_1.STANDALONE_ENUM,
_a[constants_1.CONSUMER_MODE] = constants_1.CONSUMER_ENUM,
_a[constants_1.CONSUMER_PARTIAL_MODE] = constants_1.CONSUMER_PARTIAL_ENUM,
_a);
var IMPRESSIONS_MODE_MAP = (_b = {},
_b[constants_1.OPTIMIZED] = constants_1.OPTIMIZED_ENUM,
_b[constants_1.DEBUG] = constants_1.DEBUG_ENUM,
_b[constants_1.NONE] = constants_1.NONE_ENUM,
_b);
var USER_CONSENT_MAP = (_c = {},
_c[constants_1.CONSENT_UNKNOWN] = 1,
_c[constants_1.CONSENT_GRANTED] = 2,
_c[constants_1.CONSENT_DECLINED] = 3,
_c);
function getActiveFactories() {
return Object.keys(apiKey_1.usedKeysMap).length;
}
function getRedundantActiveFactories() {
return Object.keys(apiKey_1.usedKeysMap).reduce(function (acum, sdkKey) {
return acum + apiKey_1.usedKeysMap[sdkKey] - 1;
}, 0);
}
function getTelemetryFlagSetsStats(splitFiltersValidation) {
// Group every configured flag set in an unique array called originalSets
var flagSetsTotal = 0;
splitFiltersValidation.validFilters.forEach(function (filter) {
if (filter.type === 'bySet')
flagSetsTotal += filter.values.length;
});
var flagSetsValid = splitFiltersValidation.groupedFilters.bySet.length;
var flagSetsIgnored = flagSetsTotal - flagSetsValid;
return { flagSetsTotal: flagSetsTotal, flagSetsIgnored: flagSetsIgnored };
}
function getTelemetryConfigStats(mode, storageType) {
return {
oM: OPERATION_MODE_MAP[mode],
st: storageType.toLowerCase(),
aF: getActiveFactories(),
rF: getRedundantActiveFactories(),
};
}
exports.getTelemetryConfigStats = getTelemetryConfigStats;
/**
* Converts data from telemetry cache and settings into /metrics/config request payload.
*/
function telemetryCacheConfigAdapter(telemetry, settings) {
return {
isEmpty: function () { return false; },
clear: function () { },
pop: function () {
var urls = settings.urls, scheduler = settings.scheduler;
var isClientSide = settings.core.key !== undefined;
var _a = getTelemetryFlagSetsStats(settings.sync.__splitFiltersValidation), flagSetsTotal = _a.flagSetsTotal, flagSetsIgnored = _a.flagSetsIgnored;
return (0, objectAssign_1.objectAssign)(getTelemetryConfigStats(settings.mode, settings.storage.type), {
sE: settings.streamingEnabled,
rR: {
sp: scheduler.featuresRefreshRate / 1000,
se: isClientSide ? undefined : scheduler.segmentsRefreshRate / 1000,
ms: isClientSide ? scheduler.segmentsRefreshRate / 1000 : undefined,
im: scheduler.impressionsRefreshRate / 1000,
ev: scheduler.eventsPushRate / 1000,
te: scheduler.telemetryRefreshRate / 1000,
},
uO: {
s: urls.sdk !== settingsValidation_1.base.urls.sdk,
e: urls.events !== settingsValidation_1.base.urls.events,
a: urls.auth !== settingsValidation_1.base.urls.auth,
st: urls.streaming !== settingsValidation_1.base.urls.streaming,
t: urls.telemetry !== settingsValidation_1.base.urls.telemetry,
},
iQ: scheduler.impressionsQueueSize,
eQ: scheduler.eventsQueueSize,
iM: IMPRESSIONS_MODE_MAP[settings.sync.impressionsMode],
iL: settings.impressionListener ? true : false,
hP: false,
tR: telemetry.getTimeUntilReady(),
tC: telemetry.getTimeUntilReadyFromCache(),
nR: telemetry.getNonReadyUsage(),
t: telemetry.popTags(),
i: settings.integrations && settings.integrations.map(function (int) { return int.type; }),
uC: settings.userConsent ? USER_CONSENT_MAP[settings.userConsent] : 0,
fsT: flagSetsTotal,
fsI: flagSetsIgnored
});
}
};
}
exports.telemetryCacheConfigAdapter = telemetryCacheConfigAdapter;
/**
* Submitter that periodically posts telemetry data
*/
function telemetrySubmitterFactory(params) {
var telemetry = params.storage.telemetry, now = params.platform.now;
if (!telemetry || !now)
return; // No submitter created if telemetry cache is not defined
var settings = params.settings, _a = params.settings, log = _a.log, telemetryRefreshRate = _a.scheduler.telemetryRefreshRate, splitApi = params.splitApi, readiness = params.readiness, sdkReadinessManager = params.sdkReadinessManager;
var startTime = (0, timer_1.timer)(now);
var submitter = (0, submitter_1.firstPushWindowDecorator)((0, submitter_1.submitterFactory)(log, splitApi.postMetricsUsage, telemetry, telemetryRefreshRate, 'telemetry stats', undefined, 0, true), telemetryRefreshRate);
readiness.gate.once(constants_2.SDK_READY_FROM_CACHE, function () {
telemetry.recordTimeUntilReadyFromCache(startTime());
});
sdkReadinessManager.incInternalReadyCbCount();
readiness.gate.once(constants_2.SDK_READY, function () {
telemetry.recordTimeUntilReady(startTime());
// Post config data when the SDK is ready and if the telemetry submitter was started
if (submitter.isRunning()) {
var postMetricsConfigTask = (0, submitter_1.submitterFactory)(log, splitApi.postMetricsConfig, telemetryCacheConfigAdapter(telemetry, settings), 0, 'telemetry config', undefined, 0, true);
postMetricsConfigTask.execute();
}
});
return submitter;
}
exports.telemetrySubmitterFactory = telemetrySubmitterFactory;