UNPKG

@tableau/taco-toolkit

Version:
158 lines 14.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ConnectionManager = void 0; var os_1 = require("os"); var eps_logger_1 = require("../../logging/eps-logger"); var ConnectionResource = /** @class */ (function () { function ConnectionResource() { this.browserProcess = null; this.extractorProcesses = []; this.extractorIdToPid = {}; this.isSubmitted = false; } return ConnectionResource; }()); /** Cache of resources and settings used for connections keyed by connection id. */ var ConnectionManager = /** @class */ (function () { function ConnectionManager(processManager, tempDataManager) { this.processManager = processManager; this.tempDataManager = tempDataManager; /** Resources by connectionId */ this.resourceMap = new Map(); } // TODO: this could potentially create bunch of unneeded resources to the map... // The caller must do the diligent to validate before calling this. ConnectionManager.prototype.getOrAddResources = function (connectionId) { var resource = this.resourceMap.get(connectionId); if (!resource) { resource = new ConnectionResource(); this.resourceMap.set(connectionId, resource); } return resource; }; ConnectionManager.prototype.setBrowserProcess = function (connectionId, procOrCloseFunc) { var resources = this.getOrAddResources(connectionId); resources.browserProcess = procOrCloseFunc; }; ConnectionManager.prototype.addExtractorProcess = function (connectionId, proc, extractorId) { if (proc.pid === undefined) { eps_logger_1.Logger.warn("Extractor process was not started properly. ConnectionId: ".concat(connectionId, ", ExtactorId: ").concat(extractorId)); return; } var _a = this.getOrAddResources(connectionId), extractorProcesses = _a.extractorProcesses, extractorIdToPid = _a.extractorIdToPid; if (extractorProcesses.length > 0) { eps_logger_1.Logger.warn("ConnectionId '".concat(connectionId, "' already has an extractorId '").concat(Object.keys(extractorIdToPid), "'. Adding a new extractorId '").concat(extractorId, "'. The connection may not be in a healthy state.")); } extractorProcesses.push(proc); extractorIdToPid[extractorId] = proc.pid; }; ConnectionManager.prototype.hasActiveConnection = function (connectionId) { var resource = this.resourceMap.get(connectionId); if (resource === undefined) { return false; } return resource.extractorProcesses.length > 0; }; ConnectionManager.prototype.hasConnection = function (connectionId) { return this.resourceMap.has(connectionId); }; /** Frees all resources allocated for this connection. */ ConnectionManager.prototype.free = function (connectionId) { var resources = this.resourceMap.get(connectionId); if (!resources) { return; } if (resources.browserProcess) { this.freeBrowser(connectionId); } this.freeExtractors(connectionId); this.resourceMap.delete(connectionId); }; /** Frees browser resources (process) allocated for this connection. */ ConnectionManager.prototype.freeBrowser = function (connectionId) { var resources = this.resourceMap.get(connectionId); if (!resources || !resources.browserProcess) { return; } if (typeof resources.browserProcess === 'function') { resources.browserProcess(); } else { resources.browserProcess.kill(os_1.constants.signals.SIGINT); // use SIGINT to interrupt/cancel } resources.browserProcess = null; }; /** * @param extractorIds Kills and deregister the specified extractor processes. If omitted, it will remove all extractors. * @returns Array of the extractor IDs that are terminated. */ ConnectionManager.prototype.freeExtractors = function (connectionId, extractorIds) { var _this = this; var resource = this.resourceMap.get(connectionId); if (resource === undefined) { eps_logger_1.Logger.warn("The connectionID ".concat(connectionId, " couldn't be found.")); return []; } var freedExtractorIds = []; var processesIds; if (extractorIds === undefined) { eps_logger_1.Logger.info("Terminating all extractor processes for connectionId ".concat(connectionId)); processesIds = resource.extractorProcesses .map(function (p) { return p.pid; }) .filter(function (pid) { return typeof pid === 'number'; }); } else { eps_logger_1.Logger.info("About to terminate extractor processes with IDs ".concat(extractorIds, " for connectionId ").concat(connectionId)); processesIds = Object.keys(resource.extractorIdToPid) .filter(function (eid) { return extractorIds.includes(eid); }) .map(function (eid) { return resource.extractorIdToPid[eid]; }); } processesIds.forEach(function (pid) { _this.processManager.stopChildProcess(pid); resource.extractorProcesses = resource.extractorProcesses.filter(function (p) { return p.pid !== pid; }); var extractorId = Object.keys(resource.extractorIdToPid).find(function (eid) { return resource.extractorIdToPid[eid] === pid; }); if (extractorId !== undefined) { delete resource.extractorIdToPid[extractorId]; freedExtractorIds.push(extractorId); } }); // Clean up Extractor Temporary Data Directory freedExtractorIds.forEach(function (id) { _this.tempDataManager.deleteExtractorTempDataDir(id); }); return freedExtractorIds; }; /** Gets if the connection has been submitted, that is, the interactive phase has completed with submit. */ ConnectionManager.prototype.isSubmitted = function (connectionId) { var resource = this.resourceMap.get(connectionId); if (!resource) { return false; } return resource.isSubmitted; }; /** Sets if the connection has been submitted, that is, the interactive phase has completed with submit. */ ConnectionManager.prototype.setIsSubmitted = function (connectorId, isSubmitted) { var resources = this.getOrAddResources(connectorId); resources.isSubmitted = isSubmitted; }; /** Gets the distinct, unique connector name used by this connection id. */ ConnectionManager.prototype.distinctConnectorName = function (connectionId) { var resource = this.resourceMap.get(connectionId); return resource === null || resource === void 0 ? void 0 : resource.distinctConnectorName; }; ConnectionManager.prototype.tacoPath = function (connectionId) { var resource = this.resourceMap.get(connectionId); return resource === null || resource === void 0 ? void 0 : resource.tacoPath; }; /** Sets the distinct, unique connector name used by this connection id. */ ConnectionManager.prototype.setDistinctConnectorNameAndPath = function (connectionId, distinctConnectorName, tacoPath) { var resources = this.getOrAddResources(connectionId); resources.distinctConnectorName = distinctConnectorName; resources.tacoPath = tacoPath; }; return ConnectionManager; }()); exports.ConnectionManager = ConnectionManager; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2Vwcy9tYWluL2NvbXBvbmVudHMvY29ubmVjdGlvbi1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHlCQUE4QjtBQUM5Qix1REFBaUQ7QUFJakQ7SUFBQTtRQUNFLG1CQUFjLEdBQXVDLElBQUksQ0FBQTtRQUV6RCx1QkFBa0IsR0FBbUIsRUFBRSxDQUFBO1FBQ3ZDLHFCQUFnQixHQUEyQixFQUFFLENBQUE7UUFDN0MsZ0JBQVcsR0FBRyxLQUFLLENBQUE7SUFFckIsQ0FBQztJQUFELHlCQUFDO0FBQUQsQ0FBQyxBQVBELElBT0M7QUFFRCxtRkFBbUY7QUFDbkY7SUFJRSwyQkFBb0IsY0FBaUMsRUFBVSxlQUFnQztRQUEzRSxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFBVSxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFIL0YsZ0NBQWdDO1FBQ3hCLGdCQUFXLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUE7SUFFdUMsQ0FBQztJQUVuRyxnRkFBZ0Y7SUFDaEYsbUVBQW1FO0lBQzNELDZDQUFpQixHQUF6QixVQUEwQixZQUFvQjtRQUM1QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUNqRCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsUUFBUSxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQTtZQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUE7U0FDN0M7UUFDRCxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0lBRUQsNkNBQWlCLEdBQWpCLFVBQWtCLFlBQW9CLEVBQUUsZUFBNEM7UUFDbEYsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3RE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