133 lines
3.4 KiB
JavaScript
133 lines
3.4 KiB
JavaScript
"use strict";
|
|
|
|
var RetryManager = /*#__PURE__*/function () {
|
|
function RetryManager() {
|
|
this.maxAttempts_ = 1;
|
|
this.delayFactor_ = 0.1;
|
|
this.fuzzFactor_ = 0.1;
|
|
this.initialDelay_ = 1000;
|
|
this.enabled_ = false;
|
|
}
|
|
|
|
var _proto = RetryManager.prototype;
|
|
|
|
_proto.getIsEnabled = function getIsEnabled() {
|
|
return this.enabled_;
|
|
};
|
|
|
|
_proto.enable = function enable() {
|
|
this.enabled_ = true;
|
|
};
|
|
|
|
_proto.disable = function disable() {
|
|
this.enabled_ = false;
|
|
};
|
|
|
|
_proto.reset = function reset() {
|
|
this.maxAttempts_ = 1;
|
|
this.delayFactor_ = 0.1;
|
|
this.fuzzFactor_ = 0.1;
|
|
this.initialDelay_ = 1000;
|
|
this.enabled_ = false;
|
|
};
|
|
|
|
_proto.getMaxAttempts = function getMaxAttempts() {
|
|
return this.maxAttempts_;
|
|
};
|
|
|
|
_proto.setMaxAttempts = function setMaxAttempts(maxAttempts) {
|
|
this.maxAttempts_ = maxAttempts;
|
|
};
|
|
|
|
_proto.getDelayFactor = function getDelayFactor() {
|
|
return this.delayFactor_;
|
|
};
|
|
|
|
_proto.setDelayFactor = function setDelayFactor(delayFactor) {
|
|
this.delayFactor_ = delayFactor;
|
|
};
|
|
|
|
_proto.getFuzzFactor = function getFuzzFactor() {
|
|
return this.fuzzFactor_;
|
|
};
|
|
|
|
_proto.setFuzzFactor = function setFuzzFactor(fuzzFactor) {
|
|
this.fuzzFactor_ = fuzzFactor;
|
|
};
|
|
|
|
_proto.getInitialDelay = function getInitialDelay() {
|
|
return this.initialDelay_;
|
|
};
|
|
|
|
_proto.setInitialDelay = function setInitialDelay(initialDelay) {
|
|
this.initialDelay_ = initialDelay;
|
|
};
|
|
|
|
_proto.createRetry = function createRetry(_temp) {
|
|
var _ref = _temp === void 0 ? {} : _temp,
|
|
maxAttempts = _ref.maxAttempts,
|
|
delayFactor = _ref.delayFactor,
|
|
fuzzFactor = _ref.fuzzFactor,
|
|
initialDelay = _ref.initialDelay;
|
|
|
|
return new Retry({
|
|
maxAttempts: maxAttempts || this.maxAttempts_,
|
|
delayFactor: delayFactor || this.delayFactor_,
|
|
fuzzFactor: fuzzFactor || this.fuzzFactor_,
|
|
initialDelay: initialDelay || this.initialDelay_
|
|
});
|
|
};
|
|
|
|
return RetryManager;
|
|
}();
|
|
|
|
var Retry = /*#__PURE__*/function () {
|
|
function Retry(options) {
|
|
this.maxAttempts_ = options.maxAttempts;
|
|
this.delayFactor_ = options.delayFactor;
|
|
this.fuzzFactor_ = options.fuzzFactor;
|
|
this.currentDelay_ = options.initialDelay;
|
|
this.currentAttempt_ = 1;
|
|
}
|
|
|
|
var _proto2 = Retry.prototype;
|
|
|
|
_proto2.moveToNextAttempt = function moveToNextAttempt() {
|
|
this.currentAttempt_++;
|
|
var delayDelta = this.currentDelay_ * this.delayFactor_;
|
|
this.currentDelay_ = this.currentDelay_ + delayDelta;
|
|
};
|
|
|
|
_proto2.shouldRetry = function shouldRetry() {
|
|
return this.currentAttempt_ < this.maxAttempts_;
|
|
};
|
|
|
|
_proto2.getCurrentDelay = function getCurrentDelay() {
|
|
return this.currentDelay_;
|
|
};
|
|
|
|
_proto2.getCurrentMinPossibleDelay = function getCurrentMinPossibleDelay() {
|
|
return (1 - this.fuzzFactor_) * this.currentDelay_;
|
|
};
|
|
|
|
_proto2.getCurrentMaxPossibleDelay = function getCurrentMaxPossibleDelay() {
|
|
return (1 + this.fuzzFactor_) * this.currentDelay_;
|
|
}
|
|
/**
|
|
* For example fuzzFactor is 0.1
|
|
* This means ±10% deviation
|
|
* So if we have delay as 1000
|
|
* This function can generate any value from 900 to 1100
|
|
*/
|
|
;
|
|
|
|
_proto2.getCurrentFuzzedDelay = function getCurrentFuzzedDelay() {
|
|
var lowValue = this.getCurrentMinPossibleDelay();
|
|
var highValue = this.getCurrentMaxPossibleDelay();
|
|
return lowValue + Math.random() * (highValue - lowValue);
|
|
};
|
|
|
|
return Retry;
|
|
}();
|
|
|
|
module.exports = RetryManager; |