UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

121 lines (120 loc) 13.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.getRequestThrottle = getRequestThrottle; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _utils = require("@kepler.gl/utils"); // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project var RequestThrottle = /*#__PURE__*/function () { function RequestThrottle() { (0, _classCallCheck2["default"])(this, RequestThrottle); (0, _defineProperty2["default"])(this, "serverQueues", void 0); (0, _defineProperty2["default"])(this, "maxConcurrentRequests", void 0); this.serverQueues = {}; this.maxConcurrentRequests = (0, _utils.getApplicationConfig)().rasterServerMaxPerServerRequests; } return (0, _createClass2["default"])(RequestThrottle, [{ key: "getServerQueue", value: function getServerQueue(serverKey) { if (!this.serverQueues[serverKey]) { this.serverQueues[serverKey] = { activeRequests: 0, queue: [] }; } return this.serverQueues[serverKey]; } }, { key: "getDebugInfo", value: function getDebugInfo() { var stats = Object.entries(this.serverQueues).map(function (_ref) { var _ref2 = (0, _slicedToArray2["default"])(_ref, 2), serverKey = _ref2[0], queue = _ref2[1]; return "Server: ".concat(serverKey, "\n Active Requests: ").concat(queue.activeRequests, "\n Queued Requests: ").concat(queue.queue.length); }); return stats.length > 0 ? "Request Throttle Stats:\n".concat(stats.join('\n')) : 'No active server queues'; } }, { key: "throttleRequest", value: function () { var _throttleRequest = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(serverKey, requestFunction, maxConcurrentRequestsOverride) { var serverQueue, maxConcurrentRequests, nextRequest; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: serverQueue = this.getServerQueue(serverKey); maxConcurrentRequests = typeof maxConcurrentRequestsOverride === 'number' ? maxConcurrentRequestsOverride : this.maxConcurrentRequests; if (!(serverQueue.activeRequests >= maxConcurrentRequests && Boolean(maxConcurrentRequests))) { _context2.next = 5; break; } _context2.next = 5; return new Promise(function (resolve) { serverQueue.queue.push( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var result; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: _context.prev = 0; _context.next = 3; return requestFunction(); case 3: result = _context.sent; resolve(); return _context.abrupt("return", result); case 8: _context.prev = 8; _context.t0 = _context["catch"](0); resolve(); return _context.abrupt("return", null); case 12: case "end": return _context.stop(); } }, _callee, null, [[0, 8]]); }))); }); case 5: serverQueue.activeRequests++; _context2.prev = 6; _context2.next = 9; return requestFunction(); case 9: return _context2.abrupt("return", _context2.sent); case 10: _context2.prev = 10; serverQueue.activeRequests--; // Process next request in queue if any nextRequest = serverQueue.queue.shift(); if (nextRequest) { nextRequest(); } return _context2.finish(10); case 15: case "end": return _context2.stop(); } }, _callee2, this, [[6,, 10, 15]]); })); function throttleRequest(_x, _x2, _x3) { return _throttleRequest.apply(this, arguments); } return throttleRequest; }() }]); }(); // Create a singleton instance var requestThrottle = null; function getRequestThrottle() { if (!requestThrottle) requestThrottle = new RequestThrottle(); return requestThrottle; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbHMiLCJyZXF1aXJlIiwiUmVxdWVzdFRocm90dGxlIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJzZXJ2ZXJRdWV1ZXMiLCJtYXhDb25jdXJyZW50UmVxdWVzdHMiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInJhc3RlclNlcnZlck1heFBlclNlcnZlclJlcXVlc3RzIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwiZ2V0U2VydmVyUXVldWUiLCJzZXJ2ZXJLZXkiLCJhY3RpdmVSZXF1ZXN0cyIsInF1ZXVlIiwiZ2V0RGVidWdJbmZvIiwic3RhdHMiLCJPYmplY3QiLCJlbnRyaWVzIiwibWFwIiwiX3JlZiIsIl9yZWYyIiwiX3NsaWNlZFRvQXJyYXkyIiwiY29uY2F0IiwibGVuZ3RoIiwiam9pbiIsIl90aHJvdHRsZVJlcXVlc3QiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJyZXF1ZXN0RnVuY3Rpb24iLCJtYXhDb25jdXJyZW50UmVxdWVzdHNPdmVycmlkZSIsInNlcnZlclF1ZXVlIiwibmV4dFJlcXVlc3QiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwicHJldiIsIm5leHQiLCJCb29sZWFuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJwdXNoIiwiX2NhbGxlZSIsInJlc3VsdCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJzZW50IiwiYWJydXB0IiwidDAiLCJzdG9wIiwic2hpZnQiLCJmaW5pc2giLCJ0aHJvdHRsZVJlcXVlc3QiLCJfeCIsIl94MiIsIl94MyIsImFwcGx5IiwiYXJndW1lbnRzIiwicmVxdWVzdFRocm90dGxlIiwiZ2V0UmVxdWVzdFRocm90dGxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jhc3Rlci10aWxlL3JlcXVlc3QtdGhyb3R0bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtnZXRBcHBsaWNhdGlvbkNvbmZpZ30gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmludGVyZmFjZSBSZXF1ZXN0UXVldWUge1xuICBhY3RpdmVSZXF1ZXN0czogbnVtYmVyO1xuICBxdWV1ZTogQXJyYXk8KCkgPT4gUHJvbWlzZTxhbnk+Pjtcbn1cblxuY2xhc3MgUmVxdWVzdFRocm90dGxlIHtcbiAgcHJpdmF0ZSBzZXJ2ZXJRdWV1ZXM6IFJlY29yZDxzdHJpbmcsIFJlcXVlc3RRdWV1ZT47XG4gIHByaXZhdGUgbWF4Q29uY3VycmVudFJlcXVlc3RzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXJ2ZXJRdWV1ZXMgPSB7fTtcbiAgICB0aGlzLm1heENvbmN1cnJlbnRSZXF1ZXN0cyA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkucmFzdGVyU2VydmVyTWF4UGVyU2VydmVyUmVxdWVzdHM7XG4gIH1cblxuICBwcml2YXRlIGdldFNlcnZlclF1ZXVlKHNlcnZlcktleTogc3RyaW5nKTogUmVxdWVzdFF1ZXVlIHtcbiAgICBpZiAoIXRoaXMuc2VydmVyUXVldWVzW3NlcnZlcktleV0pIHtcbiAgICAgIHRoaXMuc2VydmVyUXVldWVzW3NlcnZlcktleV0gPSB7XG4gICAgICAgIGFjdGl2ZVJlcXVlc3RzOiAwLFxuICAgICAgICBxdWV1ZTogW11cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlcnZlclF1ZXVlc1tzZXJ2ZXJLZXldO1xuICB9XG5cbiAgZ2V0RGVidWdJbmZvKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhdHMgPSBPYmplY3QuZW50cmllcyh0aGlzLnNlcnZlclF1ZXVlcykubWFwKChbc2VydmVyS2V5LCBxdWV1ZV0pID0+IHtcbiAgICAgIHJldHVybiBgU2VydmVyOiAke3NlcnZlcktleX1cbiAgQWN0aXZlIFJlcXVlc3RzOiAke3F1ZXVlLmFjdGl2ZVJlcXVlc3RzfVxuICBRdWV1ZWQgUmVxdWVzdHM6ICR7cXVldWUucXVldWUubGVuZ3RofWA7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RhdHMubGVuZ3RoID4gMFxuICAgICAgPyBgUmVxdWVzdCBUaHJvdHRsZSBTdGF0czpcXG4ke3N0YXRzLmpvaW4oJ1xcbicpfWBcbiAgICAgIDogJ05vIGFjdGl2ZSBzZXJ2ZXIgcXVldWVzJztcbiAgfVxuXG4gIGFzeW5jIHRocm90dGxlUmVxdWVzdDxUPihcbiAgICBzZXJ2ZXJLZXk6IHN0cmluZyxcbiAgICByZXF1ZXN0RnVuY3Rpb246ICgpID0+IFByb21pc2U8VD4sXG4gICAgbWF4Q29uY3VycmVudFJlcXVlc3RzT3ZlcnJpZGU/OiBudW1iZXJcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3Qgc2VydmVyUXVldWUgPSB0aGlzLmdldFNlcnZlclF1ZXVlKHNlcnZlcktleSk7XG4gICAgY29uc3QgbWF4Q29uY3VycmVudFJlcXVlc3RzID1cbiAgICAgIHR5cGVvZiBtYXhDb25jdXJyZW50UmVxdWVzdHNPdmVycmlkZSA9PT0gJ251bWJlcidcbiAgICAgICAgPyBtYXhDb25jdXJyZW50UmVxdWVzdHNPdmVycmlkZVxuICAgICAgICA6IHRoaXMubWF4Q29uY3VycmVudFJlcXVlc3RzO1xuXG4gICAgaWYgKHNlcnZlclF1ZXVlLmFjdGl2ZVJlcXVlc3RzID49IG1heENvbmN1cnJlbnRSZXF1ZXN0cyAmJiBCb29sZWFuKG1heENvbmN1cnJlbnRSZXF1ZXN0cykpIHtcbiAgICAgIC8vIFdhaXQgZm9yIGEgc2xvdCB0byBiZWNvbWUgYXZhaWxhYmxlXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgc2VydmVyUXVldWUucXVldWUucHVzaChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcXVlc3RGdW5jdGlvbigpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHNlcnZlclF1ZXVlLmFjdGl2ZVJlcXVlc3RzKys7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCByZXF1ZXN0RnVuY3Rpb24oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2VydmVyUXVldWUuYWN0aXZlUmVxdWVzdHMtLTtcbiAgICAgIC8vIFByb2Nlc3MgbmV4dCByZXF1ZXN0IGluIHF1ZXVlIGlmIGFueVxuICAgICAgY29uc3QgbmV4dFJlcXVlc3QgPSBzZXJ2ZXJRdWV1ZS5xdWV1ZS5zaGlmdCgpO1xuICAgICAgaWYgKG5leHRSZXF1ZXN0KSB7XG4gICAgICAgIG5leHRSZXF1ZXN0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIENyZWF0ZSBhIHNpbmdsZXRvbiBpbnN0YW5jZVxubGV0IHJlcXVlc3RUaHJvdHRsZTogUmVxdWVzdFRocm90dGxlIHwgbnVsbCA9IG51bGw7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXF1ZXN0VGhyb3R0bGUoKTogUmVxdWVzdFRocm90dGxlIHtcbiAgaWYgKCFyZXF1ZXN0VGhyb3R0bGUpIHJlcXVlc3RUaHJvdHRsZSA9IG5ldyBSZXF1ZXN0VGhyb3R0bGUoKTtcbiAgcmV0dXJuIHJlcXVlc3RUaHJvdHRsZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUhBO0FBQ0E7QUFBQSxJQVNNQyxlQUFlO0VBSW5CLFNBQUFBLGdCQUFBLEVBQWM7SUFBQSxJQUFBQyxnQkFBQSxtQkFBQUQsZUFBQTtJQUFBLElBQUFFLGdCQUFBO0lBQUEsSUFBQUEs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