@tableau/taco-toolkit
Version:
Tableau Connector Toolkit
158 lines • 14.4 kB
JavaScript
;
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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