@tableau/taco-toolkit
Version:
Tableau Connector Toolkit
206 lines • 16.7 kB
JavaScript
"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 __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var node_events_1 = __importDefault(require("node:events"));
var node_path_1 = __importDefault(require("node:path"));
var node_fs_1 = __importDefault(require("node:fs"));
var eps_logger_1 = require("../../logging/eps-logger");
var eps_process_types_1 = require("../../types/eps-process-types");
var eps_api_1 = __importDefault(require("../api/eps-api"));
var grpc_server_1 = require("../api/grpc/server/grpc-server");
var process_manager_1 = require("../components/process-manager");
var browser_watcher_1 = require("../services/browser-watcher");
var app_global_1 = __importDefault(require("./app-global"));
var app_init_1 = require("./app-utils/app-init");
var port_file_1 = require("./app-utils/port-file");
var EpsApp = /** @class */ (function () {
function EpsApp(options) {
this.options = options;
}
EpsApp.prototype.startServices = function () {
var _a;
return __awaiter(this, void 0, void 0, function () {
var enablements, epsApiPort, _b, apiOptions, browserWatcherPort, staticServerOptions, extractorLaunchedEvent, epsApi, portFileInfo, grpcServerPort, grpcServer;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
eps_logger_1.Logger.debug({ 'Eps App Options': this.options });
enablements = (0, app_init_1.getServiceEnablements)(this.options);
if (!((_a = this.options.mainApiPort) !== null && _a !== void 0)) return [3 /*break*/, 1];
_b = _a;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, app_global_1.default.portManager.reserveUnusedPort()];
case 2:
_b = (_c.sent());
_c.label = 3;
case 3:
epsApiPort = _b;
apiOptions = {
epsApiPort: epsApiPort,
callerId: this.options.callerId,
callerType: this.options.callerType,
epsInstanceId: this.options.epsInstanceId,
networkOptions: this.options.networkOption,
i18n: this.options.i18n,
};
if (!enablements.browserWatcher) return [3 /*break*/, 6];
return [4 /*yield*/, app_global_1.default.portManager.reserveUnusedPort()];
case 4:
browserWatcherPort = _c.sent();
return [4 /*yield*/, new browser_watcher_1.BrowserWatcher().start(browserWatcherPort)];
case 5:
_c.sent();
apiOptions.browserWatcherPort = browserWatcherPort;
_c.label = 6;
case 6:
if (!enablements.staticServer) return [3 /*break*/, 8];
return [4 /*yield*/, this.startStaticServerProcess()];
case 7:
staticServerOptions = _c.sent();
apiOptions.staticServerOptions = staticServerOptions;
_c.label = 8;
case 8:
extractorLaunchedEvent = new node_events_1.default();
epsApi = new eps_api_1.default(extractorLaunchedEvent, apiOptions);
return [4 /*yield*/, epsApi.start()];
case 9:
_c.sent();
portFileInfo = {
epsApiPort: epsApiPort,
epsInstanceId: this.options.epsInstanceId,
};
if (apiOptions.staticServerOptions) {
portFileInfo.staticServerOptions = apiOptions.staticServerOptions;
}
if (!enablements.grpcServer) return [3 /*break*/, 12];
return [4 /*yield*/, (0, app_init_1.getGrpcPort)(this.options)];
case 10:
grpcServerPort = _c.sent();
portFileInfo.grpcServerPort = grpcServerPort;
grpcServer = new grpc_server_1.GrpcServer(extractorLaunchedEvent, apiOptions);
return [4 /*yield*/, grpcServer.start(grpcServerPort)];
case 11:
_c.sent();
_c.label = 12;
case 12:
//This is hardcoded tactically for a shipblocker, will be replaced by proper taco initialization later
if (this.options.featureFlags.EPSStaticTacoUnpack) {
this.extractTacos('s3');
this.extractTacos('google_analytics_4');
}
return [4 /*yield*/, (0, port_file_1.writePortFile)(this.options.portFilePath, portFileInfo)];
case 13:
_c.sent();
return [2 /*return*/];
}
});
});
};
EpsApp.prototype.startStaticServerProcess = function () {
return __awaiter(this, void 0, void 0, function () {
var staticServerOptions, staticServerAppPath, child, timeoutId;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, (0, app_init_1.getStaticServerOptions)(this.options)];
case 1:
staticServerOptions = _a.sent();
staticServerAppPath = node_path_1.default.resolve(__dirname, '../../static-server/static-server-app.js');
child = app_global_1.default.processManager.fork(eps_process_types_1.EPSProcessName.EPSStaticServer, process_manager_1.ProcessType.sibling, staticServerAppPath, [
this.options.epsInstanceId,
this.options.connectorAppDir,
staticServerOptions.staticServerPort.toString(),
staticServerOptions.staticServerId,
]);
timeoutId = setTimeout(function () {
throw new Error('Static server failed to start within 30 seconds.');
}, 30000);
return [4 /*yield*/, new Promise(function (resolve, reject) {
child.on('message', function (message) {
if (message.status === 'success') {
clearTimeout(timeoutId);
resolve();
}
else {
// note: this will be a deserialized plain object from an Error object
reject(message.error);
}
});
child.on('error', function (error) {
reject(error);
});
})];
case 2:
_a.sent();
return [2 /*return*/, staticServerOptions];
}
});
});
};
EpsApp.prototype.extractTacos = function (connectorName) {
var _this = this;
var dir = '/opt/tableau/connectors';
node_fs_1.default.readdir(dir, function (err, files) {
if (err) {
console.error("Error reading directory ".concat(dir, ": ").concat(err));
return;
}
files.forEach(function (file) { return __awaiter(_this, void 0, void 0, function () {
var tacoPath;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!file.startsWith(connectorName)) return [3 /*break*/, 2];
tacoPath = node_path_1.default.resolve(dir, file);
eps_logger_1.Logger.info('extractTacos path: ' + tacoPath);
return [4 /*yield*/, app_global_1.default.tacoInitializer.ensureTacoInitialized('static', connectorName, tacoPath)];
case 1:
_a.sent();
_a.label = 2;
case 2: return [2 /*return*/];
}
});
}); });
});
};
return EpsApp;
}());
exports.default = EpsApp;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBzLWFwcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9lcHMvbWFpbi9jb3JlL2Vwcy1hcHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0REFBc0M7QUFDdEMsd0RBQTRCO0FBQzVCLG9EQUF3QjtBQUV4Qix1REFBaUQ7QUFJakQsbUVBQThEO0FBRTlELDJEQUFtQztBQUNuQyw4REFBMkQ7QUFDM0QsaUVBQTJEO0FBQzNELCtEQUE0RDtBQUM1RCw0REFBb0M7QUFDcEMsaURBQWlHO0FBQ2pHLG1EQUFtRTtBQUVuRTtJQUNFLGdCQUFvQixPQUFzQjtRQUF0QixZQUFPLEdBQVAsT0FBTyxDQUFlO0lBQUcsQ0FBQztJQUV4Qyw4QkFBYSxHQUFuQjs7Ozs7Ozt3QkFDRSxtQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO3dCQUUzQyxXQUFXLEdBQUcsSUFBQSxnQ0FBcUIsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7b0NBRXBDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVzs7OzRCQUFLLHFCQUFNLG9CQUFTLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLEVBQUE7O3dCQUFoRCxLQUFBLENBQUMsU0FBK0MsQ0FBQyxDQUFBOzs7d0JBQTFGLFVBQVUsS0FBZ0Y7d0JBRTFGLFVBQVUsR0FBa0I7NEJBQ2hDLFVBQVUsWUFBQTs0QkFDVixRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFROzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVOzRCQUNuQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhOzRCQUN6QyxjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhOzRCQUMxQyxJQUFJLEVBQUUsSUFB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