@amplience/dc-cli
Version:
Dynamic Content CLI Tool
47 lines (46 loc) • 1.79 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BurstableQueue = exports.RESERVOIR_INCREASE_INTERVAL = exports.RESERVOIR_REFRESH_AMOUNT = exports.INITIAL_RESERVOIR = exports.MIN_TIME = exports.CONCURRENCY = void 0;
const bottleneck_1 = __importDefault(require("bottleneck"));
exports.CONCURRENCY = 4;
exports.MIN_TIME = 800;
exports.INITIAL_RESERVOIR = 70;
exports.RESERVOIR_REFRESH_AMOUNT = 30;
exports.RESERVOIR_INCREASE_INTERVAL = 60000;
class BurstableQueue {
constructor(options) {
var _a;
this.queue = new bottleneck_1.default({
maxConcurrent: options.concurrency || exports.CONCURRENCY,
minTime: (_a = options.minTime) !== null && _a !== void 0 ? _a : exports.MIN_TIME,
reservoir: options.burstIntervalCap || exports.INITIAL_RESERVOIR,
reservoirRefreshAmount: options.sustainedIntervalCap || exports.RESERVOIR_REFRESH_AMOUNT,
reservoirRefreshInterval: options.interval || exports.RESERVOIR_INCREASE_INTERVAL
});
}
size() {
const { RECEIVED, QUEUED, RUNNING, EXECUTING } = this.queue.counts();
return RECEIVED + QUEUED + RUNNING + EXECUTING;
}
pending() {
const { RECEIVED, QUEUED } = this.queue.counts();
return RECEIVED + QUEUED;
}
async onIdle() {
if (this.size() === 0) {
return;
}
return new Promise(resolve => {
this.queue.on('idle', () => {
resolve();
});
});
}
async add(fn) {
return this.queue.schedule(fn);
}
}
exports.BurstableQueue = BurstableQueue;