@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
75 lines (74 loc) • 3.38 kB
JavaScript
;
// Shared utils for Redis and Pluggable storage
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseLatencyField = exports.parseExceptionField = exports.parseMetadata = exports.impressionsToJSON = exports.metadataBuilder = void 0;
var constants_1 = require("../utils/constants");
var TelemetryCacheInMemory_1 = require("./inMemory/TelemetryCacheInMemory");
var KeyBuilderSS_1 = require("./KeyBuilderSS");
function metadataBuilder(settings) {
return {
s: settings.version,
i: settings.runtime.ip || constants_1.UNKNOWN,
n: settings.runtime.hostname || constants_1.UNKNOWN,
};
}
exports.metadataBuilder = metadataBuilder;
// Converts impressions to be stored in Redis or pluggable storage.
function impressionsToJSON(impressions, metadata) {
return impressions.map(function (impression) {
var impressionWithMetadata = {
m: metadata,
i: {
k: impression.keyName,
b: impression.bucketingKey,
f: impression.feature,
t: impression.treatment,
r: impression.label,
c: impression.changeNumber,
m: impression.time,
pt: impression.pt,
properties: impression.properties
}
};
return JSON.stringify(impressionWithMetadata);
});
}
exports.impressionsToJSON = impressionsToJSON;
// Utilities used by TelemetryCacheInRedis and TelemetryCachePluggable
var REVERSE_METHOD_NAMES = Object.keys(KeyBuilderSS_1.METHOD_NAMES).reduce(function (acc, key) {
acc[KeyBuilderSS_1.METHOD_NAMES[key]] = key;
return acc;
}, {});
function parseMetadata(field) {
var parts = field.split('/');
if (parts.length !== 3)
return "invalid subsection count. Expected 3, got: ".concat(parts.length);
var s = parts[0] /* metadata.s */, n = parts[1] /* metadata.n */, i = parts[2] /* metadata.i */;
return [JSON.stringify({ s: s, n: n, i: i })];
}
exports.parseMetadata = parseMetadata;
function parseExceptionField(field) {
var parts = field.split('/');
if (parts.length !== 4)
return "invalid subsection count. Expected 4, got: ".concat(parts.length);
var s = parts[0] /* metadata.s */, n = parts[1] /* metadata.n */, i = parts[2] /* metadata.i */, m = parts[3];
var method = REVERSE_METHOD_NAMES[m];
if (!method)
return "unknown method '".concat(m, "'");
return [JSON.stringify({ s: s, n: n, i: i }), method];
}
exports.parseExceptionField = parseExceptionField;
function parseLatencyField(field) {
var parts = field.split('/');
if (parts.length !== 5)
return "invalid subsection count. Expected 5, got: ".concat(parts.length);
var s = parts[0] /* metadata.s */, n = parts[1] /* metadata.n */, i = parts[2] /* metadata.i */, m = parts[3], b = parts[4];
var method = REVERSE_METHOD_NAMES[m];
if (!method)
return "unknown method '".concat(m, "'");
var bucket = parseInt(b);
if (isNaN(bucket) || bucket >= TelemetryCacheInMemory_1.MAX_LATENCY_BUCKET_COUNT)
return "invalid bucket. Expected a number between 0 and ".concat(TelemetryCacheInMemory_1.MAX_LATENCY_BUCKET_COUNT - 1, ", got: ").concat(b);
return [JSON.stringify({ s: s, n: n, i: i }), method, bucket];
}
exports.parseLatencyField = parseLatencyField;