UNPKG

@amplience/dc-cli

Version:
47 lines (46 loc) 1.79 kB
"use strict"; 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;