UNPKG

@splitsoftware/splitio-commons

Version:
127 lines (126 loc) 6.34 kB
"use strict"; 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 key_1 = require("../../utils/key"); 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 { name: 'telemetry config', isEmpty: function () { return false; }, clear: function () { }, pop: function () { var urls = settings.urls, scheduler = settings.scheduler; var isServerSide = (0, key_1.checkIfServerSide)(settings); 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: isServerSide ? scheduler.segmentsRefreshRate / 1000 : undefined, ms: isServerSide ? undefined : scheduler.segmentsRefreshRate / 1000, 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, serviceApi = params.serviceApi, readiness = params.readiness; var stopTimer = (0, timer_1.timer)(now); var submitter = (0, submitter_1.firstPushWindowDecorator)((0, submitter_1.submitterFactory)(log, serviceApi.postMetricsUsage, telemetry, telemetryRefreshRate, undefined, 0, true), telemetryRefreshRate); readiness.gate.once(constants_2.SDK_READY_FROM_CACHE, function () { telemetry.recordTimeUntilReadyFromCache(stopTimer()); }); readiness.gate.once(constants_2.SDK_READY, function () { telemetry.recordTimeUntilReady(stopTimer()); // 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, serviceApi.postMetricsConfig, telemetryCacheConfigAdapter(telemetry, settings), 0, undefined, 0, true); postMetricsConfigTask.execute(); } }); return submitter; } exports.telemetrySubmitterFactory = telemetrySubmitterFactory;