kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
120 lines (119 loc) • 13.3 kB
JavaScript
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) {
var serverQueue, nextRequest;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
serverQueue = this.getServerQueue(serverKey);
if (!(serverQueue.activeRequests >= this.maxConcurrentRequests && Boolean(this.maxConcurrentRequests))) {
_context2.next = 4;
break;
}
_context2.next = 4;
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 4:
serverQueue.activeRequests++;
_context2.prev = 5;
_context2.next = 8;
return requestFunction();
case 8:
return _context2.abrupt("return", _context2.sent);
case 9:
_context2.prev = 9;
serverQueue.activeRequests--;
// Process next request in queue if any
nextRequest = serverQueue.queue.shift();
if (nextRequest) {
nextRequest();
}
return _context2.finish(9);
case 14:
case "end":
return _context2.stop();
}
}, _callee2, this, [[5,, 9, 14]]);
}));
function throttleRequest(_x, _x2) {
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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbHMiLCJyZXF1aXJlIiwiUmVxdWVzdFRocm90dGxlIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJzZXJ2ZXJRdWV1ZXMiLCJtYXhDb25jdXJyZW50UmVxdWVzdHMiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInJhc3RlclNlcnZlck1heFBlclNlcnZlclJlcXVlc3RzIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwiZ2V0U2VydmVyUXVldWUiLCJzZXJ2ZXJLZXkiLCJhY3RpdmVSZXF1ZXN0cyIsInF1ZXVlIiwiZ2V0RGVidWdJbmZvIiwic3RhdHMiLCJPYmplY3QiLCJlbnRyaWVzIiwibWFwIiwiX3JlZiIsIl9yZWYyIiwiX3NsaWNlZFRvQXJyYXkyIiwiY29uY2F0IiwibGVuZ3RoIiwiam9pbiIsIl90aHJvdHRsZVJlcXVlc3QiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJyZXF1ZXN0RnVuY3Rpb24iLCJzZXJ2ZXJRdWV1ZSIsIm5leHRSZXF1ZXN0Iiwid3JhcCIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsInByZXYiLCJuZXh0IiwiQm9vbGVhbiIsIlByb21pc2UiLCJyZXNvbHZlIiwicHVzaCIsIl9jYWxsZWUiLCJyZXN1bHQiLCJfY2FsbGVlJCIsIl9jb250ZXh0Iiwic2VudCIsImFicnVwdCIsInQwIiwic3RvcCIsInNoaWZ0IiwiZmluaXNoIiwidGhyb3R0bGVSZXF1ZXN0IiwiX3giLCJfeDIiLCJhcHBseSIsImFyZ3VtZW50cyIsInJlcXVlc3RUaHJvdHRsZSIsImdldFJlcXVlc3RUaHJvdHRsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yYXN0ZXItdGlsZS9yZXF1ZXN0LXRocm90dGxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7Z2V0QXBwbGljYXRpb25Db25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbnRlcmZhY2UgUmVxdWVzdFF1ZXVlIHtcbiAgYWN0aXZlUmVxdWVzdHM6IG51bWJlcjtcbiAgcXVldWU6IEFycmF5PCgpID0+IFByb21pc2U8YW55Pj47XG59XG5cbmNsYXNzIFJlcXVlc3RUaHJvdHRsZSB7XG4gIHByaXZhdGUgc2VydmVyUXVldWVzOiBSZWNvcmQ8c3RyaW5nLCBSZXF1ZXN0UXVldWU+O1xuICBwcml2YXRlIG1heENvbmN1cnJlbnRSZXF1ZXN0czogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2VydmVyUXVldWVzID0ge307XG4gICAgdGhpcy5tYXhDb25jdXJyZW50UmVxdWVzdHMgPSBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLnJhc3RlclNlcnZlck1heFBlclNlcnZlclJlcXVlc3RzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZXJ2ZXJRdWV1ZShzZXJ2ZXJLZXk6IHN0cmluZyk6IFJlcXVlc3RRdWV1ZSB7XG4gICAgaWYgKCF0aGlzLnNlcnZlclF1ZXVlc1tzZXJ2ZXJLZXldKSB7XG4gICAgICB0aGlzLnNlcnZlclF1ZXVlc1tzZXJ2ZXJLZXldID0ge1xuICAgICAgICBhY3RpdmVSZXF1ZXN0czogMCxcbiAgICAgICAgcXVldWU6IFtdXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXJ2ZXJRdWV1ZXNbc2VydmVyS2V5XTtcbiAgfVxuXG4gIGdldERlYnVnSW5mbygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0YXRzID0gT2JqZWN0LmVudHJpZXModGhpcy5zZXJ2ZXJRdWV1ZXMpLm1hcCgoW3NlcnZlcktleSwgcXVldWVdKSA9PiB7XG4gICAgICByZXR1cm4gYFNlcnZlcjogJHtzZXJ2ZXJLZXl9XG4gIEFjdGl2ZSBSZXF1ZXN0czogJHtxdWV1ZS5hY3RpdmVSZXF1ZXN0c31cbiAgUXVldWVkIFJlcXVlc3RzOiAke3F1ZXVlLnF1ZXVlLmxlbmd0aH1gO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0YXRzLmxlbmd0aCA+IDBcbiAgICAgID8gYFJlcXVlc3QgVGhyb3R0bGUgU3RhdHM6XFxuJHtzdGF0cy5qb2luKCdcXG4nKX1gXG4gICAgICA6ICdObyBhY3RpdmUgc2VydmVyIHF1ZXVlcyc7XG4gIH1cblxuICBhc3luYyB0aHJvdHRsZVJlcXVlc3Q8VD4oc2VydmVyS2V5OiBzdHJpbmcsIHJlcXVlc3RGdW5jdGlvbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHNlcnZlclF1ZXVlID0gdGhpcy5nZXRTZXJ2ZXJRdWV1ZShzZXJ2ZXJLZXkpO1xuXG4gICAgaWYgKFxuICAgICAgc2VydmVyUXVldWUuYWN0aXZlUmVxdWVzdHMgPj0gdGhpcy5tYXhDb25jdXJyZW50UmVxdWVzdHMgJiZcbiAgICAgIEJvb2xlYW4odGhpcy5tYXhDb25jdXJyZW50UmVxdWVzdHMpXG4gICAgKSB7XG4gICAgICAvLyBXYWl0IGZvciBhIHNsb3QgdG8gYmVjb21lIGF2YWlsYWJsZVxuICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgIHNlcnZlclF1ZXVlLnF1ZXVlLnB1c2goYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXF1ZXN0RnVuY3Rpb24oKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXJ2ZXJRdWV1ZS5hY3RpdmVSZXF1ZXN0cysrO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVxdWVzdEZ1bmN0aW9uKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNlcnZlclF1ZXVlLmFjdGl2ZVJlcXVlc3RzLS07XG4gICAgICAvLyBQcm9jZXNzIG5leHQgcmVxdWVzdCBpbiBxdWV1ZSBpZiBhbnlcbiAgICAgIGNvbnN0IG5leHRSZXF1ZXN0ID0gc2VydmVyUXVldWUucXVldWUuc2hpZnQoKTtcbiAgICAgIGlmIChuZXh0UmVxdWVzdCkge1xuICAgICAgICBuZXh0UmVxdWVzdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBDcmVhdGUgYSBzaW5nbGV0b24gaW5zdGFuY2VcbmxldCByZXF1ZXN0VGhyb3R0bGU6IFJlcXVlc3RUaHJvdHRsZSB8IG51bGwgPSBudWxsO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVxdWVzdFRocm90dGxlKCk6IFJlcXVlc3RUaHJvdHRsZSB7XG4gIGlmICghcmVxdWVzdFRocm90dGxlKSByZXF1ZXN0VGhyb3R0bGUgPSBuZXcgUmVxdWVzdFRocm90dGxlKCk7XG4gIHJldHVybiByZXF1ZXN0VGhyb3R0bGU7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFIQTtBQUNBO0FBQUEsSUFTTUMsZUFBZTtFQUluQixTQUFBQSxnQkFBQSxFQUFjO0lBQUEsSUFBQUMsZ0JBQUEsbUJBQUFELGVBQUE7SUFBQSxJQUFBRSxnQkFBQTtJQUFBLElBQUFBLGdCQUFBO0lBQ1osSUFBSSxDQUFDQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLElBQUksQ0FBQ0MscUJBQXFCLEdBQUcsSUFBQUMsMkJBQW9CLEVBQUMsQ0FBQyxDQUFDQyxnQ0FBZ0M7RUFDdEY7RUFBQyxXQUFBQyxhQUFBLGFBQUFQLGVBQUE7SUFBQVEsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBUUMsY0FBY0EsQ0FBQ0MsU0FBaUIsRUFBZ0I7TUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQ1IsWUFBWSxDQUFDUSxTQUFT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
;