UNPKG

agilite-core

Version:

A NodeJS module that provides reusable backend functionality to the Agilit-e environment

89 lines 3.27 kB
'use strict'; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const async_1 = __importDefault(require("async")); const service_pool_1 = __importDefault(require("service-pool")); let pool = null; let tempPool = {}; // Create Queue Manager for Service Pool const queue = async_1.default.queue((params, callback) => { _getExtended(params, callback); }); queue.drain(() => { }); // NATIVE FUNTIONS const get = (params) => { // console.log('--START: Service Pool Manager - Running Get') if (!pool) { pool = new service_pool_1.default(params.servicePoolConfig); } return new Promise((resolve, reject) => { const service = pool.get(params.id); if (service) { delete tempPool[params.id]; // console.log('Pool Entry exists for - ' + params.id) resolve(service); } else { // console.log('Queuing request to create new Service Pool for - ' + params.id) queue.push(params, (err, service2) => { if (err) { reject(err); } else { resolve(service2); } }); } }); }; const reset = () => { pool.reset(); tempPool = {}; }; const destroy = (id) => { if (pool) { pool.destroy(id); } delete tempPool[id]; }; // PRIVATE FUNTIONS const _getExtended = (params, callback) => __awaiter(void 0, void 0, void 0, function* () { let service = pool.get(params.id); if (service) { delete tempPool[params.id]; // console.log('Pool Entry exists for - ' + params.id) callback(null, service); } else { // console.log('Pool Entry doesn\'t exist for - ' + params.id + '. Checking if we are allowed to create one') if (tempPool[params.id]) { // console.log('Someone else is trying to create the same request. Wait and try again for - ' + params.id) setTimeout(() => { _getExtended(params, callback); }, 10); } else { // console.log('No one\'s creating request. We can create for - ' + params.id) tempPool[params.id] = true; service = yield pool.add(params.servicePoolObject); callback(null, service); } } }); exports.default = { get, reset, destroy }; //# sourceMappingURL=service-pool-manager.js.map