@splitsoftware/splitio-commons 1.6.2-rc.7 → 1.6.2-rc.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/sdkFactory/index.js +0 -3
- package/cjs/storages/inRedis/ImpressionCountsCacheInRedis.js +4 -3
- package/cjs/storages/inRedis/index.js +7 -6
- package/cjs/storages/inRedis/uniqueKeysCacheInRedis.js +5 -2
- package/cjs/utils/settingsValidation/index.js +0 -1
- package/esm/sdkFactory/index.js +0 -3
- package/esm/storages/inRedis/ImpressionCountsCacheInRedis.js +4 -3
- package/esm/storages/inRedis/index.js +7 -6
- package/esm/storages/inRedis/uniqueKeysCacheInRedis.js +5 -2
- package/esm/utils/settingsValidation/index.js +0 -1
- package/package.json +1 -1
- package/src/sdkFactory/index.ts +0 -3
- package/src/storages/inRedis/ImpressionCountsCacheInRedis.ts +3 -2
- package/src/storages/inRedis/index.ts +8 -7
- package/src/storages/inRedis/uniqueKeysCacheInRedis.ts +4 -3
- package/src/storages/types.ts +1 -4
- package/src/types.ts +0 -2
- package/src/utils/settingsValidation/index.ts +0 -1
- package/types/storages/inRedis/ImpressionCountsCacheInRedis.d.ts +2 -2
- package/types/storages/inRedis/uniqueKeysCacheInRedis.d.ts +1 -1
- package/types/storages/types.d.ts +0 -3
- package/types/types.d.ts +0 -2
package/cjs/sdkFactory/index.js
CHANGED
|
@@ -35,9 +35,6 @@ function sdkFactory(params) {
|
|
|
35
35
|
impressionsQueueSize: settings.scheduler.impressionsQueueSize,
|
|
36
36
|
eventsQueueSize: settings.scheduler.eventsQueueSize,
|
|
37
37
|
uniqueKeysCacheSize: settings.scheduler.uniqueKeysCacheSize,
|
|
38
|
-
impressionCountsQueueSize: settings.scheduler.impressionCountsQueueSize,
|
|
39
|
-
impressionCountsRefreshRate: settings.scheduler.impressionCountsRefreshRate,
|
|
40
|
-
uniqueKeysRefreshRate: settings.scheduler.uniqueKeysRefreshRate,
|
|
41
38
|
optimize: (0, utils_1.shouldBeOptimized)(settings),
|
|
42
39
|
// ATM, only used by InLocalStorage
|
|
43
40
|
matchingKey: (0, key_1.getMatching)(settings.core.key),
|
|
@@ -19,9 +19,9 @@ var ImpressionCountsCacheInRedis = /** @class */ (function (_super) {
|
|
|
19
19
|
ImpressionCountsCacheInRedis.prototype.postImpressionCountsInRedis = function () {
|
|
20
20
|
var _this = this;
|
|
21
21
|
var counts = this.pop();
|
|
22
|
-
if (!counts)
|
|
23
|
-
return false;
|
|
24
22
|
var keys = Object.keys(counts);
|
|
23
|
+
if (!keys)
|
|
24
|
+
return Promise.resolve(false);
|
|
25
25
|
var pipeline = this.redis.pipeline();
|
|
26
26
|
keys.forEach(function (key) {
|
|
27
27
|
pipeline.hincrby(_this.key, key, counts[key]);
|
|
@@ -35,7 +35,7 @@ var ImpressionCountsCacheInRedis = /** @class */ (function (_super) {
|
|
|
35
35
|
})
|
|
36
36
|
.catch(function (err) {
|
|
37
37
|
_this.log.error(constants_1.LOG_PREFIX + "Error in impression counts pipeline: " + err + ".");
|
|
38
|
-
return false;
|
|
38
|
+
return Promise.resolve(false);
|
|
39
39
|
});
|
|
40
40
|
};
|
|
41
41
|
ImpressionCountsCacheInRedis.prototype.start = function () {
|
|
@@ -43,6 +43,7 @@ var ImpressionCountsCacheInRedis = /** @class */ (function (_super) {
|
|
|
43
43
|
};
|
|
44
44
|
ImpressionCountsCacheInRedis.prototype.stop = function () {
|
|
45
45
|
clearInterval(this.intervalId);
|
|
46
|
+
return this.postImpressionCountsInRedis();
|
|
46
47
|
};
|
|
47
48
|
return ImpressionCountsCacheInRedis;
|
|
48
49
|
}(ImpressionCountsCacheInMemory_1.ImpressionCountsCacheInMemory));
|
|
@@ -20,12 +20,12 @@ function InRedisStorage(options) {
|
|
|
20
20
|
if (options === void 0) { options = {}; }
|
|
21
21
|
var prefix = (0, KeyBuilder_1.validatePrefix)(options.prefix);
|
|
22
22
|
function InRedisStorageFactory(_a) {
|
|
23
|
-
var log = _a.log, metadata = _a.metadata, onReadyCb = _a.onReadyCb, impressionsMode = _a.impressionsMode
|
|
23
|
+
var log = _a.log, metadata = _a.metadata, onReadyCb = _a.onReadyCb, impressionsMode = _a.impressionsMode;
|
|
24
24
|
var keys = new KeyBuilderSS_1.KeyBuilderSS(prefix, metadata);
|
|
25
25
|
var redisClient = new RedisAdapter_1.RedisAdapter(log, options.options || {});
|
|
26
26
|
var telemetry = new TelemetryCacheInRedis_1.TelemetryCacheInRedis(log, keys, redisClient);
|
|
27
|
-
var impressionCountsCache = impressionsMode !== constants_1.DEBUG ? new ImpressionCountsCacheInRedis_1.ImpressionCountsCacheInRedis(log, keys.buildImpressionsCountKey(), redisClient
|
|
28
|
-
var uniqueKeysCache = impressionsMode === constants_1.NONE ? new uniqueKeysCacheInRedis_1.UniqueKeysCacheInRedis(log, keys.buildUniqueKeysKey(), redisClient
|
|
27
|
+
var impressionCountsCache = impressionsMode !== constants_1.DEBUG ? new ImpressionCountsCacheInRedis_1.ImpressionCountsCacheInRedis(log, keys.buildImpressionsCountKey(), redisClient) : undefined;
|
|
28
|
+
var uniqueKeysCache = impressionsMode === constants_1.NONE ? new uniqueKeysCacheInRedis_1.UniqueKeysCacheInRedis(log, keys.buildUniqueKeysKey(), redisClient) : undefined;
|
|
29
29
|
// subscription to Redis connect event in order to emit SDK_READY event on consumer mode
|
|
30
30
|
redisClient.on('connect', function () {
|
|
31
31
|
onReadyCb();
|
|
@@ -47,11 +47,12 @@ function InRedisStorage(options) {
|
|
|
47
47
|
// When using REDIS we should:
|
|
48
48
|
// 1- Disconnect from the storage
|
|
49
49
|
destroy: function () {
|
|
50
|
-
|
|
50
|
+
var promises = [];
|
|
51
51
|
if (impressionCountsCache)
|
|
52
|
-
impressionCountsCache.stop();
|
|
52
|
+
promises.push(impressionCountsCache.stop());
|
|
53
53
|
if (uniqueKeysCache)
|
|
54
|
-
uniqueKeysCache.stop();
|
|
54
|
+
promises.push(uniqueKeysCache.stop());
|
|
55
|
+
return Promise.all(promises).then(function () { redisClient.disconnect(); });
|
|
55
56
|
// @TODO check that caches works as expected when redisClient is disconnected
|
|
56
57
|
}
|
|
57
58
|
};
|
|
@@ -21,8 +21,10 @@ var UniqueKeysCacheInRedis = /** @class */ (function (_super) {
|
|
|
21
21
|
}
|
|
22
22
|
UniqueKeysCacheInRedis.prototype.postUniqueKeysInRedis = function () {
|
|
23
23
|
var _this = this;
|
|
24
|
-
var pipeline = this.redis.pipeline();
|
|
25
24
|
var featureNames = Object.keys(this.uniqueKeysTracker);
|
|
25
|
+
if (!featureNames)
|
|
26
|
+
return Promise.resolve(false);
|
|
27
|
+
var pipeline = this.redis.pipeline();
|
|
26
28
|
for (var i = 0; i < featureNames.length; i++) {
|
|
27
29
|
var featureName = featureNames[i];
|
|
28
30
|
var featureKeys = (0, sets_1.setToArray)(this.uniqueKeysTracker[featureName]);
|
|
@@ -42,7 +44,7 @@ var UniqueKeysCacheInRedis = /** @class */ (function (_super) {
|
|
|
42
44
|
})
|
|
43
45
|
.catch(function (err) {
|
|
44
46
|
_this.log.error(constants_2.LOG_PREFIX + "Error in uniqueKeys pipeline: " + err + ".");
|
|
45
|
-
return false;
|
|
47
|
+
return Promise.resolve(false);
|
|
46
48
|
});
|
|
47
49
|
};
|
|
48
50
|
UniqueKeysCacheInRedis.prototype.start = function () {
|
|
@@ -50,6 +52,7 @@ var UniqueKeysCacheInRedis = /** @class */ (function (_super) {
|
|
|
50
52
|
};
|
|
51
53
|
UniqueKeysCacheInRedis.prototype.stop = function () {
|
|
52
54
|
clearInterval(this.intervalId);
|
|
55
|
+
return this.postUniqueKeysInRedis();
|
|
53
56
|
};
|
|
54
57
|
return UniqueKeysCacheInRedis;
|
|
55
58
|
}(uniqueKeysCacheInMemory_1.UniqueKeysCacheInMemory));
|
|
@@ -115,7 +115,6 @@ function settingsValidation(config, validationParams) {
|
|
|
115
115
|
scheduler.offlineRefreshRate = fromSecondsToMillis(scheduler.offlineRefreshRate);
|
|
116
116
|
scheduler.eventsPushRate = fromSecondsToMillis(scheduler.eventsPushRate);
|
|
117
117
|
scheduler.uniqueKeysRefreshRate = fromSecondsToMillis(scheduler.uniqueKeysRefreshRate);
|
|
118
|
-
scheduler.impressionCountsRefreshRate = fromSecondsToMillis(scheduler.impressionCountsRefreshRate);
|
|
119
118
|
scheduler.telemetryRefreshRate = fromSecondsToMillis(validateMinValue('telemetryRefreshRate', scheduler.telemetryRefreshRate, 60));
|
|
120
119
|
// Default impressionsRefreshRate for DEBUG mode is 60 secs
|
|
121
120
|
if ((0, lang_1.get)(config, 'scheduler.impressionsRefreshRate') === undefined && withDefaults.sync.impressionsMode === constants_1.DEBUG)
|
package/esm/sdkFactory/index.js
CHANGED
|
@@ -32,9 +32,6 @@ export function sdkFactory(params) {
|
|
|
32
32
|
impressionsQueueSize: settings.scheduler.impressionsQueueSize,
|
|
33
33
|
eventsQueueSize: settings.scheduler.eventsQueueSize,
|
|
34
34
|
uniqueKeysCacheSize: settings.scheduler.uniqueKeysCacheSize,
|
|
35
|
-
impressionCountsQueueSize: settings.scheduler.impressionCountsQueueSize,
|
|
36
|
-
impressionCountsRefreshRate: settings.scheduler.impressionCountsRefreshRate,
|
|
37
|
-
uniqueKeysRefreshRate: settings.scheduler.uniqueKeysRefreshRate,
|
|
38
35
|
optimize: shouldBeOptimized(settings),
|
|
39
36
|
// ATM, only used by InLocalStorage
|
|
40
37
|
matchingKey: getMatching(settings.core.key),
|
|
@@ -16,9 +16,9 @@ var ImpressionCountsCacheInRedis = /** @class */ (function (_super) {
|
|
|
16
16
|
ImpressionCountsCacheInRedis.prototype.postImpressionCountsInRedis = function () {
|
|
17
17
|
var _this = this;
|
|
18
18
|
var counts = this.pop();
|
|
19
|
-
if (!counts)
|
|
20
|
-
return false;
|
|
21
19
|
var keys = Object.keys(counts);
|
|
20
|
+
if (!keys)
|
|
21
|
+
return Promise.resolve(false);
|
|
22
22
|
var pipeline = this.redis.pipeline();
|
|
23
23
|
keys.forEach(function (key) {
|
|
24
24
|
pipeline.hincrby(_this.key, key, counts[key]);
|
|
@@ -32,7 +32,7 @@ var ImpressionCountsCacheInRedis = /** @class */ (function (_super) {
|
|
|
32
32
|
})
|
|
33
33
|
.catch(function (err) {
|
|
34
34
|
_this.log.error(LOG_PREFIX + "Error in impression counts pipeline: " + err + ".");
|
|
35
|
-
return false;
|
|
35
|
+
return Promise.resolve(false);
|
|
36
36
|
});
|
|
37
37
|
};
|
|
38
38
|
ImpressionCountsCacheInRedis.prototype.start = function () {
|
|
@@ -40,6 +40,7 @@ var ImpressionCountsCacheInRedis = /** @class */ (function (_super) {
|
|
|
40
40
|
};
|
|
41
41
|
ImpressionCountsCacheInRedis.prototype.stop = function () {
|
|
42
42
|
clearInterval(this.intervalId);
|
|
43
|
+
return this.postImpressionCountsInRedis();
|
|
43
44
|
};
|
|
44
45
|
return ImpressionCountsCacheInRedis;
|
|
45
46
|
}(ImpressionCountsCacheInMemory));
|
|
@@ -17,12 +17,12 @@ export function InRedisStorage(options) {
|
|
|
17
17
|
if (options === void 0) { options = {}; }
|
|
18
18
|
var prefix = validatePrefix(options.prefix);
|
|
19
19
|
function InRedisStorageFactory(_a) {
|
|
20
|
-
var log = _a.log, metadata = _a.metadata, onReadyCb = _a.onReadyCb, impressionsMode = _a.impressionsMode
|
|
20
|
+
var log = _a.log, metadata = _a.metadata, onReadyCb = _a.onReadyCb, impressionsMode = _a.impressionsMode;
|
|
21
21
|
var keys = new KeyBuilderSS(prefix, metadata);
|
|
22
22
|
var redisClient = new RedisAdapter(log, options.options || {});
|
|
23
23
|
var telemetry = new TelemetryCacheInRedis(log, keys, redisClient);
|
|
24
|
-
var impressionCountsCache = impressionsMode !== DEBUG ? new ImpressionCountsCacheInRedis(log, keys.buildImpressionsCountKey(), redisClient
|
|
25
|
-
var uniqueKeysCache = impressionsMode === NONE ? new UniqueKeysCacheInRedis(log, keys.buildUniqueKeysKey(), redisClient
|
|
24
|
+
var impressionCountsCache = impressionsMode !== DEBUG ? new ImpressionCountsCacheInRedis(log, keys.buildImpressionsCountKey(), redisClient) : undefined;
|
|
25
|
+
var uniqueKeysCache = impressionsMode === NONE ? new UniqueKeysCacheInRedis(log, keys.buildUniqueKeysKey(), redisClient) : undefined;
|
|
26
26
|
// subscription to Redis connect event in order to emit SDK_READY event on consumer mode
|
|
27
27
|
redisClient.on('connect', function () {
|
|
28
28
|
onReadyCb();
|
|
@@ -44,11 +44,12 @@ export function InRedisStorage(options) {
|
|
|
44
44
|
// When using REDIS we should:
|
|
45
45
|
// 1- Disconnect from the storage
|
|
46
46
|
destroy: function () {
|
|
47
|
-
|
|
47
|
+
var promises = [];
|
|
48
48
|
if (impressionCountsCache)
|
|
49
|
-
impressionCountsCache.stop();
|
|
49
|
+
promises.push(impressionCountsCache.stop());
|
|
50
50
|
if (uniqueKeysCache)
|
|
51
|
-
uniqueKeysCache.stop();
|
|
51
|
+
promises.push(uniqueKeysCache.stop());
|
|
52
|
+
return Promise.all(promises).then(function () { redisClient.disconnect(); });
|
|
52
53
|
// @TODO check that caches works as expected when redisClient is disconnected
|
|
53
54
|
}
|
|
54
55
|
};
|
|
@@ -18,8 +18,10 @@ var UniqueKeysCacheInRedis = /** @class */ (function (_super) {
|
|
|
18
18
|
}
|
|
19
19
|
UniqueKeysCacheInRedis.prototype.postUniqueKeysInRedis = function () {
|
|
20
20
|
var _this = this;
|
|
21
|
-
var pipeline = this.redis.pipeline();
|
|
22
21
|
var featureNames = Object.keys(this.uniqueKeysTracker);
|
|
22
|
+
if (!featureNames)
|
|
23
|
+
return Promise.resolve(false);
|
|
24
|
+
var pipeline = this.redis.pipeline();
|
|
23
25
|
for (var i = 0; i < featureNames.length; i++) {
|
|
24
26
|
var featureName = featureNames[i];
|
|
25
27
|
var featureKeys = setToArray(this.uniqueKeysTracker[featureName]);
|
|
@@ -39,7 +41,7 @@ var UniqueKeysCacheInRedis = /** @class */ (function (_super) {
|
|
|
39
41
|
})
|
|
40
42
|
.catch(function (err) {
|
|
41
43
|
_this.log.error(LOG_PREFIX + "Error in uniqueKeys pipeline: " + err + ".");
|
|
42
|
-
return false;
|
|
44
|
+
return Promise.resolve(false);
|
|
43
45
|
});
|
|
44
46
|
};
|
|
45
47
|
UniqueKeysCacheInRedis.prototype.start = function () {
|
|
@@ -47,6 +49,7 @@ var UniqueKeysCacheInRedis = /** @class */ (function (_super) {
|
|
|
47
49
|
};
|
|
48
50
|
UniqueKeysCacheInRedis.prototype.stop = function () {
|
|
49
51
|
clearInterval(this.intervalId);
|
|
52
|
+
return this.postUniqueKeysInRedis();
|
|
50
53
|
};
|
|
51
54
|
return UniqueKeysCacheInRedis;
|
|
52
55
|
}(UniqueKeysCacheInMemory));
|
|
@@ -112,7 +112,6 @@ export function settingsValidation(config, validationParams) {
|
|
|
112
112
|
scheduler.offlineRefreshRate = fromSecondsToMillis(scheduler.offlineRefreshRate);
|
|
113
113
|
scheduler.eventsPushRate = fromSecondsToMillis(scheduler.eventsPushRate);
|
|
114
114
|
scheduler.uniqueKeysRefreshRate = fromSecondsToMillis(scheduler.uniqueKeysRefreshRate);
|
|
115
|
-
scheduler.impressionCountsRefreshRate = fromSecondsToMillis(scheduler.impressionCountsRefreshRate);
|
|
116
115
|
scheduler.telemetryRefreshRate = fromSecondsToMillis(validateMinValue('telemetryRefreshRate', scheduler.telemetryRefreshRate, 60));
|
|
117
116
|
// Default impressionsRefreshRate for DEBUG mode is 60 secs
|
|
118
117
|
if (get(config, 'scheduler.impressionsRefreshRate') === undefined && withDefaults.sync.impressionsMode === DEBUG)
|
package/package.json
CHANGED
package/src/sdkFactory/index.ts
CHANGED
|
@@ -44,9 +44,6 @@ export function sdkFactory(params: ISdkFactoryParams): SplitIO.ICsSDK | SplitIO.
|
|
|
44
44
|
impressionsQueueSize: settings.scheduler.impressionsQueueSize,
|
|
45
45
|
eventsQueueSize: settings.scheduler.eventsQueueSize,
|
|
46
46
|
uniqueKeysCacheSize: settings.scheduler.uniqueKeysCacheSize,
|
|
47
|
-
impressionCountsQueueSize: settings.scheduler.impressionCountsQueueSize,
|
|
48
|
-
impressionCountsRefreshRate: settings.scheduler.impressionCountsRefreshRate,
|
|
49
|
-
uniqueKeysRefreshRate: settings.scheduler.uniqueKeysRefreshRate,
|
|
50
47
|
optimize: shouldBeOptimized(settings),
|
|
51
48
|
|
|
52
49
|
// ATM, only used by InLocalStorage
|
|
@@ -22,8 +22,8 @@ export class ImpressionCountsCacheInRedis extends ImpressionCountsCacheInMemory
|
|
|
22
22
|
|
|
23
23
|
postImpressionCountsInRedis(){
|
|
24
24
|
const counts = this.pop();
|
|
25
|
-
if (!counts) return false;
|
|
26
25
|
const keys = Object.keys(counts);
|
|
26
|
+
if (!keys) return Promise.resolve(false);
|
|
27
27
|
const pipeline = this.redis.pipeline();
|
|
28
28
|
keys.forEach(key => {
|
|
29
29
|
pipeline.hincrby(this.key, key, counts[key]);
|
|
@@ -37,7 +37,7 @@ export class ImpressionCountsCacheInRedis extends ImpressionCountsCacheInMemory
|
|
|
37
37
|
})
|
|
38
38
|
.catch(err => {
|
|
39
39
|
this.log.error(`${LOG_PREFIX}Error in impression counts pipeline: ${err}.`);
|
|
40
|
-
return false;
|
|
40
|
+
return Promise.resolve(false);
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -47,5 +47,6 @@ export class ImpressionCountsCacheInRedis extends ImpressionCountsCacheInMemory
|
|
|
47
47
|
|
|
48
48
|
stop() {
|
|
49
49
|
clearInterval(this.intervalId);
|
|
50
|
+
return this.postImpressionCountsInRedis();
|
|
50
51
|
}
|
|
51
52
|
}
|
|
@@ -24,12 +24,12 @@ export function InRedisStorage(options: InRedisStorageOptions = {}): IStorageAsy
|
|
|
24
24
|
|
|
25
25
|
const prefix = validatePrefix(options.prefix);
|
|
26
26
|
|
|
27
|
-
function InRedisStorageFactory({ log, metadata, onReadyCb, impressionsMode
|
|
27
|
+
function InRedisStorageFactory({ log, metadata, onReadyCb, impressionsMode }: IStorageFactoryParams): IStorageAsync {
|
|
28
28
|
const keys = new KeyBuilderSS(prefix, metadata);
|
|
29
29
|
const redisClient = new RedisAdapter(log, options.options || {});
|
|
30
30
|
const telemetry = new TelemetryCacheInRedis(log, keys, redisClient);
|
|
31
|
-
const impressionCountsCache = impressionsMode !== DEBUG ? new ImpressionCountsCacheInRedis(log, keys.buildImpressionsCountKey(), redisClient
|
|
32
|
-
const uniqueKeysCache = impressionsMode === NONE ? new UniqueKeysCacheInRedis(log, keys.buildUniqueKeysKey(), redisClient
|
|
31
|
+
const impressionCountsCache = impressionsMode !== DEBUG ? new ImpressionCountsCacheInRedis(log, keys.buildImpressionsCountKey(), redisClient) : undefined;
|
|
32
|
+
const uniqueKeysCache = impressionsMode === NONE ? new UniqueKeysCacheInRedis(log, keys.buildUniqueKeysKey(), redisClient) : undefined;
|
|
33
33
|
|
|
34
34
|
// subscription to Redis connect event in order to emit SDK_READY event on consumer mode
|
|
35
35
|
redisClient.on('connect', () => {
|
|
@@ -52,10 +52,11 @@ export function InRedisStorage(options: InRedisStorageOptions = {}): IStorageAsy
|
|
|
52
52
|
|
|
53
53
|
// When using REDIS we should:
|
|
54
54
|
// 1- Disconnect from the storage
|
|
55
|
-
destroy() {
|
|
56
|
-
|
|
57
|
-
if (impressionCountsCache) impressionCountsCache.stop();
|
|
58
|
-
if (uniqueKeysCache) uniqueKeysCache.stop();
|
|
55
|
+
destroy(): Promise<void>{
|
|
56
|
+
let promises = [];
|
|
57
|
+
if (impressionCountsCache) promises.push(impressionCountsCache.stop());
|
|
58
|
+
if (uniqueKeysCache) promises.push(uniqueKeysCache.stop());
|
|
59
|
+
return Promise.all(promises).then(() => { redisClient.disconnect(); });
|
|
59
60
|
// @TODO check that caches works as expected when redisClient is disconnected
|
|
60
61
|
}
|
|
61
62
|
};
|
|
@@ -24,9 +24,9 @@ export class UniqueKeysCacheInRedis extends UniqueKeysCacheInMemory implements I
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
postUniqueKeysInRedis() {
|
|
27
|
-
const pipeline = this.redis.pipeline();
|
|
28
|
-
|
|
29
27
|
const featureNames = Object.keys(this.uniqueKeysTracker);
|
|
28
|
+
if (!featureNames) return Promise.resolve(false);
|
|
29
|
+
const pipeline = this.redis.pipeline();
|
|
30
30
|
for (let i = 0; i < featureNames.length; i++) {
|
|
31
31
|
const featureName = featureNames[i];
|
|
32
32
|
const featureKeys = setToArray(this.uniqueKeysTracker[featureName]);
|
|
@@ -47,7 +47,7 @@ export class UniqueKeysCacheInRedis extends UniqueKeysCacheInMemory implements I
|
|
|
47
47
|
})
|
|
48
48
|
.catch(err => {
|
|
49
49
|
this.log.error(`${LOG_PREFIX}Error in uniqueKeys pipeline: ${err}.`);
|
|
50
|
-
return false;
|
|
50
|
+
return Promise.resolve(false);
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -58,6 +58,7 @@ export class UniqueKeysCacheInRedis extends UniqueKeysCacheInMemory implements I
|
|
|
58
58
|
|
|
59
59
|
stop() {
|
|
60
60
|
clearInterval(this.intervalId);
|
|
61
|
+
return this.postUniqueKeysInRedis();
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
}
|
package/src/storages/types.ts
CHANGED
|
@@ -498,10 +498,7 @@ export type DataLoader = (storage: IStorageSync, matchingKey: string) => void
|
|
|
498
498
|
export interface IStorageFactoryParams {
|
|
499
499
|
log: ILogger,
|
|
500
500
|
impressionsQueueSize?: number,
|
|
501
|
-
|
|
502
|
-
impressionCountsRefreshRate?: number,
|
|
503
|
-
uniqueKeysRefreshRate?: number,
|
|
504
|
-
uniqueKeysCacheSize?: number,
|
|
501
|
+
uniqueKeysCacheSize?: number;
|
|
505
502
|
eventsQueueSize?: number,
|
|
506
503
|
optimize?: boolean /* whether create the `impressionCounts` cache (OPTIMIZED impression mode) or not (DEBUG impression mode) */,
|
|
507
504
|
mode: SDKMode,
|
package/src/types.ts
CHANGED
|
@@ -80,8 +80,6 @@ export interface ISettings {
|
|
|
80
80
|
featuresRefreshRate: number,
|
|
81
81
|
impressionsRefreshRate: number,
|
|
82
82
|
impressionsQueueSize: number,
|
|
83
|
-
impressionCountsRefreshRate: number,
|
|
84
|
-
impressionCountsQueueSize: number,
|
|
85
83
|
uniqueKeysRefreshRate: number,
|
|
86
84
|
uniqueKeysCacheSize: number,
|
|
87
85
|
/**
|
|
@@ -133,7 +133,6 @@ export function settingsValidation(config: unknown, validationParams: ISettingsV
|
|
|
133
133
|
scheduler.offlineRefreshRate = fromSecondsToMillis(scheduler.offlineRefreshRate);
|
|
134
134
|
scheduler.eventsPushRate = fromSecondsToMillis(scheduler.eventsPushRate);
|
|
135
135
|
scheduler.uniqueKeysRefreshRate = fromSecondsToMillis(scheduler.uniqueKeysRefreshRate);
|
|
136
|
-
scheduler.impressionCountsRefreshRate = fromSecondsToMillis(scheduler.impressionCountsRefreshRate);
|
|
137
136
|
scheduler.telemetryRefreshRate = fromSecondsToMillis(validateMinValue('telemetryRefreshRate', scheduler.telemetryRefreshRate, 60));
|
|
138
137
|
|
|
139
138
|
// Default impressionsRefreshRate for DEBUG mode is 60 secs
|
|
@@ -8,7 +8,7 @@ export declare class ImpressionCountsCacheInRedis extends ImpressionCountsCacheI
|
|
|
8
8
|
private readonly refreshRate;
|
|
9
9
|
private intervalId;
|
|
10
10
|
constructor(log: ILogger, key: string, redis: Redis, impressionCountsCacheSize?: number, refreshRate?: number);
|
|
11
|
-
postImpressionCountsInRedis():
|
|
11
|
+
postImpressionCountsInRedis(): Promise<boolean | import("ioredis").BooleanResponse | undefined>;
|
|
12
12
|
start(): void;
|
|
13
|
-
stop():
|
|
13
|
+
stop(): Promise<boolean | import("ioredis").BooleanResponse | undefined>;
|
|
14
14
|
}
|
|
@@ -11,5 +11,5 @@ export declare class UniqueKeysCacheInRedis extends UniqueKeysCacheInMemory impl
|
|
|
11
11
|
constructor(log: ILogger, key: string, redis: Redis, uniqueKeysQueueSize?: number, refreshRate?: number);
|
|
12
12
|
postUniqueKeysInRedis(): Promise<boolean | import("ioredis").BooleanResponse | undefined>;
|
|
13
13
|
start(): void;
|
|
14
|
-
stop():
|
|
14
|
+
stop(): Promise<boolean | import("ioredis").BooleanResponse | undefined>;
|
|
15
15
|
}
|
|
@@ -393,9 +393,6 @@ export declare type DataLoader = (storage: IStorageSync, matchingKey: string) =>
|
|
|
393
393
|
export interface IStorageFactoryParams {
|
|
394
394
|
log: ILogger;
|
|
395
395
|
impressionsQueueSize?: number;
|
|
396
|
-
impressionCountsQueueSize?: number;
|
|
397
|
-
impressionCountsRefreshRate?: number;
|
|
398
|
-
uniqueKeysRefreshRate?: number;
|
|
399
396
|
uniqueKeysCacheSize?: number;
|
|
400
397
|
eventsQueueSize?: number;
|
|
401
398
|
optimize?: boolean;
|
package/types/types.d.ts
CHANGED
|
@@ -74,8 +74,6 @@ export interface ISettings {
|
|
|
74
74
|
featuresRefreshRate: number;
|
|
75
75
|
impressionsRefreshRate: number;
|
|
76
76
|
impressionsQueueSize: number;
|
|
77
|
-
impressionCountsRefreshRate: number;
|
|
78
|
-
impressionCountsQueueSize: number;
|
|
79
77
|
uniqueKeysRefreshRate: number;
|
|
80
78
|
uniqueKeysCacheSize: number;
|
|
81
79
|
/**
|