agilite-core
Version:
A NodeJS module that provides reusable backend functionality to the Agilit-e environment
89 lines • 3.27 kB
JavaScript
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
;