UNPKG

@splitsoftware/splitio-commons

Version:
126 lines (125 loc) 6.39 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 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;