| export * from './StartServerCommandExecutor'; | ||
| export * from './ShutdownServerCommandExecutor'; |
| "use strict"; | ||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| var desc = Object.getOwnPropertyDescriptor(m, k); | ||
| if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
| desc = { enumerable: true, get: function() { return m[k]; } }; | ||
| } | ||
| Object.defineProperty(o, k2, desc); | ||
| }) : (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| o[k2] = m[k]; | ||
| })); | ||
| var __exportStar = (this && this.__exportStar) || function(m, exports) { | ||
| for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| __exportStar(require("./StartServerCommandExecutor"), exports); | ||
| __exportStar(require("./ShutdownServerCommandExecutor"), exports); | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZC9zZXJ2ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtEQUE2QztBQUM3QyxrRUFBZ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL1N0YXJ0U2VydmVyQ29tbWFuZEV4ZWN1dG9yJztcbmV4cG9ydCAqIGZyb20gJy4vU2h1dGRvd25TZXJ2ZXJDb21tYW5kRXhlY3V0b3InO1xuIl19 |
| import { CommandExecutor } from '../CommandExecutor'; | ||
| import { Command, OptionValues } from 'commander'; | ||
| export declare class ShutdownServerCommandExecutor implements CommandExecutor { | ||
| private verboseEnabled; | ||
| private serverPort; | ||
| commandName(): string; | ||
| defineOptions(command: Command): void; | ||
| private _parseOptions; | ||
| private _checkOptions; | ||
| execute(options: OptionValues): Promise<void>; | ||
| } |
| "use strict"; | ||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| var desc = Object.getOwnPropertyDescriptor(m, k); | ||
| if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
| desc = { enumerable: true, get: function() { return m[k]; } }; | ||
| } | ||
| Object.defineProperty(o, k2, desc); | ||
| }) : (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| o[k2] = m[k]; | ||
| })); | ||
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
| Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
| }) : function(o, v) { | ||
| o["default"] = v; | ||
| }); | ||
| var __importStar = (this && this.__importStar) || function (mod) { | ||
| if (mod && mod.__esModule) return mod; | ||
| var result = {}; | ||
| if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
| __setModuleDefault(result, mod); | ||
| return result; | ||
| }; | ||
| var __importDefault = (this && this.__importDefault) || function (mod) { | ||
| return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.ShutdownServerCommandExecutor = void 0; | ||
| const index_1 = require("../index"); | ||
| const logger = __importStar(require("../../logger")); | ||
| const exit_1 = require("../../exit"); | ||
| const constants_1 = require("../../constants"); | ||
| const commander_1 = require("commander"); | ||
| const axios_1 = __importDefault(require("axios")); | ||
| const SHUTDOWN_REQUEST_TIMEOUT = 30000; | ||
| class ShutdownServerCommandExecutor { | ||
| commandName() { | ||
| return index_1.Commands.SHUTDOWN_SERVER; | ||
| } | ||
| defineOptions(command) { | ||
| command | ||
| .addOption(new commander_1.Option('-v, --verbose', 'Enable verbose mode') | ||
| .makeOptionMandatory(false) | ||
| .default(process.env.OTEL_CLI_VERBOSE && | ||
| process.env.OTEL_CLI_VERBOSE.toLowerCase() === 'true')) | ||
| .addOption(new commander_1.Option('-sp, --server-port <port>', 'OTEL CLI server port for communicating over to shutdown gracefully') | ||
| .makeOptionMandatory(false) | ||
| .default(process.env.OTEL_CLI_SERVER_PORT || constants_1.DEFAULT_SERVER_PORT)); | ||
| } | ||
| _parseOptions(options) { | ||
| this.verboseEnabled = options.verbose; | ||
| logger.setDebugEnabled(this.verboseEnabled); | ||
| this.serverPort = parseInt(options.serverPort); | ||
| } | ||
| _checkOptions() { | ||
| if (!this.serverPort) { | ||
| logger.error('OTEL CLI server port must be specified!'); | ||
| (0, exit_1.exit)(1); | ||
| } | ||
| } | ||
| async execute(options) { | ||
| var _a, _b; | ||
| this._parseOptions(options); | ||
| this._checkOptions(); | ||
| const serverURL = `http://${constants_1.DEFAULT_SERVER_HOST}:${this.serverPort}/shutdown`; | ||
| try { | ||
| const res = await axios_1.default.delete(serverURL, { timeout: SHUTDOWN_REQUEST_TIMEOUT }); | ||
| if (res.status / 100 != 2) { | ||
| throw new Error(`Invalid response (status code=${res.status}) from server endpoint ${serverURL}`); | ||
| } | ||
| } | ||
| catch (err) { | ||
| if ((_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.status) { | ||
| throw new Error(`Invalid response (status code=${(_b = err === null || err === void 0 ? void 0 : err.response) === null || _b === void 0 ? void 0 : _b.status}) from server endpoint ${serverURL}`); | ||
| } | ||
| else { | ||
| throw new Error(`Unable to shutdown server through endpoint ${serverURL}: ${err.name} (${err.message})`); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| exports.ShutdownServerCommandExecutor = ShutdownServerCommandExecutor; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2h1dGRvd25TZXJ2ZXJDb21tYW5kRXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZC9zZXJ2ZXIvU2h1dGRvd25TZXJ2ZXJDb21tYW5kRXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvQ0FBb0M7QUFFcEMscURBQXVDO0FBQ3ZDLHFDQUFrQztBQUNsQywrQ0FBMkU7QUFFM0UseUNBQTBEO0FBQzFELGtEQUF5RDtBQUV6RCxNQUFNLHdCQUF3QixHQUFXLEtBQUssQ0FBQztBQUUvQyxNQUFhLDZCQUE2QjtJQUl0QyxXQUFXO1FBQ1AsT0FBTyxnQkFBUSxDQUFDLGVBQWUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQWdCO1FBQzFCLE9BQU87YUFDRixTQUFTLENBQ04sSUFBSSxrQkFBTSxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsQ0FBQzthQUM3QyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7YUFDMUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCO1lBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQ2pFO2FBQ0EsU0FBUyxDQUNOLElBQUksa0JBQU0sQ0FBQywyQkFBMkIsRUFDbEMsb0VBQW9FLENBQUM7YUFDcEUsbUJBQW1CLENBQUMsS0FBSyxDQUFDO2FBQzFCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixJQUFJLCtCQUFtQixDQUFDLENBQ3hFLENBQUM7SUFDVixDQUFDO0lBRU8sYUFBYSxDQUFDLE9BQXFCO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUN0QyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLGFBQWE7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbEIsTUFBTSxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1lBQ3hELElBQUEsV0FBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ1g7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFxQjs7UUFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU1QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFckIsTUFBTSxTQUFTLEdBQVcsVUFBVSwrQkFBbUIsSUFBSSxJQUFJLENBQUMsVUFBVSxXQUFXLENBQUM7UUFDdEYsSUFBSTtZQUNBLE1BQU0sR0FBRyxHQUFrQixNQUFNLGVBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLENBQUMsQ0FBQztZQUNoRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRTtnQkFDdkIsTUFBTSxJQUFJLEtBQUssQ0FDWCxpQ0FBaUMsR0FBRyxDQUFDLE1BQU0sMEJBQTBCLFNBQVMsRUFBRSxDQUNuRixDQUFDO2FBQ0w7U0FDSjtRQUFDLE9BQU8sR0FBcUIsRUFBRTtZQUM1QixJQUFJLE1BQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLFFBQVEsMENBQUUsTUFBTSxFQUFFO2dCQUN2QixNQUFNLElBQUksS0FBSyxDQUNYLGlDQUFpQyxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxRQUFRLDBDQUFFLE1BQU0sMEJBQTBCLFNBQVMsRUFBRSxDQUM5RixDQUFDO2FBQ0w7aUJBQU07Z0JBQ0gsTUFBTSxJQUFJLEtBQUssQ0FDWCw4Q0FBOEMsU0FBUyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUMxRixDQUFDO2FBQ0w7U0FDSjtJQUNMLENBQUM7Q0FFSjtBQWhFRCxzRUFnRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kcyB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCB7IENvbW1hbmRFeGVjdXRvciB9IGZyb20gJy4uL0NvbW1hbmRFeGVjdXRvcic7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi4vLi4vbG9nZ2VyJztcbmltcG9ydCB7IGV4aXQgfSBmcm9tICcuLi8uLi9leGl0JztcbmltcG9ydCB7IERFRkFVTFRfU0VSVkVSX0hPU1QsIERFRkFVTFRfU0VSVkVSX1BPUlQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuXG5pbXBvcnQgeyBDb21tYW5kLCBPcHRpb24sIE9wdGlvblZhbHVlcyB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgYXhpb3MsIHsgQXhpb3NFcnJvciwgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJztcblxuY29uc3QgU0hVVERPV05fUkVRVUVTVF9USU1FT1VUOiBudW1iZXIgPSAzMDAwMDtcblxuZXhwb3J0IGNsYXNzIFNodXRkb3duU2VydmVyQ29tbWFuZEV4ZWN1dG9yIGltcGxlbWVudHMgQ29tbWFuZEV4ZWN1dG9yIHtcbiAgICBwcml2YXRlIHZlcmJvc2VFbmFibGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgc2VydmVyUG9ydDogbnVtYmVyO1xuXG4gICAgY29tbWFuZE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIENvbW1hbmRzLlNIVVRET1dOX1NFUlZFUjtcbiAgICB9XG5cbiAgICBkZWZpbmVPcHRpb25zKGNvbW1hbmQ6IENvbW1hbmQpIHtcbiAgICAgICAgY29tbWFuZFxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctdiwgLS12ZXJib3NlJywgJ0VuYWJsZSB2ZXJib3NlIG1vZGUnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQocHJvY2Vzcy5lbnYuT1RFTF9DTElfVkVSQk9TRSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuT1RFTF9DTElfVkVSQk9TRS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1zcCwgLS1zZXJ2ZXItcG9ydCA8cG9ydD4nLFxuICAgICAgICAgICAgICAgICAgICAnT1RFTCBDTEkgc2VydmVyIHBvcnQgZm9yIGNvbW11bmljYXRpbmcgb3ZlciB0byBzaHV0ZG93biBncmFjZWZ1bGx5JylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52Lk9URUxfQ0xJX1NFUlZFUl9QT1JUIHx8IERFRkFVTFRfU0VSVkVSX1BPUlQpXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3BhcnNlT3B0aW9ucyhvcHRpb25zOiBPcHRpb25WYWx1ZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52ZXJib3NlRW5hYmxlZCA9IG9wdGlvbnMudmVyYm9zZTtcbiAgICAgICAgbG9nZ2VyLnNldERlYnVnRW5hYmxlZCh0aGlzLnZlcmJvc2VFbmFibGVkKTtcblxuICAgICAgICB0aGlzLnNlcnZlclBvcnQgPSBwYXJzZUludChvcHRpb25zLnNlcnZlclBvcnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrT3B0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlcnZlclBvcnQpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignT1RFTCBDTEkgc2VydmVyIHBvcnQgbXVzdCBiZSBzcGVjaWZpZWQhJyk7XG4gICAgICAgICAgICBleGl0KDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZXhlY3V0ZShvcHRpb25zOiBPcHRpb25WYWx1ZXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5fcGFyc2VPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX2NoZWNrT3B0aW9ucygpO1xuXG4gICAgICAgIGNvbnN0IHNlcnZlclVSTDogc3RyaW5nID0gYGh0dHA6Ly8ke0RFRkFVTFRfU0VSVkVSX0hPU1R9OiR7dGhpcy5zZXJ2ZXJQb3J0fS9zaHV0ZG93bmA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXM6IEF4aW9zUmVzcG9uc2UgPSBhd2FpdCBheGlvcy5kZWxldGUoc2VydmVyVVJMLCB7IHRpbWVvdXQ6IFNIVVRET1dOX1JFUVVFU1RfVElNRU9VVCB9KTtcbiAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzIC8gMTAwICE9IDIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBJbnZhbGlkIHJlc3BvbnNlIChzdGF0dXMgY29kZT0ke3Jlcy5zdGF0dXN9KSBmcm9tIHNlcnZlciBlbmRwb2ludCAke3NlcnZlclVSTH1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyOiBBeGlvc0Vycm9yIHwgYW55KSB7XG4gICAgICAgICAgICBpZiAoZXJyPy5yZXNwb25zZT8uc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgSW52YWxpZCByZXNwb25zZSAoc3RhdHVzIGNvZGU9JHtlcnI/LnJlc3BvbnNlPy5zdGF0dXN9KSBmcm9tIHNlcnZlciBlbmRwb2ludCAke3NlcnZlclVSTH1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgVW5hYmxlIHRvIHNodXRkb3duIHNlcnZlciB0aHJvdWdoIGVuZHBvaW50ICR7c2VydmVyVVJMfTogJHtlcnIubmFtZX0gKCR7ZXJyLm1lc3NhZ2V9KWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0= |
| import { CommandExecutor } from '../CommandExecutor'; | ||
| import { Command, OptionValues } from 'commander'; | ||
| export declare class StartServerCommandExecutor implements CommandExecutor { | ||
| private verboseEnabled; | ||
| private exporterOTLPEndpoint; | ||
| private exporterOTLPTracesEndpoint; | ||
| private exporterOTLPProtocol; | ||
| private exporterOTLPHeaders; | ||
| private serverPort; | ||
| commandName(): string; | ||
| defineOptions(command: Command): void; | ||
| private _parseOptions; | ||
| private _checkOptions; | ||
| private _resolveExporterOTLPTracesEndpoint; | ||
| private _resolveExporterOTLPHeaders; | ||
| execute(options: OptionValues): Promise<void>; | ||
| } |
| "use strict"; | ||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| var desc = Object.getOwnPropertyDescriptor(m, k); | ||
| if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
| desc = { enumerable: true, get: function() { return m[k]; } }; | ||
| } | ||
| Object.defineProperty(o, k2, desc); | ||
| }) : (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| o[k2] = m[k]; | ||
| })); | ||
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
| Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
| }) : function(o, v) { | ||
| o["default"] = v; | ||
| }); | ||
| var __importStar = (this && this.__importStar) || function (mod) { | ||
| if (mod && mod.__esModule) return mod; | ||
| var result = {}; | ||
| if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
| __setModuleDefault(result, mod); | ||
| return result; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.StartServerCommandExecutor = void 0; | ||
| const index_1 = require("../index"); | ||
| const logger = __importStar(require("../../logger")); | ||
| const exit_1 = require("../../exit"); | ||
| const export_1 = require("../../export"); | ||
| const utils_1 = require("../../utils"); | ||
| const server_1 = require("../../server"); | ||
| const commander_1 = require("commander"); | ||
| const constants_1 = require("../../constants"); | ||
| class StartServerCommandExecutor { | ||
| commandName() { | ||
| return index_1.Commands.START_SERVER; | ||
| } | ||
| defineOptions(command) { | ||
| command | ||
| .addOption(new commander_1.Option('-v, --verbose', 'Enable verbose mode') | ||
| .makeOptionMandatory(false) | ||
| .default(process.env.OTEL_CLI_VERBOSE && | ||
| process.env.OTEL_CLI_VERBOSE.toLowerCase() === 'true')) | ||
| .addOption(new commander_1.Option('-e, --endpoint <url>', 'OTEL Exporter OTLP endpoint') | ||
| .makeOptionMandatory(false) | ||
| .default(process.env.OTEL_EXPORTER_OTLP_ENDPOINT)) | ||
| .addOption(new commander_1.Option('-te, --traces-endpoint <url>', 'OTEL Exporter OTLP traces endpoint') | ||
| .makeOptionMandatory(false) | ||
| .default(process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT)) | ||
| .addOption(new commander_1.Option('-p, --protocol <protocol>', 'OTEL Exporter OTLP protocol') | ||
| .makeOptionMandatory(false) | ||
| .default(process.env.OTEL_EXPORTER_OTLP_PROTOCOL || | ||
| export_1.ExporterOTLPProtocols.HTTP_JSON) | ||
| .choices(Object.values(export_1.ExporterOTLPProtocols))) | ||
| .addOption(new commander_1.Option('-h, --headers <key-value-pairs...>', 'OTEL Exporter OTLP headers') | ||
| .makeOptionMandatory(false) | ||
| .default(process.env.OTEL_EXPORTER_OTLP_HEADERS && | ||
| process.env.OTEL_EXPORTER_OTLP_HEADERS.split(','))) | ||
| .addOption(new commander_1.Option('-sp, --server-port <port>', 'OTEL CLI server port to start on') | ||
| .makeOptionMandatory(true) | ||
| .default(process.env.OTEL_CLI_SERVER_PORT || constants_1.DEFAULT_SERVER_PORT)); | ||
| } | ||
| _parseOptions(options) { | ||
| this.verboseEnabled = options.verbose; | ||
| logger.setDebugEnabled(this.verboseEnabled); | ||
| this.exporterOTLPEndpoint = options.endpoint; | ||
| this.exporterOTLPTracesEndpoint = options.tracesEndpoint; | ||
| this.exporterOTLPProtocol = options.protocol; | ||
| this.exporterOTLPHeaders = (0, utils_1.parseKeyValue)(options.headers); | ||
| this.serverPort = parseInt(options.serverPort); | ||
| } | ||
| _checkOptions() { | ||
| if (!this.exporterOTLPEndpoint && !this.exporterOTLPTracesEndpoint) { | ||
| logger.error('One of the OTEL Exporter OTLP endpoint ' + | ||
| 'or OTEL Exporter OTLP traces endpoint configurations must be specified!'); | ||
| (0, exit_1.exit)(1); | ||
| } | ||
| } | ||
| _resolveExporterOTLPTracesEndpoint() { | ||
| return (this.exporterOTLPTracesEndpoint || | ||
| this.exporterOTLPEndpoint + '/v1/traces'); | ||
| } | ||
| _resolveExporterOTLPHeaders() { | ||
| if (!this.exporterOTLPHeaders || !this.exporterOTLPHeaders.size) { | ||
| return undefined; | ||
| } | ||
| let added = false; | ||
| let resolvedHeaders = ''; | ||
| for (const entry of this.exporterOTLPHeaders.entries()) { | ||
| const headerName = entry[0]; | ||
| const headerValue = entry[1]; | ||
| if (added) { | ||
| resolvedHeaders = ',' + resolvedHeaders; | ||
| } | ||
| resolvedHeaders = resolvedHeaders + `,${headerName}=${headerValue}`; | ||
| added = true; | ||
| } | ||
| return resolvedHeaders; | ||
| } | ||
| async execute(options) { | ||
| this._parseOptions(options); | ||
| this._checkOptions(); | ||
| const serverController = (0, server_1.createServerController)(this.exporterOTLPProtocol, this._resolveExporterOTLPTracesEndpoint(), this.exporterOTLPHeaders); | ||
| if (!serverController) { | ||
| throw new Error('Unable to create server controller'); | ||
| (0, exit_1.exit)(1); | ||
| } | ||
| else { | ||
| (0, server_1.startServer)(constants_1.DEFAULT_SERVER_HOST, this.serverPort, serverController); | ||
| await (0, server_1.startServerCleaner)(serverController, process.ppid); | ||
| } | ||
| /* | ||
| // TODO | ||
| // Currently server start is blocking for the caller | ||
| // (requires "otel-cli start-server ... &" to run in background) | ||
| // Should we support starting server in background automatically | ||
| // by starting it inside detached process | ||
| const child: ChildProcess = spawn( | ||
| process.argv[0], | ||
| [path.join(__dirname, '../../server/bootstrap.js')], | ||
| { | ||
| detached: true, | ||
| stdio: 'ignore', | ||
| env: { | ||
| OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: this._resolveExporterOTLPTracesEndpoint(), | ||
| OTEL_EXPORTER_OTLP_PROTOCOL: this.exporterOTLPProtocol, | ||
| OTEL_EXPORTER_OTLP_HEADERS: this._resolveExporterOTLPHeaders(), | ||
| OTEL_CLI_SERVER_PORT: this.serverPort.toString(), | ||
| OTEL_CLI_SERVER_PPID: process.ppid.toString(), | ||
| } | ||
| } | ||
| ); | ||
| child.unref(); | ||
| */ | ||
| } | ||
| } | ||
| exports.StartServerCommandExecutor = StartServerCommandExecutor; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhcnRTZXJ2ZXJDb21tYW5kRXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZC9zZXJ2ZXIvU3RhcnRTZXJ2ZXJDb21tYW5kRXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvQ0FBb0M7QUFFcEMscURBQXVDO0FBQ3ZDLHFDQUFrQztBQUNsQyx5Q0FBcUQ7QUFDckQsdUNBQTRDO0FBQzVDLHlDQUtzQjtBQUV0Qix5Q0FBMEQ7QUFDMUQsK0NBQTJFO0FBRTNFLE1BQWEsMEJBQTBCO0lBUW5DLFdBQVc7UUFDUCxPQUFPLGdCQUFRLENBQUMsWUFBWSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBZ0I7UUFDMUIsT0FBTzthQUNGLFNBQVMsQ0FDTixJQUFJLGtCQUFNLENBQUMsZUFBZSxFQUFFLHFCQUFxQixDQUFDO2FBQzdDLG1CQUFtQixDQUFDLEtBQUssQ0FBQzthQUMxQixPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0I7WUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FDakU7YUFDQSxTQUFTLENBQ04sSUFBSSxrQkFBTSxDQUFDLHNCQUFzQixFQUFFLDZCQUE2QixDQUFDO2FBQzVELG1CQUFtQixDQUFDLEtBQUssQ0FBQzthQUMxQixPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUN4RDthQUNBLFNBQVMsQ0FDTixJQUFJLGtCQUFNLENBQUMsOEJBQThCLEVBQUUsb0NBQW9DLENBQUM7YUFDM0UsbUJBQW1CLENBQUMsS0FBSyxDQUFDO2FBQzFCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUFDLENBQy9EO2FBQ0EsU0FBUyxDQUNOLElBQUksa0JBQU0sQ0FBQywyQkFBMkIs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QUM7UUFFNUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXJCLE1BQU0sZ0JBQWdCLEdBQ2xCLElBQUEsK0JBQXNCLEVBQ2xCLElBQUksQ0FBQyxvQkFBb0IsRUFDekIsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLEVBQ3pDLElBQUksQ0FBQyxtQkFBbUIsQ0FDM0IsQ0FBQztRQUNOLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7WUFDdEQsSUFBQSxXQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUM7U0FDWDthQUFNO1lBQ0gsSUFBQSxvQkFBVyxFQUFDLCtCQUFtQixFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUNwRSxNQUFNLElBQUEsMkJBQWtCLEVBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVEO1FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1VBdUJFO0lBQ04sQ0FBQztDQUVKO0FBaEpELGdFQWdKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmRzIH0gZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IHsgQ29tbWFuZEV4ZWN1dG9yIH0gZnJvbSAnLi4vQ29tbWFuZEV4ZWN1dG9yJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuLi8uLi9sb2dnZXInO1xuaW1wb3J0IHsgZXhpdCB9IGZyb20gJy4uLy4uL2V4aXQnO1xuaW1wb3J0IHsgRXhwb3J0ZXJPVExQUHJvdG9jb2xzIH0gZnJvbSAnLi4vLi4vZXhwb3J0JztcbmltcG9ydCB7IHBhcnNlS2V5VmFsdWUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge1xuICAgIGNyZWF0ZVNlcnZlckNvbnRyb2xsZXIsXG4gICAgU2VydmVyQ29udHJvbGxlcixcbiAgICBzdGFydFNlcnZlcixcbiAgICBzdGFydFNlcnZlckNsZWFuZXJcbn0gZnJvbSAnLi4vLi4vc2VydmVyJztcblxuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uLCBPcHRpb25WYWx1ZXMgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgREVGQVVMVF9TRVJWRVJfSE9TVCwgREVGQVVMVF9TRVJWRVJfUE9SVCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjbGFzcyBTdGFydFNlcnZlckNvbW1hbmRFeGVjdXRvciBpbXBsZW1lbnRzIENvbW1hbmRFeGVjdXRvciB7XG4gICAgcHJpdmF0ZSB2ZXJib3NlRW5hYmxlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIGV4cG9ydGVyT1RMUEVuZHBvaW50OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBleHBvcnRlck9UTFBUcmFjZXNFbmRwb2ludDogc3RyaW5nO1xuICAgIHByaXZhdGUgZXhwb3J0ZXJPVExQUHJvdG9jb2w6IHN0cmluZztcbiAgICBwcml2YXRlIGV4cG9ydGVyT1RMUEhlYWRlcnM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gICAgcHJpdmF0ZSBzZXJ2ZXJQb3J0OiBudW1iZXI7XG5cbiAgICBjb21tYW5kTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gQ29tbWFuZHMuU1RBUlRfU0VSVkVSO1xuICAgIH1cblxuICAgIGRlZmluZU9wdGlvbnMoY29tbWFuZDogQ29tbWFuZCkge1xuICAgICAgICBjb21tYW5kXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy12LCAtLXZlcmJvc2UnLCAnRW5hYmxlIHZlcmJvc2UgbW9kZScpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAuZGVmYXVsdChwcm9jZXNzLmVudi5PVEVMX0NMSV9WRVJCT1NFICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5PVEVMX0NMSV9WRVJCT1NFLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJylcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLWUsIC0tZW5kcG9pbnQgPHVybD4nLCAnT1RFTCBFeHBvcnRlciBPVExQIGVuZHBvaW50JylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLXRlLCAtLXRyYWNlcy1lbmRwb2ludCA8dXJsPicsICdPVEVMIEV4cG9ydGVyIE9UTFAgdHJhY2VzIGVuZHBvaW50JylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfRU5EUE9JTlQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1wLCAtLXByb3RvY29sIDxwcm90b2NvbD4nLCAnT1RFTCBFeHBvcnRlciBPVExQIHByb3RvY29sJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX1BST1RPQ09MIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRlck9UTFBQcm90b2NvbHMuSFRUUF9KU09OXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhFeHBvcnRlck9UTFBQcm90b2NvbHMpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctaCwgLS1oZWFkZXJzIDxrZXktdmFsdWUtcGFpcnMuLi4+JywgJ09URUwgRXhwb3J0ZXIgT1RMUCBoZWFkZXJzJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9IRUFERVJTICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfSEVBREVSUy5zcGxpdCgnLCcpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctc3AsIC0tc2VydmVyLXBvcnQgPHBvcnQ+JyxcbiAgICAgICAgICAgICAgICAgICAgJ09URUwgQ0xJIHNlcnZlciBwb3J0IHRvIHN0YXJ0IG9uJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQocHJvY2Vzcy5lbnYuT1RFTF9DTElfU0VSVkVSX1BPUlQgfHwgREVGQVVMVF9TRVJWRVJfUE9SVClcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGFyc2VPcHRpb25zKG9wdGlvbnM6IE9wdGlvblZhbHVlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLnZlcmJvc2VFbmFibGVkID0gb3B0aW9ucy52ZXJib3NlO1xuICAgICAgICBsb2dnZXIuc2V0RGVidWdFbmFibGVkKHRoaXMudmVyYm9zZUVuYWJsZWQpO1xuXG4gICAgICAgIHRoaXMuZXhwb3J0ZXJPVExQRW5kcG9pbnQgPSBvcHRpb25zLmVuZHBvaW50O1xuICAgICAgICB0aGlzLmV4cG9ydGVyT1RMUFRyYWNlc0VuZHBvaW50ID0gb3B0aW9ucy50cmFjZXNFbmRwb2ludDtcbiAgICAgICAgdGhpcy5leHBvcnRlck9UTFBQcm90b2NvbCA9IG9wdGlvbnMucHJvdG9jb2w7XG4gICAgICAgIHRoaXMuZXhwb3J0ZXJPVExQSGVhZGVycyA9IHBhcnNlS2V5VmFsdWUob3B0aW9ucy5oZWFkZXJzKTtcbiAgICAgICAgdGhpcy5zZXJ2ZXJQb3J0ID0gcGFyc2VJbnQob3B0aW9ucy5zZXJ2ZXJQb3J0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGVja09wdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5leHBvcnRlck9UTFBFbmRwb2ludCAmJiAhdGhpcy5leHBvcnRlck9UTFBUcmFjZXNFbmRwb2ludCkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICdPbmUgb2YgdGhlIE9URUwgRXhwb3J0ZXIgT1RMUCBlbmRwb2ludCAnICtcbiAgICAgICAgICAgICAgICAnb3IgT1RFTCBFeHBvcnRlciBPVExQIHRyYWNlcyBlbmRwb2ludCBjb25maWd1cmF0aW9ucyBtdXN0IGJlIHNwZWNpZmllZCEnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXhpdCgxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc29sdmVFeHBvcnRlck9UTFBUcmFjZXNFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5leHBvcnRlck9UTFBUcmFjZXNFbmRwb2ludCB8fFxuICAgICAgICAgICAgdGhpcy5leHBvcnRlck9UTFBFbmRwb2ludCArICcvdjEvdHJhY2VzJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc29sdmVFeHBvcnRlck9UTFBIZWFkZXJzKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghdGhpcy5leHBvcnRlck9UTFBIZWFkZXJzIHx8ICF0aGlzLmV4cG9ydGVyT1RMUEhlYWRlcnMuc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYWRkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgbGV0IHJlc29sdmVkSGVhZGVyczogc3RyaW5nID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5leHBvcnRlck9UTFBIZWFkZXJzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgaGVhZGVyTmFtZTogc3RyaW5nID0gZW50cnlbMF07XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJWYWx1ZTogc3RyaW5nID0gZW50cnlbMV07XG4gICAgICAgICAgICBpZiAoYWRkZWQpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlZEhlYWRlcnMgPSAnLCcgKyByZXNvbHZlZEhlYWRlcnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlZEhlYWRlcnMgPSByZXNvbHZlZEhlYWRlcnMgKyBgLCR7aGVhZGVyTmFtZX09JHtoZWFkZXJWYWx1ZX1gO1xuICAgICAgICAgICAgYWRkZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZEhlYWRlcnM7XG4gICAgfVxuXG4gICAgYXN5bmMgZXhlY3V0ZShvcHRpb25zOiBPcHRpb25WYWx1ZXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5fcGFyc2VPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX2NoZWNrT3B0aW9ucygpO1xuXG4gICAgICAgIGNvbnN0IHNlcnZlckNvbnRyb2xsZXI6IFNlcnZlckNvbnRyb2xsZXIgfCB1bmRlZmluZWQgPVxuICAgICAgICAgICAgY3JlYXRlU2VydmVyQ29udHJvbGxlcihcbiAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydGVyT1RMUFByb3RvY29sLFxuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVFeHBvcnRlck9UTFBUcmFjZXNFbmRwb2ludCgpLFxuICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0ZXJPVExQSGVhZGVyc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgaWYgKCFzZXJ2ZXJDb250cm9sbGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgc2VydmVyIGNvbnRyb2xsZXInKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFydFNlcnZlcihERUZBVUxUX1NFUlZFUl9IT1NULCB0aGlzLnNlcnZlclBvcnQsIHNlcnZlckNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgYXdhaXQgc3RhcnRTZXJ2ZXJDbGVhbmVyKHNlcnZlckNvbnRyb2xsZXIsIHByb2Nlc3MucHBpZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEN1cnJlbnRseSBzZXJ2ZXIgc3RhcnQgaXMgYmxvY2tpbmcgZm9yIHRoZSBjYWxsZXJcbiAgICAgICAgLy8gKHJlcXVpcmVzIFwib3RlbC1jbGkgc3RhcnQtc2VydmVyIC4uLiAmXCIgdG8gcnVuIGluIGJhY2tncm91bmQpXG4gICAgICAgIC8vIFNob3VsZCB3ZSBzdXBwb3J0IHN0YXJ0aW5nIHNlcnZlciBpbiBiYWNrZ3JvdW5kIGF1dG9tYXRpY2FsbHlcbiAgICAgICAgLy8gYnkgc3RhcnRpbmcgaXQgaW5zaWRlIGRldGFjaGVkIHByb2Nlc3NcblxuICAgICAgICBjb25zdCBjaGlsZDogQ2hpbGRQcm9jZXNzID0gc3Bhd24oXG4gICAgICAgICAgcHJvY2Vzcy5hcmd2WzBdLFxuICAgICAgICAgIFtwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vc2VydmVyL2Jvb3RzdHJhcC5qcycpXSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgICAgICAgIHN0ZGlvOiAnaWdub3JlJyxcbiAgICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgICAgIE9URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfRU5EUE9JTlQ6IHRoaXMuX3Jlc29sdmVFeHBvcnRlck9UTFBUcmFjZXNFbmRwb2ludCgpLFxuICAgICAgICAgICAgICAgIE9URUxfRVhQT1JURVJfT1RMUF9QUk9UT0NPTDogdGhpcy5leHBvcnRlck9UTFBQcm90b2NvbCxcbiAgICAgICAgICAgICAgICBPVEVMX0VYUE9SVEVSX09UTFBfSEVBREVSUzogdGhpcy5fcmVzb2x2ZUV4cG9ydGVyT1RMUEhlYWRlcnMoKSxcbiAgICAgICAgICAgICAgICBPVEVMX0NMSV9TRVJWRVJfUE9SVDogdGhpcy5zZXJ2ZXJQb3J0LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgT1RFTF9DTElfU0VSVkVSX1BQSUQ6IHByb2Nlc3MucHBpZC50b1N0cmluZygpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgY2hpbGQudW5yZWYoKTtcbiAgICAgICAgKi9cbiAgICB9XG5cbn1cbiJdfQ== |
| export * from './TaskExecutor'; |
| "use strict"; | ||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| var desc = Object.getOwnPropertyDescriptor(m, k); | ||
| if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
| desc = { enumerable: true, get: function() { return m[k]; } }; | ||
| } | ||
| Object.defineProperty(o, k2, desc); | ||
| }) : (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| o[k2] = m[k]; | ||
| })); | ||
| var __exportStar = (this && this.__exportStar) || function(m, exports) { | ||
| for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| __exportStar(require("./TaskExecutor"), exports); | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXhlY3V0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUErQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vVGFza0V4ZWN1dG9yJztcbiJdfQ== |
| type Task<I, O> = (input: I) => Promise<O> | undefined; | ||
| export declare class TaskExecutor { | ||
| private readonly concurrencyLevel; | ||
| private queuedTasks; | ||
| private activeWorkerCount; | ||
| private closed; | ||
| constructor(concurrencyLevel: number); | ||
| private _executeTask; | ||
| execute<I, O>(task: Task<I, O>, input?: I): Promise<O>; | ||
| close(): Promise<void>; | ||
| } | ||
| export {}; |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.TaskExecutor = void 0; | ||
| const CLOSE_CHECK_INTERVAL = 500; | ||
| class TaskExecutor { | ||
| constructor(concurrencyLevel) { | ||
| this.activeWorkerCount = 0; | ||
| this.closed = false; | ||
| this.concurrencyLevel = concurrencyLevel; | ||
| this.queuedTasks = []; | ||
| } | ||
| _executeTask(taskItem) { | ||
| this.activeWorkerCount++; | ||
| try { | ||
| const taskPromise = taskItem.task(taskItem.input); | ||
| if (taskPromise) { | ||
| taskPromise | ||
| .then((result) => { | ||
| if (taskItem.resolve) { | ||
| taskItem.resolve(result); | ||
| } | ||
| }) | ||
| .catch((error) => { | ||
| if (taskItem.reject) { | ||
| taskItem.reject(error); | ||
| } | ||
| }) | ||
| .finally(() => { | ||
| this.activeWorkerCount--; | ||
| process.nextTick(() => { | ||
| if (this.queuedTasks.length) { | ||
| const taskItem = this.queuedTasks.shift(); | ||
| if (taskItem) { | ||
| this._executeTask(taskItem); | ||
| } | ||
| } | ||
| }); | ||
| }); | ||
| } | ||
| else { | ||
| this.activeWorkerCount--; | ||
| if (taskItem.resolve) { | ||
| taskItem.resolve(null); | ||
| } | ||
| } | ||
| } | ||
| catch (error) { | ||
| this.activeWorkerCount--; | ||
| if (taskItem.reject) { | ||
| taskItem.reject(error); | ||
| } | ||
| } | ||
| } | ||
| async execute(task, input) { | ||
| if (this.closed) { | ||
| throw new Error('Task executor was closed'); | ||
| } | ||
| let resolve = undefined; | ||
| let reject = undefined; | ||
| const promise = new Promise((res, rej) => { | ||
| resolve = res; | ||
| reject = rej; | ||
| }); | ||
| const itemTask = { | ||
| task, | ||
| input, | ||
| resolve, | ||
| reject, | ||
| }; | ||
| if (this.activeWorkerCount >= this.concurrencyLevel) { | ||
| this.queuedTasks.push(itemTask); | ||
| } | ||
| else { | ||
| this._executeTask(itemTask); | ||
| } | ||
| return promise; | ||
| } | ||
| async close() { | ||
| if (this.closed) { | ||
| return Promise.resolve(); | ||
| } | ||
| this.closed = true; | ||
| return new Promise((res, rej) => { | ||
| const intervalId = setInterval(() => { | ||
| if (!this.activeWorkerCount) { | ||
| clearInterval(intervalId); | ||
| res(null); | ||
| } | ||
| }, CLOSE_CHECK_INTERVAL); | ||
| }); | ||
| } | ||
| } | ||
| exports.TaskExecutor = TaskExecutor; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFza0V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4ZWN1dG9yL1Rhc2tFeGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFTQSxNQUFNLG9CQUFvQixHQUFXLEdBQUcsQ0FBQztBQUV6QyxNQUFhLFlBQVk7SUFNckIsWUFBWSxnQkFBd0I7UUFINUIsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBQzlCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFHNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxZQUFZLENBQU8sUUFBd0I7UUFDL0MsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSTtZQUNBLE1BQU0sV0FBVyxHQUEyQixRQUFRLENBQUMsSUFBSSxDQUNyRCxRQUFRLENBQUMsS0FBVSxDQUN0QixDQUFDO1lBQ0YsSUFBSSxXQUFXLEVBQUU7Z0JBQ2IsV0FBVztxQkFDTixJQUFJLENBQUMsQ0FBQyxNQUFTLEVBQVEsRUFBRTtvQkFDdEIsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO3dCQUNsQixRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUM1QjtnQkFDTCxDQUFDLENBQUM7cUJBQ0QsS0FBSyxDQUFDLENBQUMsS0FBVSxFQUFRLEVBQUU7b0JBQ3hCLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRTt3QkFDakIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDMUI7Z0JBQ0wsQ0FBQyxDQUFDO3FCQUNELE9BQU8sQ0FBQyxHQUFTLEVBQUU7b0JBQ2hCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUV6QixPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTt3QkFDbEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTs0QkFDekIsTUFBTSxRQUFRLEdBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs0QkFDN0IsSUFBSSxRQUFRLEVBQUU7Z0NBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQzs2QkFDL0I7eUJBQ0o7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQyxDQUFDLENBQUM7YUFDVjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO29CQUNsQixRQUFRLENBQUMsT0FBTyxDQUFDLElBQVMsQ0FBQyxDQUFDO2lCQUMvQjthQUNKO1NBQ0o7UUFBQyxPQUFPLEtBQVUsRUFBRTtZQUNqQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pCLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDMUI7U0FDSjtJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFPLElBQWdCLEVBQUUsS0FBUztRQUMzQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDL0M7UUFDRCxJQUFJLE9BQU8sR0FBc0MsU0FBUyxDQUFDO1FBQzNELElBQUksTUFBTSxHQUF3QyxTQUFTLENBQUM7UUFDNUQsTUFBTSxPQUFPLEdBQWUsSUFBSSxPQUFPLENBQ25DLENBQUMsR0FBd0IsRUFBRSxHQUEwQixFQUFRLEVBQUU7WUFDM0QsT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUNkLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDakIsQ0FBQyxDQUNKLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBbUI7WUFDN0IsSUFBSTtZQUNKLEtBQUs7WUFDTCxPQUFPO1lBQ1AsTUFBTTtTQUNULENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbkM7YUFBTTtZQUNILElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDL0I7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDUCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM1QjtRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxPQUFPLENBQ2QsQ0FBQyxHQUEwQixFQUFFLEdBQTBCLEVBQVEsRUFBRTtZQUM3RCxNQUFNLFVBQVUsR0FBbUIsV0FBVyxDQUFDLEdBQUcsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtvQkFDekIsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUMxQixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2I7WUFDTCxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSjtBQWxHRCxvQ0FrR0MiLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIFRhc2s8SSwgTz4gPSAoaW5wdXQ6IEkpID0+IFByb21pc2U8Tz4gfCB1bmRlZmluZWQ7XG5cbnR5cGUgSXRlbVRhc2s8SSwgTz4gPSB7XG4gICAgcmVhZG9ubHkgdGFzazogVGFzazxJLCBPPjtcbiAgICByZWFkb25seSBpbnB1dD86IEk7XG4gICAgcmVhZG9ubHkgcmVzb2x2ZT86ICgocmVzdWx0OiBPKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgICByZWFkb25seSByZWplY3Q/OiAoKHJlYXNvbjogYW55KSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IENMT1NFX0NIRUNLX0lOVEVSVkFMOiBudW1iZXIgPSA1MDA7XG5cbmV4cG9ydCBjbGFzcyBUYXNrRXhlY3V0b3Ige1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uY3VycmVuY3lMZXZlbDogbnVtYmVyO1xuICAgIHByaXZhdGUgcXVldWVkVGFza3M6IEl0ZW1UYXNrPGFueSwgYW55PltdO1xuICAgIHByaXZhdGUgYWN0aXZlV29ya2VyQ291bnQ6IG51bWJlciA9IDA7XG4gICAgcHJpdmF0ZSBjbG9zZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKGNvbmN1cnJlbmN5TGV2ZWw6IG51bWJlcikge1xuICAgICAgICB0aGlzLmNvbmN1cnJlbmN5TGV2ZWwgPSBjb25jdXJyZW5jeUxldmVsO1xuICAgICAgICB0aGlzLnF1ZXVlZFRhc2tzID0gW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZXhlY3V0ZVRhc2s8SSwgTz4odGFza0l0ZW06IEl0ZW1UYXNrPEksIE8+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZlV29ya2VyQ291bnQrKztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRhc2tQcm9taXNlOiBQcm9taXNlPE8+IHwgdW5kZWZpbmVkID0gdGFza0l0ZW0udGFzayhcbiAgICAgICAgICAgICAgICB0YXNrSXRlbS5pbnB1dCBhcyBJXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHRhc2tQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgdGFza1Byb21pc2VcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogTyk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhc2tJdGVtLnJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrSXRlbS5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhc2tJdGVtLnJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tJdGVtLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlV29ya2VyQ291bnQtLTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucXVldWVkVGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tJdGVtOiBJdGVtVGFzazxhbnksIGFueT4gfCB1bmRlZmluZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWV1ZWRUYXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFza0l0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGVUYXNrKHRhc2tJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVXb3JrZXJDb3VudC0tO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrSXRlbS5yZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tJdGVtLnJlc29sdmUobnVsbCBhcyBPKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlV29ya2VyQ291bnQtLTtcbiAgICAgICAgICAgIGlmICh0YXNrSXRlbS5yZWplY3QpIHtcbiAgICAgICAgICAgICAgICB0YXNrSXRlbS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZXhlY3V0ZTxJLCBPPih0YXNrOiBUYXNrPEksIE8+LCBpbnB1dD86IEkpOiBQcm9taXNlPE8+IHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Rhc2sgZXhlY3V0b3Igd2FzIGNsb3NlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNvbHZlOiAoKHJlc3VsdDogTykgPT4gdm9pZCkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCByZWplY3Q6ICgocmVhc29uOiBhbnkpID0+IHZvaWQpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBwcm9taXNlOiBQcm9taXNlPE8+ID0gbmV3IFByb21pc2UoXG4gICAgICAgICAgICAocmVzOiAocmVzdWx0OiBPKSA9PiB2b2lkLCByZWo6IChyZWFzb246IGFueSkgPT4gdm9pZCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUgPSByZXM7XG4gICAgICAgICAgICAgICAgcmVqZWN0ID0gcmVqO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpdGVtVGFzazogSXRlbVRhc2s8SSwgTz4gPSB7XG4gICAgICAgICAgICB0YXNrLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgcmVqZWN0LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVXb3JrZXJDb3VudCA+PSB0aGlzLmNvbmN1cnJlbmN5TGV2ZWwpIHtcbiAgICAgICAgICAgIHRoaXMucXVldWVkVGFza3MucHVzaChpdGVtVGFzayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9leGVjdXRlVGFzayhpdGVtVGFzayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKFxuICAgICAgICAgICAgKHJlczogKHJlc3VsdDogYW55KSA9PiB2b2lkLCByZWo6IChyZWFzb246IGFueSkgPT4gdm9pZCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVydmFsSWQ6IE5vZGVKUy5UaW1lb3V0ID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWN0aXZlV29ya2VyQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXMobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBDTE9TRV9DSEVDS19JTlRFUlZBTCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxufVxuIl19 |
| export * from './ServerTraceExporter'; |
| "use strict"; | ||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| var desc = Object.getOwnPropertyDescriptor(m, k); | ||
| if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
| desc = { enumerable: true, get: function() { return m[k]; } }; | ||
| } | ||
| Object.defineProperty(o, k2, desc); | ||
| }) : (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| o[k2] = m[k]; | ||
| })); | ||
| var __exportStar = (this && this.__exportStar) || function(m, exports) { | ||
| for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| __exportStar(require("./ServerTraceExporter"), exports); | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZXhwb3J0L3NlcnZlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0RBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9TZXJ2ZXJUcmFjZUV4cG9ydGVyJztcbiJdfQ== |
| import { TraceExporter } from '../TraceExporter'; | ||
| import { TraceRequest } from '../../domain/TraceRequest'; | ||
| export declare class ServerTraceExporter implements TraceExporter { | ||
| private readonly url; | ||
| constructor(serverHost: string, serverPort: number); | ||
| private static _generateURL; | ||
| export(traceRequest: TraceRequest): Promise<void>; | ||
| } |
| "use strict"; | ||
| var __importDefault = (this && this.__importDefault) || function (mod) { | ||
| return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.ServerTraceExporter = void 0; | ||
| const axios_1 = __importDefault(require("axios")); | ||
| class ServerTraceExporter { | ||
| constructor(serverHost, serverPort) { | ||
| this.url = ServerTraceExporter._generateURL(serverHost, serverPort); | ||
| } | ||
| static _generateURL(serverHost, serverPort) { | ||
| let serverExportURL = `${serverHost}:${serverPort}/export`; | ||
| if (!serverExportURL.startsWith('http://')) { | ||
| serverExportURL = `http://${serverExportURL}`; | ||
| } | ||
| return serverExportURL; | ||
| } | ||
| async export(traceRequest) { | ||
| var _a, _b; | ||
| try { | ||
| const res = await axios_1.default.post(this.url, traceRequest); | ||
| if (res.status / 100 != 2) { | ||
| throw new Error(`Invalid response (status code=${res.status}) from server endpoint ${this.url}`); | ||
| } | ||
| } | ||
| catch (err) { | ||
| if ((_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.status) { | ||
| throw new Error(`Invalid response (status code=${(_b = err === null || err === void 0 ? void 0 : err.response) === null || _b === void 0 ? void 0 : _b.status}) from server endpoint ${this.url}`); | ||
| } | ||
| else { | ||
| throw new Error(`Unable to export trace request to server endpoint ${this.url}: ${err.name} (${err.message})`); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| exports.ServerTraceExporter = ServerTraceExporter; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVyVHJhY2VFeHBvcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9leHBvcnQvc2VydmVyL1NlcnZlclRyYWNlRXhwb3J0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0Esa0RBQXlEO0FBRXpELE1BQWEsbUJBQW1CO0lBSTVCLFlBQVksVUFBa0IsRUFBRSxVQUFrQjtRQUM5QyxJQUFJLENBQUMsR0FBRyxHQUFHLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVPLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBa0IsRUFBRSxVQUFrQjtRQUM5RCxJQUFJLGVBQWUsR0FBVyxHQUFHLFVBQVUsSUFBSSxVQUFVLFNBQVMsQ0FBQztRQUNuRSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN4QyxlQUFlLEdBQUcsVUFBVSxlQUFlLEVBQUUsQ0FBQztTQUNqRDtRQUNELE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQTBCOztRQUNuQyxJQUFJO1lBQ0EsTUFBTSxHQUFHLEdBQWtCLE1BQU0sZUFBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3BFLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFO2dCQUN2QixNQUFNLElBQUksS0FBSyxDQUNYLGlDQUFpQyxHQUFHLENBQUMsTUFBTSwwQkFBMEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUNsRixDQUFDO2FBQ0w7U0FDSjtRQUFDLE9BQU8sR0FBcUIsRUFBRTtZQUM1QixJQUFJLE1BQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLFFBQVEsMENBQUUsTUFBTSxFQUFFO2dCQUN2QixNQUFNLElBQUksS0FBSyxDQUNYLGlDQUFpQyxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxRQUFRLDBDQUFFLE1BQU0sMEJBQTBCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FDN0YsQ0FBQzthQUNMO2lCQUFNO2dCQUNILE1BQU0sSUFBSSxLQUFLLENBQ1gscURBQXFELElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsT0FBTyxHQUFHLENBQ2hHLENBQUM7YUFDTDtTQUNKO0lBQ0wsQ0FBQztDQUVKO0FBckNELGtEQXFDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYWNlRXhwb3J0ZXIgfSBmcm9tICcuLi9UcmFjZUV4cG9ydGVyJztcbmltcG9ydCB7IFRyYWNlUmVxdWVzdCB9IGZyb20gJy4uLy4uL2RvbWFpbi9UcmFjZVJlcXVlc3QnO1xuXG5pbXBvcnQgYXhpb3MsIHsgQXhpb3NFcnJvciwgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJztcblxuZXhwb3J0IGNsYXNzIFNlcnZlclRyYWNlRXhwb3J0ZXIgaW1wbGVtZW50cyBUcmFjZUV4cG9ydGVyIHtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihzZXJ2ZXJIb3N0OiBzdHJpbmcsIHNlcnZlclBvcnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnVybCA9IFNlcnZlclRyYWNlRXhwb3J0ZXIuX2dlbmVyYXRlVVJMKHNlcnZlckhvc3QsIHNlcnZlclBvcnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9nZW5lcmF0ZVVSTChzZXJ2ZXJIb3N0OiBzdHJpbmcsIHNlcnZlclBvcnQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGxldCBzZXJ2ZXJFeHBvcnRVUkw6IHN0cmluZyA9IGAke3NlcnZlckhvc3R9OiR7c2VydmVyUG9ydH0vZXhwb3J0YDtcbiAgICAgICAgaWYgKCFzZXJ2ZXJFeHBvcnRVUkwuc3RhcnRzV2l0aCgnaHR0cDovLycpKSB7XG4gICAgICAgICAgICBzZXJ2ZXJFeHBvcnRVUkwgPSBgaHR0cDovLyR7c2VydmVyRXhwb3J0VVJMfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcnZlckV4cG9ydFVSTDtcbiAgICB9XG5cbiAgICBhc3luYyBleHBvcnQodHJhY2VSZXF1ZXN0OiBUcmFjZVJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlczogQXhpb3NSZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QodGhpcy51cmwsIHRyYWNlUmVxdWVzdCk7XG4gICAgICAgICAgICBpZiAocmVzLnN0YXR1cyAvIDEwMCAhPSAyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgSW52YWxpZCByZXNwb25zZSAoc3RhdHVzIGNvZGU9JHtyZXMuc3RhdHVzfSkgZnJvbSBzZXJ2ZXIgZW5kcG9pbnQgJHt0aGlzLnVybH1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyOiBBeGlvc0Vycm9yIHwgYW55KSB7XG4gICAgICAgICAgICBpZiAoZXJyPy5yZXNwb25zZT8uc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgSW52YWxpZCByZXNwb25zZSAoc3RhdHVzIGNvZGU9JHtlcnI/LnJlc3BvbnNlPy5zdGF0dXN9KSBmcm9tIHNlcnZlciBlbmRwb2ludCAke3RoaXMudXJsfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gZXhwb3J0IHRyYWNlIHJlcXVlc3QgdG8gc2VydmVyIGVuZHBvaW50ICR7dGhpcy51cmx9OiAke2Vyci5uYW1lfSAoJHtlcnIubWVzc2FnZX0pYFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ== |
| export {}; |
| "use strict"; | ||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| var desc = Object.getOwnPropertyDescriptor(m, k); | ||
| if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
| desc = { enumerable: true, get: function() { return m[k]; } }; | ||
| } | ||
| Object.defineProperty(o, k2, desc); | ||
| }) : (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| o[k2] = m[k]; | ||
| })); | ||
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
| Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
| }) : function(o, v) { | ||
| o["default"] = v; | ||
| }); | ||
| var __importStar = (this && this.__importStar) || function (mod) { | ||
| if (mod && mod.__esModule) return mod; | ||
| var result = {}; | ||
| if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
| __setModuleDefault(result, mod); | ||
| return result; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| const server_1 = require("./server"); | ||
| const logger = __importStar(require("../logger")); | ||
| const exit_1 = require("../exit"); | ||
| const utils_1 = require("../utils"); | ||
| const cleaner_1 = require("./cleaner"); | ||
| const constants_1 = require("../constants"); | ||
| const SERVER_HOST = 'localhost'; | ||
| const SERVER_PORT = parseInt(process.env.OTEL_CLI_SERVER_PORT || '') || constants_1.DEFAULT_SERVER_PORT; | ||
| const PARENT_PROC_ID = parseInt(process.env.OTEL_CLI_SERVER_PPID || ''); | ||
| function _createServerController() { | ||
| const exporterOTLPProtocol = process.env.OTEL_EXPORTER_OTLP_PROTOCOL; | ||
| const exporterOTLPTracesEndpoint = process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT; | ||
| const exporterOTLPHeaderValues = process.env | ||
| .OTEL_EXPORTER_OTLP_HEADERS | ||
| ? process.env.OTEL_EXPORTER_OTLP_HEADERS.split(',') | ||
| : []; | ||
| const exporterOTLPHeaders = (0, utils_1.parseKeyValue)(exporterOTLPHeaderValues); | ||
| if (!exporterOTLPProtocol) { | ||
| logger.error('OTEL Exporter OTLP protocol was not specified'); | ||
| (0, exit_1.exit)(1); | ||
| return; | ||
| } | ||
| if (!exporterOTLPTracesEndpoint) { | ||
| logger.error('OTEL Exporter OTLP traces endpoint was not specified'); | ||
| (0, exit_1.exit)(1); | ||
| return; | ||
| } | ||
| return (0, server_1.createServerController)(exporterOTLPProtocol, exporterOTLPTracesEndpoint, exporterOTLPHeaders); | ||
| } | ||
| async function _start() { | ||
| const serverController = _createServerController(); | ||
| if (!serverController) { | ||
| logger.error('Unable to create server controller'); | ||
| (0, exit_1.exit)(1); | ||
| } | ||
| else { | ||
| (0, server_1.startServer)(SERVER_HOST, SERVER_PORT, serverController); | ||
| await (0, cleaner_1.startServerCleaner)(serverController, PARENT_PROC_ID); | ||
| } | ||
| } | ||
| _start(); | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZlci9ib290c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFDQUlrQjtBQUNsQixrREFBb0M7QUFDcEMsa0NBQStCO0FBQy9CLG9DQUF5QztBQUN6Qyx1Q0FBK0M7QUFDL0MsNENBQW1EO0FBRW5ELE1BQU0sV0FBVyxHQUFXLFdBQVcsQ0FBQztBQUN4QyxNQUFNLFdBQVcsR0FDYixRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsSUFBSSwrQkFBbUIsQ0FBQztBQUM1RSxNQUFNLGNBQWMsR0FBVyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUVoRixTQUFTLHVCQUF1QjtJQUM1QixNQUFNLG9CQUFvQixHQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDO0lBQzVDLE1BQU0sMEJBQTBCLEdBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLENBQUM7SUFDbkQsTUFBTSx3QkFBd0IsR0FBYSxPQUFPLENBQUMsR0FBRztTQUNqRCwwQkFBMEI7UUFDM0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNuRCxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1QsTUFBTSxtQkFBbUIsR0FBd0IsSUFBQSxxQkFBYSxFQUMxRCx3QkFBd0IsQ0FDM0IsQ0FBQztJQUVGLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtRQUN2QixNQUFNLENBQUMsS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDOUQsSUFBQSxXQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixPQUFPO0tBQ1Y7SUFFRCxJQUFJLENBQUMsMEJBQTBCLEVBQUU7UUFDN0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1FBQ3JFLElBQUEsV0FBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsT0FBTztLQUNWO0lBRUQsT0FBTyxJQUFBLCtCQUFzQixFQUN6QixvQkFBb0IsRUFDcEIsMEJBQTBCLEVBQzFCLG1CQUFtQixDQUN0QixDQUFDO0FBQ04sQ0FBQztBQUVELEtBQUssVUFBVSxNQUFNO0lBQ2pCLE1BQU0sZ0JBQWdCLEdBQ2xCLHVCQUF1QixFQUFFLENBQUM7SUFDOUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1FBQ25CLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUNuRCxJQUFBLFdBQUksRUFBQyxDQUFDLENBQUMsQ0FBQztLQUNYO1NBQU07UUFDSCxJQUFBLG9CQUFXLEVBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sSUFBQSw0QkFBa0IsRUFBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQztLQUM5RDtBQUNMLENBQUM7QUFFRCxNQUFNLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgc3RhcnRTZXJ2ZXIsXG4gICAgY3JlYXRlU2VydmVyQ29udHJvbGxlcixcbiAgICBTZXJ2ZXJDb250cm9sbGVyLFxufSBmcm9tICcuL3NlcnZlcic7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IGV4aXQgfSBmcm9tICcuLi9leGl0JztcbmltcG9ydCB7IHBhcnNlS2V5VmFsdWUgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBzdGFydFNlcnZlckNsZWFuZXIgfSBmcm9tICcuL2NsZWFuZXInO1xuaW1wb3J0IHsgREVGQVVMVF9TRVJWRVJfUE9SVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmNvbnN0IFNFUlZFUl9IT1NUOiBzdHJpbmcgPSAnbG9jYWxob3N0JztcbmNvbnN0IFNFUlZFUl9QT1JUOiBudW1iZXIgPVxuICAgIHBhcnNlSW50KHByb2Nlc3MuZW52Lk9URUxfQ0xJX1NFUlZFUl9QT1JUIHx8ICcnKSB8fCBERUZBVUxUX1NFUlZFUl9QT1JUO1xuY29uc3QgUEFSRU5UX1BST0NfSUQ6IG51bWJlciA9IHBhcnNlSW50KHByb2Nlc3MuZW52Lk9URUxfQ0xJX1NFUlZFUl9QUElEIHx8ICcnKTtcblxuZnVuY3Rpb24gX2NyZWF0ZVNlcnZlckNvbnRyb2xsZXIoKTogU2VydmVyQ29udHJvbGxlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZXhwb3J0ZXJPVExQUHJvdG9jb2w6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICAgIHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9QUk9UT0NPTDtcbiAgICBjb25zdCBleHBvcnRlck9UTFBUcmFjZXNFbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgICAgcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVDtcbiAgICBjb25zdCBleHBvcnRlck9UTFBIZWFkZXJWYWx1ZXM6IHN0cmluZ1tdID0gcHJvY2Vzcy5lbnZcbiAgICAgICAgLk9URUxfRVhQT1JURVJfT1RMUF9IRUFERVJTXG4gICAgICAgID8gcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0hFQURFUlMuc3BsaXQoJywnKVxuICAgICAgICA6IFtdO1xuICAgIGNvbnN0IGV4cG9ydGVyT1RMUEhlYWRlcnM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBwYXJzZUtleVZhbHVlKFxuICAgICAgICBleHBvcnRlck9UTFBIZWFkZXJWYWx1ZXNcbiAgICApO1xuXG4gICAgaWYgKCFleHBvcnRlck9UTFBQcm90b2NvbCkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ09URUwgRXhwb3J0ZXIgT1RMUCBwcm90b2NvbCB3YXMgbm90IHNwZWNpZmllZCcpO1xuICAgICAgICBleGl0KDEpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFleHBvcnRlck9UTFBUcmFjZXNFbmRwb2ludCkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ09URUwgRXhwb3J0ZXIgT1RMUCB0cmFjZXMgZW5kcG9pbnQgd2FzIG5vdCBzcGVjaWZpZWQnKTtcbiAgICAgICAgZXhpdCgxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVTZXJ2ZXJDb250cm9sbGVyKFxuICAgICAgICBleHBvcnRlck9UTFBQcm90b2NvbCxcbiAgICAgICAgZXhwb3J0ZXJPVExQVHJhY2VzRW5kcG9pbnQsXG4gICAgICAgIGV4cG9ydGVyT1RMUEhlYWRlcnNcbiAgICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfc3RhcnQoKSB7XG4gICAgY29uc3Qgc2VydmVyQ29udHJvbGxlcjogU2VydmVyQ29udHJvbGxlciB8IHVuZGVmaW5lZCA9XG4gICAgICAgIF9jcmVhdGVTZXJ2ZXJDb250cm9sbGVyKCk7XG4gICAgaWYgKCFzZXJ2ZXJDb250cm9sbGVyKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIGNyZWF0ZSBzZXJ2ZXIgY29udHJvbGxlcicpO1xuICAgICAgICBleGl0KDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0U2VydmVyKFNFUlZFUl9IT1NULCBTRVJWRVJfUE9SVCwgc2VydmVyQ29udHJvbGxlcik7XG4gICAgICAgIGF3YWl0IHN0YXJ0U2VydmVyQ2xlYW5lcihzZXJ2ZXJDb250cm9sbGVyLCBQQVJFTlRfUFJPQ19JRCk7XG4gICAgfVxufVxuXG5fc3RhcnQoKTtcbiJdfQ== |
| import { ServerController } from './server'; | ||
| export declare function startServerCleaner(serverController: ServerController, ppid: number): Promise<void>; |
| "use strict"; | ||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| var desc = Object.getOwnPropertyDescriptor(m, k); | ||
| if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
| desc = { enumerable: true, get: function() { return m[k]; } }; | ||
| } | ||
| Object.defineProperty(o, k2, desc); | ||
| }) : (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| o[k2] = m[k]; | ||
| })); | ||
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
| Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
| }) : function(o, v) { | ||
| o["default"] = v; | ||
| }); | ||
| var __importStar = (this && this.__importStar) || function (mod) { | ||
| if (mod && mod.__esModule) return mod; | ||
| var result = {}; | ||
| if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
| __setModuleDefault(result, mod); | ||
| return result; | ||
| }; | ||
| var __importDefault = (this && this.__importDefault) || function (mod) { | ||
| return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.startServerCleaner = void 0; | ||
| const logger = __importStar(require("../logger")); | ||
| const exit_1 = require("../exit"); | ||
| const find_process_1 = __importDefault(require("find-process")); | ||
| const ZOMBIE_SERVER_CHECK_PERIOD = 5000; | ||
| async function _getParentProcessInfo(ppid) { | ||
| try { | ||
| const processList = await (0, find_process_1.default)('pid', ppid); | ||
| if (!processList || !processList.length) { | ||
| return undefined; | ||
| } | ||
| else { | ||
| return processList[0]; | ||
| } | ||
| } | ||
| catch (err) { | ||
| logger.error(`Error occurred while checking parent process of the OTEL CLI server`); | ||
| return undefined; | ||
| } | ||
| } | ||
| function _hashProcessInfo(processInfo) { | ||
| if (!processInfo) { | ||
| return ''; | ||
| } | ||
| else { | ||
| return JSON.stringify(processInfo); | ||
| } | ||
| } | ||
| async function _getParentProcessInfoHash(ppid) { | ||
| const parentProcessInfo = await _getParentProcessInfo(ppid); | ||
| return _hashProcessInfo(parentProcessInfo); | ||
| } | ||
| async function startServerCleaner(serverController, ppid) { | ||
| if (!ppid) { | ||
| return Promise.resolve(); | ||
| } | ||
| const cleaner = async function () { | ||
| await serverController.shutdown(); | ||
| (0, exit_1.exit)(0); | ||
| }; | ||
| // Gracefully shutdown server on parent process exit | ||
| const initialParentProcessInfoHash = await _getParentProcessInfoHash(ppid); | ||
| setInterval(async () => { | ||
| const currentParentProcessInfoHash = await _getParentProcessInfoHash(ppid); | ||
| if (!currentParentProcessInfoHash || | ||
| initialParentProcessInfoHash != currentParentProcessInfoHash) { | ||
| cleaner(); | ||
| } | ||
| }, ZOMBIE_SERVER_CHECK_PERIOD); | ||
| // Gracefully shutdown server on current process exit | ||
| [ | ||
| `exit`, | ||
| `uncaughtException`, | ||
| `SIGINT`, | ||
| `SIGTERM`, | ||
| `SIGUSR1`, | ||
| `SIGUSR2`, | ||
| ].forEach((eventType) => { | ||
| process.on(eventType, () => cleaner()); | ||
| }); | ||
| } | ||
| exports.startServerCleaner = startServerCleaner; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2ZXIvY2xlYW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUFvQztBQUNwQyxrQ0FBK0I7QUFHL0IsZ0VBQWdDO0FBRWhDLE1BQU0sMEJBQTBCLEdBQVcsSUFBSSxDQUFDO0FBV2hELEtBQUssVUFBVSxxQkFBcUIsQ0FDaEMsSUFBWTtJQUVaLElBQUk7UUFDQSxNQUFNLFdBQVcsR0FBa0IsTUFBTSxJQUFBLHNCQUFJLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFO1lBQ3JDLE9BQU8sU0FBUyxDQUFDO1NBQ3BCO2FBQU07WUFDSCxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6QjtLQUNKO0lBQUMsT0FBTyxHQUFRLEVBQUU7UUFDZixNQUFNLENBQUMsS0FBSyxDQUNSLHFFQUFxRSxDQUN4RSxDQUFDO1FBQ0YsT0FBTyxTQUFTLENBQUM7S0FDcEI7QUFDTCxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxXQUF5QjtJQUMvQyxJQUFJLENBQUMsV0FBVyxFQUFFO1FBQ2QsT0FBTyxFQUFFLENBQUM7S0FDYjtTQUFNO1FBQ0gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQ3RDO0FBQ0wsQ0FBQztBQUVELEtBQUssVUFBVSx5QkFBeUIsQ0FBQyxJQUFZO0lBQ2pELE1BQU0saUJBQWlCLEdBQ25CLE1BQU0scUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsT0FBTyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFTSxLQUFLLFVBQVUsa0JBQWtCLENBQ3BDLGdCQUFrQyxFQUNsQyxJQUFZO0lBRVosSUFBSSxDQUFDLElBQUksRUFBRTtRQUNQLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQzVCO0lBRUQsTUFBTSxPQUFPLEdBQWUsS0FBSztRQUM3QixNQUFNLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLElBQUEsV0FBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQyxDQUFDO0lBRUYsb0RBQW9EO0lBQ3BELE1BQU0sNEJBQTRCLEdBQzlCLE1BQU0seUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsV0FBVyxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ25CLE1BQU0sNEJBQTRCLEdBQzlCLE1BQU0seUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsSUFDSSxDQUFDLDRCQUE0QjtZQUM3Qiw0QkFBNEIsSUFBSSw0QkFBNEIsRUFDOUQ7WUFDRSxPQUFPLEVBQUUsQ0FBQztTQUNiO0lBQ0wsQ0FBQyxFQUFFLDBCQUEwQixDQUFDLENBQUM7SUFFL0IscURBQXFEO0lBQ3JEO1FBQ0ksTUFBTTtRQUNOLG1CQUFtQjtRQUNuQixRQUFRO1FBQ1IsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO0tBQ1osQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUNwQixPQUFPLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQXRDRCxnREFzQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IGV4aXQgfSBmcm9tICcuLi9leGl0JztcbmltcG9ydCB7IFNlcnZlckNvbnRyb2xsZXIgfSBmcm9tICcuL3NlcnZlcic7XG5cbmltcG9ydCBmaW5kIGZyb20gJ2ZpbmQtcHJvY2Vzcyc7XG5cbmNvbnN0IFpPTUJJRV9TRVJWRVJfQ0hFQ0tfUEVSSU9EOiBudW1iZXIgPSA1MDAwO1xuXG5pbnRlcmZhY2UgUHJvY2Vzc0luZm8ge1xuICAgIHBpZDogbnVtYmVyO1xuICAgIHBwaWQ/OiBudW1iZXI7XG4gICAgdWlkPzogbnVtYmVyO1xuICAgIGdpZD86IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgY21kOiBzdHJpbmc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9nZXRQYXJlbnRQcm9jZXNzSW5mbyhcbiAgICBwcGlkOiBudW1iZXJcbik6IFByb21pc2U8UHJvY2Vzc0luZm8gfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm9jZXNzTGlzdDogUHJvY2Vzc0luZm9bXSA9IGF3YWl0IGZpbmQoJ3BpZCcsIHBwaWQpO1xuICAgICAgICBpZiAoIXByb2Nlc3NMaXN0IHx8ICFwcm9jZXNzTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzc0xpc3RbMF07XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICBgRXJyb3Igb2NjdXJyZWQgd2hpbGUgY2hlY2tpbmcgcGFyZW50IHByb2Nlc3Mgb2YgdGhlIE9URUwgQ0xJIHNlcnZlcmBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9oYXNoUHJvY2Vzc0luZm8ocHJvY2Vzc0luZm8/OiBQcm9jZXNzSW5mbyk6IHN0cmluZyB7XG4gICAgaWYgKCFwcm9jZXNzSW5mbykge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHByb2Nlc3NJbmZvKTtcbiAgICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9nZXRQYXJlbnRQcm9jZXNzSW5mb0hhc2gocHBpZDogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBwYXJlbnRQcm9jZXNzSW5mbzogUHJvY2Vzc0luZm8gfCB1bmRlZmluZWQgPVxuICAgICAgICBhd2FpdCBfZ2V0UGFyZW50UHJvY2Vzc0luZm8ocHBpZCk7XG4gICAgcmV0dXJuIF9oYXNoUHJvY2Vzc0luZm8ocGFyZW50UHJvY2Vzc0luZm8pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRTZXJ2ZXJDbGVhbmVyKFxuICAgIHNlcnZlckNvbnRyb2xsZXI6IFNlcnZlckNvbnRyb2xsZXIsXG4gICAgcHBpZDogbnVtYmVyXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXBwaWQpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsZWFuZXI6ICgpID0+IHZvaWQgPSBhc3luYyBmdW5jdGlvbiAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHNlcnZlckNvbnRyb2xsZXIuc2h1dGRvd24oKTtcbiAgICAgICAgZXhpdCgwKTtcbiAgICB9O1xuXG4gICAgLy8gR3JhY2VmdWxseSBzaHV0ZG93biBzZXJ2ZXIgb24gcGFyZW50IHByb2Nlc3MgZXhpdFxuICAgIGNvbnN0IGluaXRpYWxQYXJlbnRQcm9jZXNzSW5mb0hhc2g6IHN0cmluZyA9XG4gICAgICAgIGF3YWl0IF9nZXRQYXJlbnRQcm9jZXNzSW5mb0hhc2gocHBpZCk7XG4gICAgc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50UGFyZW50UHJvY2Vzc0luZm9IYXNoOiBzdHJpbmcgPVxuICAgICAgICAgICAgYXdhaXQgX2dldFBhcmVudFByb2Nlc3NJbmZvSGFzaChwcGlkKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWN1cnJlbnRQYXJlbnRQcm9jZXNzSW5mb0hhc2ggfHxcbiAgICAgICAgICAgIGluaXRpYWxQYXJlbnRQcm9jZXNzSW5mb0hhc2ggIT0gY3VycmVudFBhcmVudFByb2Nlc3NJbmZvSGFzaFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNsZWFuZXIoKTtcbiAgICAgICAgfVxuICAgIH0sIFpPTUJJRV9TRVJWRVJfQ0hFQ0tfUEVSSU9EKTtcblxuICAgIC8vIEdyYWNlZnVsbHkgc2h1dGRvd24gc2VydmVyIG9uIGN1cnJlbnQgcHJvY2VzcyBleGl0XG4gICAgW1xuICAgICAgICBgZXhpdGAsXG4gICAgICAgIGB1bmNhdWdodEV4Y2VwdGlvbmAsXG4gICAgICAgIGBTSUdJTlRgLFxuICAgICAgICBgU0lHVEVSTWAsXG4gICAgICAgIGBTSUdVU1IxYCxcbiAgICAgICAgYFNJR1VTUjJgLFxuICAgIF0uZm9yRWFjaCgoZXZlbnRUeXBlKSA9PiB7XG4gICAgICAgIHByb2Nlc3Mub24oZXZlbnRUeXBlLCAoKSA9PiBjbGVhbmVyKCkpO1xuICAgIH0pO1xufVxuIl19 |
| export * from './server'; | ||
| export * from './cleaner'; |
| "use strict"; | ||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| var desc = Object.getOwnPropertyDescriptor(m, k); | ||
| if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
| desc = { enumerable: true, get: function() { return m[k]; } }; | ||
| } | ||
| Object.defineProperty(o, k2, desc); | ||
| }) : (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| o[k2] = m[k]; | ||
| })); | ||
| var __exportStar = (this && this.__exportStar) || function(m, exports) { | ||
| for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| __exportStar(require("./server"), exports); | ||
| __exportStar(require("./cleaner"), exports); | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBeUI7QUFDekIsNENBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zZXJ2ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9jbGVhbmVyJztcbiJdfQ== |
| /// <reference types="node" /> | ||
| import { Server } from 'http'; | ||
| import { TraceRequest } from '../domain/TraceRequest'; | ||
| import { TaskExecutor } from '../executor'; | ||
| import { TraceExporter } from '../export'; | ||
| export declare function startServer(host: string, port: number, serverController: ServerController): Server; | ||
| export declare class ServerController { | ||
| private readonly taskExecutor; | ||
| private readonly traceExporter; | ||
| private serverShutdown; | ||
| constructor(taskExecutor: TaskExecutor, traceExporter: TraceExporter); | ||
| export(traceRequest: TraceRequest): Promise<void>; | ||
| shutdown(): Promise<void>; | ||
| } | ||
| export declare function createServerController(exporterOTLPProtocol: string, exporterOTLPTracesEndpoint: string, exporterOTLPHeaders: Map<string, string>): ServerController | undefined; |
| "use strict"; | ||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| var desc = Object.getOwnPropertyDescriptor(m, k); | ||
| if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
| desc = { enumerable: true, get: function() { return m[k]; } }; | ||
| } | ||
| Object.defineProperty(o, k2, desc); | ||
| }) : (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| o[k2] = m[k]; | ||
| })); | ||
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
| Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
| }) : function(o, v) { | ||
| o["default"] = v; | ||
| }); | ||
| var __importStar = (this && this.__importStar) || function (mod) { | ||
| if (mod && mod.__esModule) return mod; | ||
| var result = {}; | ||
| if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
| __setModuleDefault(result, mod); | ||
| return result; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.createServerController = exports.ServerController = exports.startServer = void 0; | ||
| const http_1 = require("http"); | ||
| const logger = __importStar(require("../logger")); | ||
| const executor_1 = require("../executor"); | ||
| const export_1 = require("../export"); | ||
| const exit_1 = require("../exit"); | ||
| const TASK_CONCURRENCY_LEVEL = 10; | ||
| const SERVER_SHUTDOWN_GRACE_PERIOD = 1000; | ||
| function _getRequestBody(request) { | ||
| return new Promise((resolve) => { | ||
| const bodyParts = []; | ||
| request | ||
| .on('data', (chunk) => { | ||
| bodyParts.push(chunk); | ||
| }) | ||
| .on('end', () => { | ||
| const bodyStr = Buffer.concat(bodyParts).toString(); | ||
| resolve(bodyStr); | ||
| }); | ||
| }); | ||
| } | ||
| function startServer(host, port, serverController) { | ||
| const server = (0, http_1.createServer)(async (request, response) => { | ||
| try { | ||
| switch (request.url) { | ||
| case '/export': { | ||
| if (request.method === 'POST') { | ||
| const requestBody = await _getRequestBody(request); | ||
| const traceRequest = JSON.parse(requestBody); | ||
| await serverController.export(traceRequest); | ||
| response.end(); | ||
| } | ||
| else { | ||
| response.statusCode = 405; | ||
| response.end(); | ||
| } | ||
| break; | ||
| } | ||
| case '/shutdown': { | ||
| if (request.method === 'DELETE') { | ||
| await serverController.shutdown(); | ||
| response.end(); | ||
| } | ||
| else { | ||
| response.statusCode = 405; | ||
| response.end(); | ||
| } | ||
| break; | ||
| } | ||
| default: { | ||
| response.statusCode = 404; | ||
| response.end(); | ||
| } | ||
| } | ||
| } | ||
| catch (error) { | ||
| logger.error(error); | ||
| response.statusCode = 500; | ||
| response.end(JSON.stringify({ | ||
| type: error.type, | ||
| message: error.message, | ||
| })); | ||
| } | ||
| }); | ||
| server.listen(port, host, () => { | ||
| logger.info(`OTEL CLI server listening on port ${port}`); | ||
| }); | ||
| return server; | ||
| } | ||
| exports.startServer = startServer; | ||
| class ServerController { | ||
| constructor(taskExecutor, traceExporter) { | ||
| this.serverShutdown = false; | ||
| this.taskExecutor = taskExecutor; | ||
| this.traceExporter = traceExporter; | ||
| } | ||
| export(traceRequest) { | ||
| return this.taskExecutor.execute(async () => { | ||
| try { | ||
| await this.traceExporter.export(traceRequest); | ||
| } | ||
| catch (err) { | ||
| logger.error(`Unable to export trace request: ${traceRequest}`, err); | ||
| } | ||
| }); | ||
| } | ||
| async shutdown() { | ||
| if (this.serverShutdown) { | ||
| return Promise.resolve(); | ||
| } | ||
| logger.info('Shutting down OTEL CLI server ...'); | ||
| try { | ||
| await this.taskExecutor.close(); | ||
| this.serverShutdown = true; | ||
| setTimeout(() => { | ||
| (0, exit_1.exit)(0); | ||
| }, SERVER_SHUTDOWN_GRACE_PERIOD); | ||
| } | ||
| catch (err) { | ||
| logger.error(`Error occurred while closing task executor`, err); | ||
| (0, exit_1.exit)(1); | ||
| } | ||
| } | ||
| } | ||
| exports.ServerController = ServerController; | ||
| function createServerController(exporterOTLPProtocol, exporterOTLPTracesEndpoint, exporterOTLPHeaders) { | ||
| const taskExecutor = new executor_1.TaskExecutor(TASK_CONCURRENCY_LEVEL); | ||
| const traceExporter = (0, export_1.createTraceExporter)(exporterOTLPProtocol, exporterOTLPTracesEndpoint, exporterOTLPHeaders); | ||
| return new ServerController(taskExecutor, traceExporter); | ||
| } | ||
| exports.createServerController = createServerController; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZlci9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBNkU7QUFDN0Usa0RBQW9DO0FBRXBDLDBDQUEyQztBQUMzQyxzQ0FBK0Q7QUFDL0Qsa0NBQStCO0FBRS9CLE1BQU0sc0JBQXNCLEdBQVcsRUFBRSxDQUFDO0FBQzFDLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxDQUFDO0FBRTFDLFNBQVMsZUFBZSxDQUFDLE9BQXdCO0lBQzdDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUMzQixNQUFNLFNBQVMsR0FBaUIsRUFBRSxDQUFDO1FBQ25DLE9BQU87YUFDRixFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBaUIsRUFBRSxFQUFFO1lBQzlCLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDO2FBQ0QsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDWixNQUFNLE9BQU8sR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELFNBQWdCLFdBQVcsQ0FDdkIsSUFBWSxFQUNaLElBQVksRUFDWixnQkFBa0M7SUFFbEMsTUFBTSxNQUFNLEdBQVcsSUFBQSxtQkFBWSxFQUMvQixLQUFLLEVBQUUsT0FBd0IsRUFBRSxRQUF3QixFQUFFLEVBQUU7UUFDekQsSUFBSTtZQUNBLFFBQVEsT0FBTyxDQUFDLEdBQUcsRUFBRTtnQkFDakIsS0FBSyxTQUFTLENBQUMsQ0FBQztvQkFDWixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssTUFB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QUUsNEJBQTRCLENBQUMsQ0FBQztTQUNwQztRQUFDLE9BQU8sR0FBUSxFQUFFO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNoRSxJQUFBLFdBQUksRUFBQyxDQUFDLENBQUMsQ0FBQztTQUNYO0lBQ0wsQ0FBQztDQUNKO0FBeENELDRDQXdDQztBQUVELFNBQWdCLHNCQUFzQixDQUNsQyxvQkFBNEIsRUFDNUIsMEJBQWtDLEVBQ2xDLG1CQUF3QztJQUV4QyxNQUFNLFlBQVksR0FBaUIsSUFBSSx1QkFBWSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDNUUsTUFBTSxhQUFhLEdBQWtCLElBQUEsNEJBQW1CLEVBQ3BELG9CQUFvQixFQUNwQiwwQkFBMEIsRUFDMUIsbUJBQW1CLENBQ3RCLENBQUM7SUFDRixPQUFPLElBQUksZ0JBQWdCLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFaRCx3REFZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVNlcnZlciwgSW5jb21pbmdNZXNzYWdlLCBTZXJ2ZXIsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IFRyYWNlUmVxdWVzdCB9IGZyb20gJy4uL2RvbWFpbi9UcmFjZVJlcXVlc3QnO1xuaW1wb3J0IHsgVGFza0V4ZWN1dG9yIH0gZnJvbSAnLi4vZXhlY3V0b3InO1xuaW1wb3J0IHsgY3JlYXRlVHJhY2VFeHBvcnRlciwgVHJhY2VFeHBvcnRlciB9IGZyb20gJy4uL2V4cG9ydCc7XG5pbXBvcnQgeyBleGl0IH0gZnJvbSAnLi4vZXhpdCc7XG5cbmNvbnN0IFRBU0tfQ09OQ1VSUkVOQ1lfTEVWRUw6IG51bWJlciA9IDEwO1xuY29uc3QgU0VSVkVSX1NIVVRET1dOX0dSQUNFX1BFUklPRCA9IDEwMDA7XG5cbmZ1bmN0aW9uIF9nZXRSZXF1ZXN0Qm9keShyZXF1ZXN0OiBJbmNvbWluZ01lc3NhZ2UpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBjb25zdCBib2R5UGFydHM6IFVpbnQ4QXJyYXlbXSA9IFtdO1xuICAgICAgICByZXF1ZXN0XG4gICAgICAgICAgICAub24oJ2RhdGEnLCAoY2h1bms6IFVpbnQ4QXJyYXkpID0+IHtcbiAgICAgICAgICAgICAgICBib2R5UGFydHMucHVzaChjaHVuayk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keVN0cjogc3RyaW5nID0gQnVmZmVyLmNvbmNhdChib2R5UGFydHMpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShib2R5U3RyKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTZXJ2ZXIoXG4gICAgaG9zdDogc3RyaW5nLFxuICAgIHBvcnQ6IG51bWJlcixcbiAgICBzZXJ2ZXJDb250cm9sbGVyOiBTZXJ2ZXJDb250cm9sbGVyXG4pOiBTZXJ2ZXIge1xuICAgIGNvbnN0IHNlcnZlcjogU2VydmVyID0gY3JlYXRlU2VydmVyKFxuICAgICAgICBhc3luYyAocmVxdWVzdDogSW5jb21pbmdNZXNzYWdlLCByZXNwb25zZTogU2VydmVyUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChyZXF1ZXN0LnVybCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcvZXhwb3J0Jzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QubWV0aG9kID09PSAnUE9TVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keTogc3RyaW5nID0gYXdhaXQgX2dldFJlcXVlc3RCb2R5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFjZVJlcXVlc3Q6IFRyYWNlUmVxdWVzdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocmVxdWVzdEJvZHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlcnZlckNvbnRyb2xsZXIuZXhwb3J0KHRyYWNlUmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1c0NvZGUgPSA0MDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlICcvc2h1dGRvd24nOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdERUxFVEUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2VydmVyQ29udHJvbGxlci5zaHV0ZG93bigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5zdGF0dXNDb2RlID0gNDA1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9IDQwNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9IDUwMDtcbiAgICAgICAgICAgICAgICByZXNwb25zZS5lbmQoXG4gICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGVycm9yLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgc2VydmVyLmxpc3Rlbihwb3J0LCBob3N0LCAoKSA9PiB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBPVEVMIENMSSBzZXJ2ZXIgbGlzdGVuaW5nIG9uIHBvcnQgJHtwb3J0fWApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlcnZlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFNlcnZlckNvbnRyb2xsZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdGFza0V4ZWN1dG9yOiBUYXNrRXhlY3V0b3I7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFjZUV4cG9ydGVyOiBUcmFjZUV4cG9ydGVyO1xuICAgIHByaXZhdGUgc2VydmVyU2h1dGRvd246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHRhc2tFeGVjdXRvcjogVGFza0V4ZWN1dG9yLCB0cmFjZUV4cG9ydGVyOiBUcmFjZUV4cG9ydGVyKSB7XG4gICAgICAgIHRoaXMudGFza0V4ZWN1dG9yID0gdGFza0V4ZWN1dG9yO1xuICAgICAgICB0aGlzLnRyYWNlRXhwb3J0ZXIgPSB0cmFjZUV4cG9ydGVyO1xuICAgIH1cblxuICAgIGV4cG9ydCh0cmFjZVJlcXVlc3Q6IFRyYWNlUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy50YXNrRXhlY3V0b3IuZXhlY3V0ZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudHJhY2VFeHBvcnRlci5leHBvcnQodHJhY2VSZXF1ZXN0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgVW5hYmxlIHRvIGV4cG9ydCB0cmFjZSByZXF1ZXN0OiAke3RyYWNlUmVxdWVzdH1gLFxuICAgICAgICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuc2VydmVyU2h1dGRvd24pIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvZ2dlci5pbmZvKCdTaHV0dGluZyBkb3duIE9URUwgQ0xJIHNlcnZlciAuLi4nKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudGFza0V4ZWN1dG9yLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLnNlcnZlclNodXRkb3duID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4aXQoMCk7XG4gICAgICAgICAgICB9LCBTRVJWRVJfU0hVVERPV05fR1JBQ0VfUEVSSU9EKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgRXJyb3Igb2NjdXJyZWQgd2hpbGUgY2xvc2luZyB0YXNrIGV4ZWN1dG9yYCwgZXJyKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXJ2ZXJDb250cm9sbGVyKFxuICAgIGV4cG9ydGVyT1RMUFByb3RvY29sOiBzdHJpbmcsXG4gICAgZXhwb3J0ZXJPVExQVHJhY2VzRW5kcG9pbnQ6IHN0cmluZyxcbiAgICBleHBvcnRlck9UTFBIZWFkZXJzOiBNYXA8c3RyaW5nLCBzdHJpbmc+XG4pOiBTZXJ2ZXJDb250cm9sbGVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0YXNrRXhlY3V0b3I6IFRhc2tFeGVjdXRvciA9IG5ldyBUYXNrRXhlY3V0b3IoVEFTS19DT05DVVJSRU5DWV9MRVZFTCk7XG4gICAgY29uc3QgdHJhY2VFeHBvcnRlcjogVHJhY2VFeHBvcnRlciA9IGNyZWF0ZVRyYWNlRXhwb3J0ZXIoXG4gICAgICAgIGV4cG9ydGVyT1RMUFByb3RvY29sLFxuICAgICAgICBleHBvcnRlck9UTFBUcmFjZXNFbmRwb2ludCxcbiAgICAgICAgZXhwb3J0ZXJPVExQSGVhZGVyc1xuICAgICk7XG4gICAgcmV0dXJuIG5ldyBTZXJ2ZXJDb250cm9sbGVyKHRhc2tFeGVjdXRvciwgdHJhY2VFeHBvcnRlcik7XG59XG4iXX0= |
+11
-0
@@ -6,2 +6,13 @@ # Change Log | ||
| <a name="1.0.1"></a> | ||
| # 1.0.1 (2023-07-09) | ||
| ### Fixes | ||
| * Fix key value parsing while handling attributes and headers | ||
| ### Improvements | ||
| * Log uncaught errors occurred while executing commands | ||
| <a name="1.0.0"></a> | ||
@@ -8,0 +19,0 @@ # 1.0.0 (2023-07-09) |
@@ -28,3 +28,3 @@ import { CommandExecutor } from '../CommandExecutor'; | ||
| private spanAttributes; | ||
| private _parseKeyValue; | ||
| private serverPort; | ||
| private _tryToGetTraceIdFromTraceParent; | ||
@@ -41,2 +41,3 @@ private _tryToGetParentSpanIdFromTraceParent; | ||
| private _createResourceSpans; | ||
| private _createTraceExporter; | ||
| private _createTraceRequest; | ||
@@ -43,0 +44,0 @@ private _exportTraceRequest; |
@@ -36,12 +36,2 @@ "use strict"; | ||
| class ExportCommandExecutor { | ||
| _parseKeyValue(keyValuePairs) { | ||
| return new Map((keyValuePairs || []).map((pair) => { | ||
| const separatorIdx = pair.indexOf('='); | ||
| if (separatorIdx < 0) { | ||
| logger.error(`Key-value pair must be in "key=value" format: ${pair}`); | ||
| (0, exit_1.exit)(1); | ||
| } | ||
| return [pair.substring(0, separatorIdx), pair.substring(separatorIdx + 1)]; | ||
| })); | ||
| } | ||
| _tryToGetTraceIdFromTraceParent(options) { | ||
@@ -67,3 +57,3 @@ const traceParent = options.traceParent || process.env.TRACEPARENT; | ||
| this.exporterOTLPProtocol = options.protocol; | ||
| this.exporterOTLPHeaders = this._parseKeyValue(options.headers); | ||
| this.exporterOTLPHeaders = (0, utils_1.parseKeyValue)(options.headers); | ||
| this.traceParent = options.traceparent || process.env.TRACEPARENT; | ||
@@ -87,3 +77,4 @@ this.traceParentPrint = options.traceparentPrint; | ||
| this.spanStatusMessage = options.statusMessage; | ||
| this.spanAttributes = this._parseKeyValue(options.attributes); | ||
| this.spanAttributes = (0, utils_1.parseKeyValue)(options.attributes); | ||
| this.serverPort = parseInt(options.serverPort); | ||
| } | ||
@@ -237,2 +228,10 @@ _checkOptions() { | ||
| } | ||
| _createTraceExporter() { | ||
| if (this.serverPort) { | ||
| return (0, export_1.createServerTraceExporter)(this.serverPort); | ||
| } | ||
| else { | ||
| return (0, export_1.createTraceExporter)(this.exporterOTLPProtocol, this._resolveExporterOTLPEndpoint(), this.exporterOTLPHeaders); | ||
| } | ||
| } | ||
| _createTraceRequest() { | ||
@@ -244,7 +243,6 @@ return { | ||
| async _exportTraceRequest(traceRequest) { | ||
| const resolvedExporterOTLPEndpoint = this._resolveExporterOTLPEndpoint(); | ||
| const traceExporter = (0, export_1.createTraceExporter)(this.exporterOTLPProtocol, this._resolveExporterOTLPEndpoint(), this.exporterOTLPHeaders); | ||
| const traceExporter = this._createTraceExporter(); | ||
| try { | ||
| if (logger.isDebugEnabled()) { | ||
| logger.debug(`Exporting trace request to : ${resolvedExporterOTLPEndpoint}`, traceRequest); | ||
| logger.debug(`Exporting trace request:`, traceRequest); | ||
| } | ||
@@ -333,3 +331,6 @@ await traceExporter.export(traceRequest); | ||
| .addOption(new commander_1.Option('-a --attributes <key-value-pairs...>', 'Span attributes as space seperated key-value pairs (key1=value1 key2=value2 key3=value3)') | ||
| .makeOptionMandatory(false)); | ||
| .makeOptionMandatory(false)) | ||
| .addOption(new commander_1.Option('-sp, --server-port <port>', 'OTEL CLI server port for communicating over to export traces asynchronously in background') | ||
| .makeOptionMandatory(false) | ||
| .default(process.env.OTEL_CLI_SERVER_PORT)); | ||
| } | ||
@@ -347,2 +348,2 @@ async execute(options) { | ||
| exports.ExportCommandExecutor = ExportCommandExecutor; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwb3J0Q29tbWFuZEV4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmQvZXhwb3J0L0V4cG9ydENvbW1hbmRFeGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLHFDQUFrQztBQUNsQyw0Q0FBK0U7QUFDL0UsdUNBUXFCO0FBSXJCLCtDQUl5QjtBQUV6Qix5Q0FBeUY7QUFDekYscURBQXVDO0FBQ3ZDLG9DQUFvQztBQUVwQyx5Q0FBMEQ7QUFFMUQsTUFBYSxxQkFBcUI7SUEwQnRCLGNBQWMsQ0FBQyxhQUF1QjtRQUMxQyxPQUFPLElBQUksR0FBRyxDQUNWLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sWUFBWSxHQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDOUMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQixNQUFNLENBQUMsS0FBSyxDQUNSLGlEQUFpRCxJQUFJLEVBQUUsQ0FDMUQsQ0FBQztnQkFDRixJQUFBLFdBQUksRUFBQyxDQUFDLENBQUMsQ0FBQzthQUNYO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTywrQkFBK0IsQ0FBQyxPQUFxQjtRQUN6RCxNQUFNLFdBQVcsR0FBVyxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1FBQzNFLElBQUksV0FBVyxFQUFFO1lBQ2IsT0FBTyxJQUFBLHFDQUE2QixFQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3JE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ZEV4ZWN1dG9yJztcbmltcG9ydCB7IGV4aXQgfSBmcm9tICcuLi8uLi9leGl0JztcbmltcG9ydCB7IFNwYW4sIFNwYW5LaW5kLCBTcGFuU3RhdHVzLCBTcGFuU3RhdHVzQ29kZSB9IGZyb20gJy4uLy4uL2RvbWFpbi9TcGFuJztcbmltcG9ydCB7XG4gICAgZXh0cmFjdFNwYW5JZEZyb21UcmFjZVBhcmVudCxcbiAgICBleHRyYWN0VHJhY2VJZEZyb21UcmFjZVBhcmVudCxcbiAgICBmbGF0dGVuQXR0cmlidXRlcyxcbiAgICBnZW5lcmF0ZVNwYW5JZCxcbiAgICB2YWxpZGF0ZVNwYW5JZCxcbiAgICB2YWxpZGF0ZVRyYWNlSWQsXG4gICAgdmFsaWRhdGVUcmFjZVBhcmVudCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQXR0cmlidXRlIH0gZnJvbSAnLi4vLi4vZG9tYWluL0F0dHJpYnV0ZSc7XG5pbXBvcnQgeyBTY29wZVNwYW5zIH0gZnJvbSAnLi4vLi4vZG9tYWluL1Njb3BlU3BhbnMnO1xuaW1wb3J0IHsgUmVzb3VyY2VTcGFucyB9IGZyb20gJy4uLy4uL2RvbWFpbi9SZXNvdXJjZVNwYW5zJztcbmltcG9ydCB7XG4gICAgT1RFTF9DTElfTkFNRSxcbiAgICBPVEVMX0NMSV9WRVJTSU9OLFxuICAgIFJFU09VUkNFX0FUVFJJQlVURVMsXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBUcmFjZVJlcXVlc3QgfSBmcm9tICcuLi8uLi9kb21haW4vVHJhY2VSZXF1ZXN0JztcbmltcG9ydCB7IGNyZWF0ZVRyYWNlRXhwb3J0ZXIsIEV4cG9ydGVyT1RMUFByb3RvY29scywgVHJhY2VFeHBvcnRlciB9IGZyb20gJy4uLy4uL2V4cG9ydCc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi4vLi4vbG9nZ2VyJztcbmltcG9ydCB7IENvbW1hbmRzIH0gZnJvbSAnLi4vaW5kZXgnO1xuXG5pbXBvcnQgeyBDb21tYW5kLCBPcHRpb24sIE9wdGlvblZhbHVlcyB9IGZyb20gJ2NvbW1hbmRlcic7XG5cbmV4cG9ydCBjbGFzcyBFeHBvcnRDb21tYW5kRXhlY3V0b3IgaW1wbGVtZW50cyBDb21tYW5kRXhlY3V0b3Ige1xuICAgIHByaXZhdGUgdmVyYm9zZUVuYWJsZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBleHBvcnRlck9UTFBFbmRwb2ludDogc3RyaW5nO1xuICAgIHByaXZhdGUgZXhwb3J0ZXJPVExQVHJhY2VzRW5kcG9pbnQ6IHN0cmluZztcbiAgICBwcml2YXRlIGV4cG9ydGVyT1RMUFByb3RvY29sOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBleHBvcnRlck9UTFBIZWFkZXJzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHByaXZhdGUgdHJhY2VQYXJlbnQ6IHN0cmluZztcbiAgICBwcml2YXRlIHRyYWNlUGFyZW50UHJpbnQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSB0cmFjZUlkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzcGFuSWQ6IHN0cmluZztcbiAgICBwcml2YXRlIHBhcmVudFNwYW5JZDogc3RyaW5nO1xuICAgIHByaXZhdGUgc3Bhbk5hbWU6IHN0cmluZztcbiAgICBwcml2YXRlIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzcGFuS2luZDogc3RyaW5nO1xuICAgIHByaXZhdGUgc3BhblN0YXJ0VGltZU5hbm9zOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBzcGFuU3RhcnRUaW1lTWljcm9zOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBzcGFuU3RhcnRUaW1lTWlsbGlzOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBzcGFuU3RhcnRUaW1lU2VjczogbnVtYmVyO1xuICAgIHByaXZhdGUgc3BhbkVuZFRpbWVOYW5vczogbnVtYmVyO1xuICAgIHByaXZhdGUgc3BhbkVuZFRpbWVNaWNyb3M6IG51bWJlcjtcbiAgICBwcml2YXRlIHNwYW5FbmRUaW1lTWlsbGlzOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBzcGFuRW5kVGltZVNlY3M6IG51bWJlcjtcbiAgICBwcml2YXRlIHNwYW5TdGF0dXNDb2RlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzcGFuU3RhdHVzTWVzc2FnZTogc3RyaW5nO1xuICAgIHByaXZhdGUgc3BhbkF0dHJpYnV0ZXM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG5cbiAgICBwcml2YXRlIF9wYXJzZUtleVZhbHVlKGtleVZhbHVlUGFpcnM6IHN0cmluZ1tdKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBuZXcgTWFwKFxuICAgICAgICAgICAgKGtleVZhbHVlUGFpcnMgfHwgW10pLm1hcCgocGFpcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9ySWR4OiBudW1iZXIgPSBwYWlyLmluZGV4T2YoJz0nKVxuICAgICAgICAgICAgICAgIGlmIChzZXBhcmF0b3JJZHggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGBLZXktdmFsdWUgcGFpciBtdXN0IGJlIGluIFwia2V5PXZhbHVlXCIgZm9ybWF0OiAke3BhaXJ9YFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBleGl0KDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gW3BhaXIuc3Vic3RyaW5nKDAsIHNlcGFyYXRvcklkeCksIHBhaXIuc3Vic3RyaW5nKHNlcGFyYXRvcklkeCArIDEpXTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdHJ5VG9HZXRUcmFjZUlkRnJvbVRyYWNlUGFyZW50KG9wdGlvbnM6IE9wdGlvblZhbHVlcyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHRyYWNlUGFyZW50OiBzdHJpbmcgPSBvcHRpb25zLnRyYWNlUGFyZW50IHx8IHByb2Nlc3MuZW52LlRSQUNFUEFSRU5UO1xuICAgICAgICBpZiAodHJhY2VQYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHRyYWN0VHJhY2VJZEZyb21UcmFjZVBhcmVudCh0cmFjZVBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90cnlUb0dldFBhcmVudFNwYW5JZEZyb21UcmFjZVBhcmVudChvcHRpb25zOiBPcHRpb25WYWx1ZXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCB0cmFjZVBhcmVudDogc3RyaW5nID0gb3B0aW9ucy50cmFjZVBhcmVudCB8fCBwcm9jZXNzLmVudi5UUkFDRVBBUkVOVDtcbiAgICAgICAgaWYgKHRyYWNlUGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFjdFNwYW5JZEZyb21UcmFjZVBhcmVudCh0cmFjZVBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wYXJzZU9wdGlvbnMob3B0aW9uczogT3B0aW9uVmFsdWVzKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmVyYm9zZUVuYWJsZWQgPSBvcHRpb25zLnZlcmJvc2U7XG4gICAgICAgIGxvZ2dlci5zZXREZWJ1Z0VuYWJsZWQodGhpcy52ZXJib3NlRW5hYmxlZCk7XG5cbiAgICAgICAgdGhpcy5leHBvcnRlck9UTFBFbmRwb2ludCA9IG9wdGlvbnMuZW5kcG9pbnQ7XG4gICAgICAgIHRoaXMuZXhwb3J0ZXJPVExQVHJhY2VzRW5kcG9pbnQgPSBvcHRpb25zLnRyYWNlc0VuZHBvaW50O1xuICAgICAgICB0aGlzLmV4cG9ydGVyT1RMUFByb3RvY29sID0gb3B0aW9ucy5wcm90b2NvbDtcbiAgICAgICAgdGhpcy5leHBvcnRlck9UTFBIZWFkZXJzID0gdGhpcy5fcGFyc2VLZXlWYWx1ZShvcHRpb25zLmhlYWRlcnMpO1xuXG4gICAgICAgIHRoaXMudHJhY2VQYXJlbnQgPSBvcHRpb25zLnRyYWNlcGFyZW50IHx8IHByb2Nlc3MuZW52LlRSQUNFUEFSRU5UO1xuICAgICAgICB0aGlzLnRyYWNlUGFyZW50UHJpbnQgPSBvcHRpb25zLnRyYWNlcGFyZW50UHJpbnQ7XG4gICAgICAgIHRoaXMudHJhY2VJZCA9IG9wdGlvbnMudHJhY2VJZCB8fCB0aGlzLl90cnlUb0dldFRyYWNlSWRGcm9tVHJhY2VQYXJlbnQob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc3BhbklkID0gb3B0aW9ucy5zcGFuSWQ7XG4gICAgICAgIHRoaXMucGFyZW50U3BhbklkID0gb3B0aW9ucy5wYXJlbnRTcGFuSWQgfHwgdGhpcy5fdHJ5VG9HZXRQYXJlbnRTcGFuSWRGcm9tVHJhY2VQYXJlbnQob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc3Bhbk5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgICAgIHRoaXMuc2VydmljZU5hbWUgPSBvcHRpb25zLnNlcnZpY2VOYW1lO1xuICAgICAgICB0aGlzLnNwYW5LaW5kID0gb3B0aW9ucy5raW5kO1xuICAgICAgICB0aGlzLnNwYW5TdGFydFRpbWVOYW5vcyA9IHBhcnNlSW50KG9wdGlvbnMuc3RhcnRUaW1lTmFub3MpO1xuICAgICAgICB0aGlzLnNwYW5TdGFydFRpbWVNaWNyb3MgPSBwYXJzZUludChvcHRpb25zLnN0YXJ0VGltZU1pY3Jvcyk7XG4gICAgICAgIHRoaXMuc3BhblN0YXJ0VGltZU1pbGxpcyA9IHBhcnNlSW50KG9wdGlvbnMuc3RhcnRUaW1lTWlsbGlzKTtcbiAgICAgICAgdGhpcy5zcGFuU3RhcnRUaW1lU2VjcyA9IHBhcnNlSW50KG9wdGlvbnMuc3RhcnRUaW1lU2Vjcyk7XG4gICAgICAgIHRoaXMuc3BhbkVuZFRpbWVOYW5vcyA9IHBhcnNlSW50KG9wdGlvbnMuZW5kVGltZU5hbm9zKTtcbiAgICAgICAgdGhpcy5zcGFuRW5kVGltZU1pY3JvcyA9IHBhcnNlSW50KG9wdGlvbnMuZW5kVGltZU1pY3Jvcyk7XG4gICAgICAgIHRoaXMuc3BhbkVuZFRpbWVNaWxsaXMgPSBwYXJzZUludChvcHRpb25zLmVuZFRpbWVNaWxsaXMpO1xuICAgICAgICB0aGlzLnNwYW5FbmRUaW1lU2VjcyA9IHBhcnNlSW50KG9wdGlvbnMuZW5kVGltZVNlY3MpO1xuICAgICAgICB0aGlzLnNwYW5TdGF0dXNDb2RlID0gb3B0aW9ucy5zdGF0dXNDb2RlO1xuICAgICAgICB0aGlzLnNwYW5TdGF0dXNNZXNzYWdlID0gb3B0aW9ucy5zdGF0dXNNZXNzYWdlO1xuICAgICAgICB0aGlzLnNwYW5BdHRyaWJ1dGVzID0gdGhpcy5fcGFyc2VLZXlWYWx1ZShvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrT3B0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmV4cG9ydGVyT1RMUEVuZHBvaW50ICYmICF0aGlzLmV4cG9ydGVyT1RMUFRyYWNlc0VuZHBvaW50KSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ09uZSBvZiB0aGUgT1RFTCBFeHBvcnRlciBPVExQIGVuZHBvaW50ICcgK1xuICAgICAgICAgICAgICAgICAgICAnb3IgT1RFTCBFeHBvcnRlciBPVExQIHRyYWNlcyBlbmRwb2ludCBjb25maWd1cmF0aW9ucyBtdXN0IGJlIHNwZWNpZmllZCEnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXhpdCgxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50cmFjZVBhcmVudCAmJiAhdmFsaWRhdGVUcmFjZVBhcmVudCh0aGlzLnRyYWNlUGFyZW50KSkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBJbnZhbGlkIHRyYWNlIHBhcmVudDogJHt0aGlzLnRyYWNlUGFyZW50fSFgKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnRyYWNlSWQpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgVHJhY2UgaWQgaXMgbm90IHNwZWNpZmllZDogJHt0aGlzLnRyYWNlSWR9IWApO1xuICAgICAgICAgICAgZXhpdCgxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbGlkYXRlVHJhY2VJZCh0aGlzLnRyYWNlSWQpKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoYEludmFsaWQgdHJhY2UgaWQ6ICR7dGhpcy50cmFjZUlkfSFgKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWxpZGF0ZVNwYW5JZCh0aGlzLnNwYW5JZCkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgSW52YWxpZCBzcGFuIGlkOiAke3RoaXMuc3BhbklkfSFgKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFyZW50U3BhbklkICYmICF2YWxpZGF0ZVNwYW5JZCh0aGlzLnBhcmVudFNwYW5JZCkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgSW52YWxpZCBwYXJlbnQgc3BhbiBpZDogJHt0aGlzLnBhcmVudFNwYW5JZH0hYCk7XG4gICAgICAgICAgICBleGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLnNwYW5TdGFydFRpbWVOYW5vcyAmJlxuICAgICAgICAgICAgIXRoaXMuc3BhbkVuZFRpbWVNaWNyb3MgJiZcbiAgICAgICAgICAgICF0aGlzLnNwYW5TdGFydFRpbWVNaWxsaXMgJiZcbiAgICAgICAgICAgICF0aGlzLnNwYW5TdGFydFRpbWVTZWNzXG4gICAgICAgICkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICdTcGFuIHN0YXJ0IHRpbWUgbXVzdCBiZSBzcGVjaWZpZWQgaW4gb25lIG9mIHRoZSBzdXBwb3J0ZWQgZm9ybWF0cyAnICtcbiAgICAgICAgICAgICAgICAgICAgJyhuYW5vc2Vjb25kcywgbWljcm9zZWNvbmRzLCBtaWxsaXNlY29uZHMsIG9yIHNlY29uZHMpISdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBleGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLnNwYW5FbmRUaW1lTmFub3MgJiZcbiAgICAgICAgICAgICF0aGlzLnNwYW5FbmRUaW1lTWljcm9zICYmXG4gICAgICAgICAgICAhdGhpcy5zcGFuRW5kVGltZU1pbGxpcyAmJlxuICAgICAgICAgICAgIXRoaXMuc3BhbkVuZFRpbWVTZWNzXG4gICAgICAgICkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICdTcGFuIGVuZCB0aW1lIG11c3QgYmUgc3BlY2lmaWVkIGluIG9uZSBvZiB0aGUgc3VwcG9ydGVkIGZvcm1hdHMgJyArXG4gICAgICAgICAgICAgICAgICAgICcobmFub3NlY29uZHMsIG1pY3Jvc2Vjb25kcywgbWlsbGlzZWNvbmRzLCBvciBzZWNvbmRzKSEnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXhpdCgxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc29sdmVFeHBvcnRlck9UTFBFbmRwb2ludCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0ZXJPVExQVHJhY2VzRW5kcG9pbnQgfHxcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0ZXJPVExQRW5kcG9pbnQgKyAnL3YxL3RyYWNlcydcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXNvbHZlU3BhblN0YXJ0VGltZU5hbm9zKCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnNwYW5TdGFydFRpbWVOYW5vcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BhblN0YXJ0VGltZU5hbm9zO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3BhblN0YXJ0VGltZU1pY3Jvcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BhblN0YXJ0VGltZU1pY3JvcyAqIDEwMDA7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zcGFuU3RhcnRUaW1lTWlsbGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zcGFuU3RhcnRUaW1lTWlsbGlzICogMTAwMDAwMDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNwYW5TdGFydFRpbWVTZWNzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zcGFuU3RhcnRUaW1lU2VjcyAqIDEwMDAwMDAwMDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNwYW4gc3RhcnQgdGltZSBpcyBzcGVjaWZpZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc29sdmVTcGFuRW5kVGltZU5hbm9zKCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnNwYW5FbmRUaW1lTmFub3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNwYW5FbmRUaW1lTmFub3M7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zcGFuRW5kVGltZU1pY3Jvcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BhbkVuZFRpbWVNaWNyb3MgKiAxMDAwO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3BhbkVuZFRpbWVNaWxsaXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNwYW5FbmRUaW1lTWlsbGlzICogMTAwMDAwMDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNwYW5FbmRUaW1lU2Vjcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BhbkVuZFRpbWVTZWNzICogMTAwMDAwMDAwMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc3BhbiBlbmQgdGltZSBpcyBzcGVjaWZpZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX25vcm1hbGl6ZUlkKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoaWQgJiYgaWQuc3RhcnRzV2l0aCgnMHgnKSkge1xuICAgICAgICAgICAgaWQgPSBpZC5zdWJzdHJpbmcoJzB4Jy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVTcGFuKCk6IFNwYW4ge1xuICAgICAgICBjb25zdCB0cmFjZUlkOiBzdHJpbmcgPSB0aGlzLl9ub3JtYWxpemVJZCh0aGlzLnRyYWNlSWQpO1xuICAgICAgICBjb25zdCBzcGFuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuX25vcm1hbGl6ZUlkKHRoaXMuc3BhbklkKTtcbiAgICAgICAgY29uc3QgdHJhY2VTdGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHBhcmVudFNwYW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5fbm9ybWFsaXplSWQodGhpcy5wYXJlbnRTcGFuSWQpO1xuICAgICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSB0aGlzLnNwYW5OYW1lO1xuICAgICAgICBjb25zdCBraW5kOiBTcGFuS2luZCA9IFNwYW5LaW5kW3RoaXMuc3BhbktpbmQgYXMga2V5b2YgdHlwZW9mIFNwYW5LaW5kXTtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lVW5peE5hbm86IG51bWJlciA9IHRoaXMuX3Jlc29sdmVTcGFuU3RhcnRUaW1lTmFub3MoKTtcbiAgICAgICAgY29uc3QgZW5kVGltZVVuaXhOYW5vOiBudW1iZXIgPSB0aGlzLl9yZXNvbHZlU3BhbkVuZFRpbWVOYW5vcygpO1xuICAgICAgICBjb25zdCBzdGF0dXNDb2RlOiBTcGFuU3RhdHVzQ29kZSA9XG4gICAgICAgICAgICBTcGFuU3RhdHVzQ29kZVt0aGlzLnNwYW5TdGF0dXNDb2RlIGFzIGtleW9mIHR5cGVvZiBTcGFuU3RhdHVzQ29kZV07XG4gICAgICAgIGNvbnN0IHN0YXR1c01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuc3BhblN0YXR1c01lc3NhZ2U7XG4gICAgICAgIGNvbnN0IHN0YXR1czogU3BhblN0YXR1cyA9IHtcbiAgICAgICAgICAgIGNvZGU6IHN0YXR1c0NvZGUgfHwgU3BhblN0YXR1c0NvZGUuVU5TRVQsXG4gICAgICAgICAgICBtZXNzYWdlOiBzdGF0dXNNZXNzYWdlLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSA9IGZsYXR0ZW5BdHRyaWJ1dGVzKHRoaXMuc3BhbkF0dHJpYnV0ZXMpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0cmFjZUlkLFxuICAgICAgICAgICAgc3BhbklkLFxuICAgICAgICAgICAgdHJhY2VTdGF0ZSxcbiAgICAgICAgICAgIHBhcmVudFNwYW5JZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgc3RhcnRUaW1lVW5peE5hbm8sXG4gICAgICAgICAgICBlbmRUaW1lVW5peE5hbm8sXG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDogMCxcbiAgICAgICAgfSBhcyBTcGFuO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZVNjb3BlU3BhbnMoKTogU2NvcGVTcGFuc1tdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzY29wZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBPVEVMX0NMSV9OQU1FLFxuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiBPVEVMX0NMSV9WRVJTSU9OLFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNwYW5zOiBbdGhpcy5fY3JlYXRlU3BhbigpXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlUmVzb3VyY2VTcGFucygpOiBSZXNvdXJjZVNwYW5zW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlc291cmNlOiB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFJFU09VUkNFX0FUVFJJQlVURVMuU0VSVklDRV9OQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1ZhbHVlOiB0aGlzLnNlcnZpY2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBkcm9wcGVkQXR0cmlidXRlc0NvdW50OiAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2NvcGVTcGFuczogdGhpcy5fY3JlYXRlU2NvcGVTcGFucygpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVUcmFjZVJlcXVlc3QoKTogVHJhY2VSZXF1ZXN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc291cmNlU3BhbnM6IHRoaXMuX2NyZWF0ZVJlc291cmNlU3BhbnMoKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9leHBvcnRUcmFjZVJlcXVlc3QoXG4gICAgICAgIHRyYWNlUmVxdWVzdDogVHJhY2VSZXF1ZXN0XG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkRXhwb3J0ZXJPVExQRW5kcG9pbnQgPVxuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZUV4cG9ydGVyT1RMUEVuZHBvaW50KCk7XG4gICAgICAgIGNvbnN0IHRyYWNlRXhwb3J0ZXI6IFRyYWNlRXhwb3J0ZXIgPSBjcmVhdGVUcmFjZUV4cG9ydGVyKFxuICAgICAgICAgICAgdGhpcy5leHBvcnRlck9UTFBQcm90b2NvbCxcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVFeHBvcnRlck9UTFBFbmRwb2ludCgpLFxuICAgICAgICAgICAgdGhpcy5leHBvcnRlck9UTFBIZWFkZXJzXG4gICAgICAgICk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyLmlzRGVidWdFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgICAgICAgICAgIGBFeHBvcnRpbmcgdHJhY2UgcmVxdWVzdCB0byA6ICR7cmVzb2x2ZWRFeHBvcnRlck9UTFBFbmRwb2ludH1gLFxuICAgICAgICAgICAgICAgICAgICB0cmFjZVJlcXVlc3RcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdHJhY2VFeHBvcnRlci5leHBvcnQodHJhY2VSZXF1ZXN0KTtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnRXhwb3J0ZWQgdHJhY2UgcmVxdWVzdCcpO1xuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZXhwb3J0IHRyYWNlIHJlcXVlc3QnLCBlcnIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2VuZXJhdGVUcmFjZVBhcmVudCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYDAwLSR7dGhpcy50cmFjZUlkfS0ke3RoaXMuc3BhbklkfS0wMWA7XG4gICAgfVxuXG4gICAgY29tbWFuZE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIENvbW1hbmRzLkVYUE9SVDtcbiAgICB9XG5cbiAgICBkZWZpbmVPcHRpb25zKGNvbW1hbmQ6IENvbW1hbmQpIHtcbiAgICAgICAgY29tbWFuZFxuICAgICAgICAgICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctdiwgLS12ZXJib3NlJywgJ0VuYWJsZSB2ZXJib3NlIG1vZGUnKVxuICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52Lk9URUxfQ0xJX1ZFUkJPU0UgJiZcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuT1RFTF9DTElfVkVSQk9TRS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctZSwgLS1lbmRwb2ludCA8dXJsPicsICdPVEVMIEV4cG9ydGVyIE9UTFAgZW5kcG9pbnQnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQocHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctdGUsIC0tdHJhY2VzLWVuZHBvaW50IDx1cmw+JywgJ09URUwgRXhwb3J0ZXIgT1RMUCB0cmFjZXMgZW5kcG9pbnQnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQocHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLXAsIC0tcHJvdG9jb2wgPHByb3RvY29sPicsICdPVEVMIEV4cG9ydGVyIE9UTFAgcHJvdG9jb2wnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfUFJPVE9DT0wgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydGVyT1RMUFByb3RvY29scy5IVFRQX0pTT05cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuY2hvaWNlcyhPYmplY3QudmFsdWVzKEV4cG9ydGVyT1RMUFByb3RvY29scykpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1oLCAtLWhlYWRlcnMgPGtleS12YWx1ZS1wYWlycy4uLj4nLCAnT1RFTCBFeHBvcnRlciBPVExQIGhlYWRlcnMnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQocHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0hFQURFUlMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9IRUFERVJTLnNwbGl0KCcsJykpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy10cCwgLS10cmFjZXBhcmVudCA8aGVhZGVyPicsICdUcmFjZXBhcmVudCBoZWFkZXIgaW4gVzNDIHRyYWNlIGNvbnRleHQgZm9ybWF0JylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52LlRSQUNFUEFSRU5UKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctdHBwLCAtLXRyYWNlcGFyZW50LXByaW50JywgJ1ByaW50IHRyYWNlcGFyZW50IGhlYWRlciBpbiBXM0MgdHJhY2UgY29udGV4dCBmb3JtYXQgZm9yIHRoZSBleHBvcnRlZCBzcGFuJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52Lk9URUxfQ0xJX1RSQUNFUEFSRU5UX1BSSU5UICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5PVEVMX0NMSV9UUkFDRVBBUkVOVF9QUklOVC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy10LCAtLXRyYWNlLWlkIDxpZD4nLCAnVHJhY2UgaWQnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQocHJvY2Vzcy5lbnYuT1RFTF9DTElfVFJBQ0VfSUQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1zLCAtLXNwYW4taWQgPGlkPicsICdTcGFuIGlkJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KGdlbmVyYXRlU3BhbklkKCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1wLCAtLXBhcmVudC1zcGFuLWlkIDxpZD4nLCAnUGFyZW50IHNwYW4gaWQnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLW4sIC0tbmFtZSA8bmFtZT4nLCAnU3BhbiBuYW1lJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLXNuLCAtLXNlcnZpY2UtbmFtZSA8bmFtZT4nLCAnU2VydmljZSBuYW1lJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQocHJvY2Vzcy5lbnYuT1RFTF9DTElfU0VSVklDRV9OQU1FIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5PVEVMX1NFUlZJQ0VfTkFNRSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLWssIC0ta2luZCA8a2luZD4nLCAnU3BhbiBraW5kJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KFNwYW5LaW5kW1NwYW5LaW5kLklOVEVSTkFMXSlcbiAgICAgICAgICAgICAgICAgICAgLmNob2ljZXMoT2JqZWN0LmtleXMoU3BhbktpbmQpLmZpbHRlcigobykgPT4gaXNOYU4oTnVtYmVyKG8pKSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy0tc3RhcnQtdGltZS1uYW5vcyA8bmFub3M+JywgJ1N0YXJ0IHRpbWUgaW4gbmFub3NlY29uZHMnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLS1zdGFydC10aW1lLW1pY3JvcyA8bWljcm9zPicsICdTdGFydCB0aW1lIGluIG1pY3Jvc2Vjb25kcycpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctLXN0YXJ0LXRpbWUtbWlsbGlzIDxtaWxsaXM+JywgJ1N0YXJ0IHRpbWUgaW4gbWlsbGlzZWNvbmRzJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy0tc3RhcnQtdGltZS1zZWNzIDxzZWNzPicsICdTdGFydCB0aW1lIGluIHNlY29uZHMnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLS1lbmQtdGltZS1uYW5vcyA8bmFub3M+JywgJ0VuZCB0aW1lIGluIG5hbm9zZWNvbmRzJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy0tZW5kLXRpbWUtbWljcm9zIDxtaWNyb3M+JywgJ0VuZCB0aW1lIGluIG1pY3Jvc2Vjb25kcycpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctLWVuZC10aW1lLW1pbGxpcyA8bWlsbGlzPicsICdFbmQgdGltZSBpbiBtaWxsaXNlY29uZHMnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLS1lbmQtdGltZS1zZWNzIDxzZWNzPicsICdFbmQgdGltZSBpbiBzZWNvbmRzJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1zYyAtLXN0YXR1cy1jb2RlIDxjb2RlPicsICdTdGF0dXMgY29kZScpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAuZGVmYXVsdChTcGFuU3RhdHVzQ29kZVtTcGFuU3RhdHVzQ29kZS5VTlNFVF0pXG4gICAgICAgICAgICAgICAgICAgIC5jaG9pY2VzKFxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoU3BhblN0YXR1c0NvZGUpLmZpbHRlcigobykgPT4gaXNOYU4oTnVtYmVyKG8pKSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctc20gLS1zdGF0dXMtbWVzc2FnZSA8bWVzc2FnZT4nLCAnU3RhdHVzIG1lc3NhZ2UnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbihcbiAgICAgICAgICAgICAgICAgICAgJy1hIC0tYXR0cmlidXRlcyA8a2V5LXZhbHVlLXBhaXJzLi4uPicsXG4gICAgICAgICAgICAgICAgICAgICdTcGFuIGF0dHJpYnV0ZXMgYXMgc3BhY2Ugc2VwZXJhdGVkIGtleS12YWx1ZSBwYWlycyAoa2V5MT12YWx1ZTEga2V5Mj12YWx1ZTIga2V5Mz12YWx1ZTMpJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIGV4ZWN1dGUob3B0aW9uczogT3B0aW9uVmFsdWVzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX3BhcnNlT3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICB0aGlzLl9jaGVja09wdGlvbnMoKTtcblxuICAgICAgICBjb25zdCB0cmFjZVJlcXVlc3Q6IFRyYWNlUmVxdWVzdCA9IHRoaXMuX2NyZWF0ZVRyYWNlUmVxdWVzdCgpO1xuICAgICAgICBhd2FpdCB0aGlzLl9leHBvcnRUcmFjZVJlcXVlc3QodHJhY2VSZXF1ZXN0KTtcbiAgICAgICAgaWYgKHRoaXMudHJhY2VQYXJlbnRQcmludCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5fZ2VuZXJhdGVUcmFjZVBhcmVudCgpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ== | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwb3J0Q29tbWFuZEV4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmQvZXhwb3J0L0V4cG9ydENvbW1hbmRFeGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLHFDQUFrQztBQUNsQyw0Q0FBK0U7QUFDL0UsdUNBU3FCO0FBSXJCLCtDQUl5QjtBQUV6Qix5Q0FBb0g7QUFDcEgscURBQXVDO0FBQ3ZDLG9DQUFvQztBQUVwQyx5Q0FBMEQ7QUFFMUQsTUFBYSxxQkFBcUI7SUEyQnRCLCtCQUErQixDQUFDLE9BQXFCO1FBQ3pELE1BQU0sV0FBVyxHQUFXLE9BQU8sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDM0UsSUFBSSxXQUFXLEVBQUU7WUFDYixPQUFPLElBQUEscUNBQTZCLEVBQUMsV0FBVyxDQUFDLENBQUM7U0FDckQ7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRU8sb0NBQW9DLENBQUMsT0FBcUI7UUFDOUQsTUFBTSxXQUFXLEdBQVcsT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUMzRSxJQUFJLFdBQVcsRUFBRTtZQUNiLE9BQU8sSUFBQSxvQ0FBNEIsRUFBQyxXQUFXLENBQUMsQ0FBQztTQUNwRDtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFTyxhQUFhLENBQUMsT0FBcUI7UUFDdkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQzdDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxPQUFPLENBQUMsY0FBYyxD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QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzlELENBQ1I7YUFDQSxTQUFTLENBQ04sSUFBSSxrQkFBTSxDQUFDLGdDQUFnQyxFQUFFLGdCQUFnQixDQUFDO2FBQ3pELG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUNsQzthQUNBLFNBQVMsQ0FDTixJQUFJLGtCQUFNLENBQ04sc0NBQXNDLEVBQ3RDLDBGQUEwRixDQUFDO2FBQzFGLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUNsQzthQUNBLFNBQVMsQ0FDTixJQUFJLGtCQUFNLENBQUMsMkJBQTJCLEVBQ2xDLDJGQUEyRixDQUFDO2FBQzNGLG1CQUFtQixDQUFDLEtBQUssQ0FBQzthQUMxQixPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUNqRCxDQUFDO0lBQ1YsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBcUI7UUFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU1QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFckIsTUFBTSxZQUFZLEdBQWlCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzlELE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztTQUM1QztJQUNMLENBQUM7Q0FDSjtBQWphRCxzREFpYUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kRXhlY3V0b3IgfSBmcm9tICcuLi9Db21tYW5kRXhlY3V0b3InO1xuaW1wb3J0IHsgZXhpdCB9IGZyb20gJy4uLy4uL2V4aXQnO1xuaW1wb3J0IHsgU3BhbiwgU3BhbktpbmQsIFNwYW5TdGF0dXMsIFNwYW5TdGF0dXNDb2RlIH0gZnJvbSAnLi4vLi4vZG9tYWluL1NwYW4nO1xuaW1wb3J0IHtcbiAgICBleHRyYWN0U3BhbklkRnJvbVRyYWNlUGFyZW50LFxuICAgIGV4dHJhY3RUcmFjZUlkRnJvbVRyYWNlUGFyZW50LFxuICAgIGZsYXR0ZW5BdHRyaWJ1dGVzLFxuICAgIGdlbmVyYXRlU3BhbklkLFxuICAgIHBhcnNlS2V5VmFsdWUsXG4gICAgdmFsaWRhdGVTcGFuSWQsXG4gICAgdmFsaWRhdGVUcmFjZUlkLFxuICAgIHZhbGlkYXRlVHJhY2VQYXJlbnQsXG59IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEF0dHJpYnV0ZSB9IGZyb20gJy4uLy4uL2RvbWFpbi9BdHRyaWJ1dGUnO1xuaW1wb3J0IHsgU2NvcGVTcGFucyB9IGZyb20gJy4uLy4uL2RvbWFpbi9TY29wZVNwYW5zJztcbmltcG9ydCB7IFJlc291cmNlU3BhbnMgfSBmcm9tICcuLi8uLi9kb21haW4vUmVzb3VyY2VTcGFucyc7XG5pbXBvcnQge1xuICAgIE9URUxfQ0xJX05BTUUsXG4gICAgT1RFTF9DTElfVkVSU0lPTixcbiAgICBSRVNPVVJDRV9BVFRSSUJVVEVTLFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgVHJhY2VSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vZG9tYWluL1RyYWNlUmVxdWVzdCc7XG5pbXBvcnQgeyBjcmVhdGVTZXJ2ZXJUcmFjZUV4cG9ydGVyLCBjcmVhdGVUcmFjZUV4cG9ydGVyLCBFeHBvcnRlck9UTFBQcm90b2NvbHMsIFRyYWNlRXhwb3J0ZXIgfSBmcm9tICcuLi8uLi9leHBvcnQnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uLy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBDb21tYW5kcyB9IGZyb20gJy4uL2luZGV4JztcblxuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uLCBPcHRpb25WYWx1ZXMgfSBmcm9tICdjb21tYW5kZXInO1xuXG5leHBvcnQgY2xhc3MgRXhwb3J0Q29tbWFuZEV4ZWN1dG9yIGltcGxlbWVudHMgQ29tbWFuZEV4ZWN1dG9yIHtcbiAgICBwcml2YXRlIHZlcmJvc2VFbmFibGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgZXhwb3J0ZXJPVExQRW5kcG9pbnQ6IHN0cmluZztcbiAgICBwcml2YXRlIGV4cG9ydGVyT1RMUFRyYWNlc0VuZHBvaW50OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBleHBvcnRlck9UTFBQcm90b2NvbDogc3RyaW5nO1xuICAgIHByaXZhdGUgZXhwb3J0ZXJPVExQSGVhZGVyczogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgICBwcml2YXRlIHRyYWNlUGFyZW50OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSB0cmFjZVBhcmVudFByaW50OiBib29sZWFuO1xuICAgIHByaXZhdGUgdHJhY2VJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgc3BhbklkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBwYXJlbnRTcGFuSWQ6IHN0cmluZztcbiAgICBwcml2YXRlIHNwYW5OYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICAgIHByaXZhdGUgc3BhbktpbmQ6IHN0cmluZztcbiAgICBwcml2YXRlIHNwYW5TdGFydFRpbWVOYW5vczogbnVtYmVyO1xuICAgIHByaXZhdGUgc3BhblN0YXJ0VGltZU1pY3JvczogbnVtYmVyO1xuICAgIHByaXZhdGUgc3BhblN0YXJ0VGltZU1pbGxpczogbnVtYmVyO1xuICAgIHByaXZhdGUgc3BhblN0YXJ0VGltZVNlY3M6IG51bWJlcjtcbiAgICBwcml2YXRlIHNwYW5FbmRUaW1lTmFub3M6IG51bWJlcjtcbiAgICBwcml2YXRlIHNwYW5FbmRUaW1lTWljcm9zOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBzcGFuRW5kVGltZU1pbGxpczogbnVtYmVyO1xuICAgIHByaXZhdGUgc3BhbkVuZFRpbWVTZWNzOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBzcGFuU3RhdHVzQ29kZTogc3RyaW5nO1xuICAgIHByaXZhdGUgc3BhblN0YXR1c01lc3NhZ2U6IHN0cmluZztcbiAgICBwcml2YXRlIHNwYW5BdHRyaWJ1dGVzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHByaXZhdGUgc2VydmVyUG9ydDogbnVtYmVyO1xuXG4gICAgcHJpdmF0ZSBfdHJ5VG9HZXRUcmFjZUlkRnJvbVRyYWNlUGFyZW50KG9wdGlvbnM6IE9wdGlvblZhbHVlcyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHRyYWNlUGFyZW50OiBzdHJpbmcgPSBvcHRpb25zLnRyYWNlUGFyZW50IHx8IHByb2Nlc3MuZW52LlRSQUNFUEFSRU5UO1xuICAgICAgICBpZiAodHJhY2VQYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHRyYWN0VHJhY2VJZEZyb21UcmFjZVBhcmVudCh0cmFjZVBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90cnlUb0dldFBhcmVudFNwYW5JZEZyb21UcmFjZVBhcmVudChvcHRpb25zOiBPcHRpb25WYWx1ZXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCB0cmFjZVBhcmVudDogc3RyaW5nID0gb3B0aW9ucy50cmFjZVBhcmVudCB8fCBwcm9jZXNzLmVudi5UUkFDRVBBUkVOVDtcbiAgICAgICAgaWYgKHRyYWNlUGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFjdFNwYW5JZEZyb21UcmFjZVBhcmVudCh0cmFjZVBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wYXJzZU9wdGlvbnMob3B0aW9uczogT3B0aW9uVmFsdWVzKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmVyYm9zZUVuYWJsZWQgPSBvcHRpb25zLnZlcmJvc2U7XG4gICAgICAgIGxvZ2dlci5zZXREZWJ1Z0VuYWJsZWQodGhpcy52ZXJib3NlRW5hYmxlZCk7XG5cbiAgICAgICAgdGhpcy5leHBvcnRlck9UTFBFbmRwb2ludCA9IG9wdGlvbnMuZW5kcG9pbnQ7XG4gICAgICAgIHRoaXMuZXhwb3J0ZXJPVExQVHJhY2VzRW5kcG9pbnQgPSBvcHRpb25zLnRyYWNlc0VuZHBvaW50O1xuICAgICAgICB0aGlzLmV4cG9ydGVyT1RMUFByb3RvY29sID0gb3B0aW9ucy5wcm90b2NvbDtcbiAgICAgICAgdGhpcy5leHBvcnRlck9UTFBIZWFkZXJzID0gcGFyc2VLZXlWYWx1ZShvcHRpb25zLmhlYWRlcnMpO1xuXG4gICAgICAgIHRoaXMudHJhY2VQYXJlbnQgPSBvcHRpb25zLnRyYWNlcGFyZW50IHx8IHByb2Nlc3MuZW52LlRSQUNFUEFSRU5UO1xuICAgICAgICB0aGlzLnRyYWNlUGFyZW50UHJpbnQgPSBvcHRpb25zLnRyYWNlcGFyZW50UHJpbnQ7XG4gICAgICAgIHRoaXMudHJhY2VJZCA9IG9wdGlvbnMudHJhY2VJZCB8fCB0aGlzLl90cnlUb0dldFRyYWNlSWRGcm9tVHJhY2VQYXJlbnQob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc3BhbklkID0gb3B0aW9ucy5zcGFuSWQ7XG4gICAgICAgIHRoaXMucGFyZW50U3BhbklkID0gb3B0aW9ucy5wYXJlbnRTcGFuSWQgfHwgdGhpcy5fdHJ5VG9HZXRQYXJlbnRTcGFuSWRGcm9tVHJhY2VQYXJlbnQob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc3Bhbk5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgICAgIHRoaXMuc2VydmljZU5hbWUgPSBvcHRpb25zLnNlcnZpY2VOYW1lO1xuICAgICAgICB0aGlzLnNwYW5LaW5kID0gb3B0aW9ucy5raW5kO1xuICAgICAgICB0aGlzLnNwYW5TdGFydFRpbWVOYW5vcyA9IHBhcnNlSW50KG9wdGlvbnMuc3RhcnRUaW1lTmFub3MpO1xuICAgICAgICB0aGlzLnNwYW5TdGFydFRpbWVNaWNyb3MgPSBwYXJzZUludChvcHRpb25zLnN0YXJ0VGltZU1pY3Jvcyk7XG4gICAgICAgIHRoaXMuc3BhblN0YXJ0VGltZU1pbGxpcyA9IHBhcnNlSW50KG9wdGlvbnMuc3RhcnRUaW1lTWlsbGlzKTtcbiAgICAgICAgdGhpcy5zcGFuU3RhcnRUaW1lU2VjcyA9IHBhcnNlSW50KG9wdGlvbnMuc3RhcnRUaW1lU2Vjcyk7XG4gICAgICAgIHRoaXMuc3BhbkVuZFRpbWVOYW5vcyA9IHBhcnNlSW50KG9wdGlvbnMuZW5kVGltZU5hbm9zKTtcbiAgICAgICAgdGhpcy5zcGFuRW5kVGltZU1pY3JvcyA9IHBhcnNlSW50KG9wdGlvbnMuZW5kVGltZU1pY3Jvcyk7XG4gICAgICAgIHRoaXMuc3BhbkVuZFRpbWVNaWxsaXMgPSBwYXJzZUludChvcHRpb25zLmVuZFRpbWVNaWxsaXMpO1xuICAgICAgICB0aGlzLnNwYW5FbmRUaW1lU2VjcyA9IHBhcnNlSW50KG9wdGlvbnMuZW5kVGltZVNlY3MpO1xuICAgICAgICB0aGlzLnNwYW5TdGF0dXNDb2RlID0gb3B0aW9ucy5zdGF0dXNDb2RlO1xuICAgICAgICB0aGlzLnNwYW5TdGF0dXNNZXNzYWdlID0gb3B0aW9ucy5zdGF0dXNNZXNzYWdlO1xuICAgICAgICB0aGlzLnNwYW5BdHRyaWJ1dGVzID0gcGFyc2VLZXlWYWx1ZShvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICAgICAgICB0aGlzLnNlcnZlclBvcnQgPSBwYXJzZUludChvcHRpb25zLnNlcnZlclBvcnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrT3B0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmV4cG9ydGVyT1RMUEVuZHBvaW50ICYmICF0aGlzLmV4cG9ydGVyT1RMUFRyYWNlc0VuZHBvaW50KSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ09uZSBvZiB0aGUgT1RFTCBFeHBvcnRlciBPVExQIGVuZHBvaW50ICcgK1xuICAgICAgICAgICAgICAgICAgICAnb3IgT1RFTCBFeHBvcnRlciBPVExQIHRyYWNlcyBlbmRwb2ludCBjb25maWd1cmF0aW9ucyBtdXN0IGJlIHNwZWNpZmllZCEnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXhpdCgxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50cmFjZVBhcmVudCAmJiAhdmFsaWRhdGVUcmFjZVBhcmVudCh0aGlzLnRyYWNlUGFyZW50KSkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBJbnZhbGlkIHRyYWNlIHBhcmVudDogJHt0aGlzLnRyYWNlUGFyZW50fSFgKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnRyYWNlSWQpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgVHJhY2UgaWQgaXMgbm90IHNwZWNpZmllZDogJHt0aGlzLnRyYWNlSWR9IWApO1xuICAgICAgICAgICAgZXhpdCgxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbGlkYXRlVHJhY2VJZCh0aGlzLnRyYWNlSWQpKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoYEludmFsaWQgdHJhY2UgaWQ6ICR7dGhpcy50cmFjZUlkfSFgKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWxpZGF0ZVNwYW5JZCh0aGlzLnNwYW5JZCkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgSW52YWxpZCBzcGFuIGlkOiAke3RoaXMuc3BhbklkfSFgKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFyZW50U3BhbklkICYmICF2YWxpZGF0ZVNwYW5JZCh0aGlzLnBhcmVudFNwYW5JZCkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgSW52YWxpZCBwYXJlbnQgc3BhbiBpZDogJHt0aGlzLnBhcmVudFNwYW5JZH0hYCk7XG4gICAgICAgICAgICBleGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLnNwYW5TdGFydFRpbWVOYW5vcyAmJlxuICAgICAgICAgICAgIXRoaXMuc3BhbkVuZFRpbWVNaWNyb3MgJiZcbiAgICAgICAgICAgICF0aGlzLnNwYW5TdGFydFRpbWVNaWxsaXMgJiZcbiAgICAgICAgICAgICF0aGlzLnNwYW5TdGFydFRpbWVTZWNzXG4gICAgICAgICkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICdTcGFuIHN0YXJ0IHRpbWUgbXVzdCBiZSBzcGVjaWZpZWQgaW4gb25lIG9mIHRoZSBzdXBwb3J0ZWQgZm9ybWF0cyAnICtcbiAgICAgICAgICAgICAgICAgICAgJyhuYW5vc2Vjb25kcywgbWljcm9zZWNvbmRzLCBtaWxsaXNlY29uZHMsIG9yIHNlY29uZHMpISdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBleGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLnNwYW5FbmRUaW1lTmFub3MgJiZcbiAgICAgICAgICAgICF0aGlzLnNwYW5FbmRUaW1lTWljcm9zICYmXG4gICAgICAgICAgICAhdGhpcy5zcGFuRW5kVGltZU1pbGxpcyAmJlxuICAgICAgICAgICAgIXRoaXMuc3BhbkVuZFRpbWVTZWNzXG4gICAgICAgICkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICdTcGFuIGVuZCB0aW1lIG11c3QgYmUgc3BlY2lmaWVkIGluIG9uZSBvZiB0aGUgc3VwcG9ydGVkIGZvcm1hdHMgJyArXG4gICAgICAgICAgICAgICAgICAgICcobmFub3NlY29uZHMsIG1pY3Jvc2Vjb25kcywgbWlsbGlzZWNvbmRzLCBvciBzZWNvbmRzKSEnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXhpdCgxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc29sdmVFeHBvcnRlck9UTFBFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5leHBvcnRlck9UTFBUcmFjZXNFbmRwb2ludCB8fFxuICAgICAgICAgICAgdGhpcy5leHBvcnRlck9UTFBFbmRwb2ludCArICcvdjEvdHJhY2VzJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc29sdmVTcGFuU3RhcnRUaW1lTmFub3MoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuc3BhblN0YXJ0VGltZU5hbm9zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zcGFuU3RhcnRUaW1lTmFub3M7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zcGFuU3RhcnRUaW1lTWljcm9zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zcGFuU3RhcnRUaW1lTWljcm9zICogMTAwMDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNwYW5TdGFydFRpbWVNaWxsaXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNwYW5TdGFydFRpbWVNaWxsaXMgKiAxMDAwMDAwO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3BhblN0YXJ0VGltZVNlY3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNwYW5TdGFydFRpbWVTZWNzICogMTAwMDAwMDAwMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc3BhbiBzdGFydCB0aW1lIGlzIHNwZWNpZmllZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVzb2x2ZVNwYW5FbmRUaW1lTmFub3MoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuc3BhbkVuZFRpbWVOYW5vcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BhbkVuZFRpbWVOYW5vcztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNwYW5FbmRUaW1lTWljcm9zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zcGFuRW5kVGltZU1pY3JvcyAqIDEwMDA7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zcGFuRW5kVGltZU1pbGxpcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BhbkVuZFRpbWVNaWxsaXMgKiAxMDAwMDAwO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3BhbkVuZFRpbWVTZWNzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zcGFuRW5kVGltZVNlY3MgKiAxMDAwMDAwMDAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzcGFuIGVuZCB0aW1lIGlzIHNwZWNpZmllZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbm9ybWFsaXplSWQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChpZCAmJiBpZC5zdGFydHNXaXRoKCcweCcpKSB7XG4gICAgICAgICAgICBpZCA9IGlkLnN1YnN0cmluZygnMHgnLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZVNwYW4oKTogU3BhbiB7XG4gICAgICAgIGNvbnN0IHRyYWNlSWQ6IHN0cmluZyA9IHRoaXMuX25vcm1hbGl6ZUlkKHRoaXMudHJhY2VJZCk7XG4gICAgICAgIGNvbnN0IHNwYW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5fbm9ybWFsaXplSWQodGhpcy5zcGFuSWQpO1xuICAgICAgICBjb25zdCB0cmFjZVN0YXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgICAgY29uc3QgcGFyZW50U3BhbklkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLl9ub3JtYWxpemVJZCh0aGlzLnBhcmVudFNwYW5JZCk7XG4gICAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IHRoaXMuc3Bhbk5hbWU7XG4gICAgICAgIGNvbnN0IGtpbmQ6IFNwYW5LaW5kID0gU3BhbktpbmRbdGhpcy5zcGFuS2luZCBhcyBrZXlvZiB0eXBlb2YgU3BhbktpbmRdO1xuICAgICAgICBjb25zdCBzdGFydFRpbWVVbml4TmFubzogbnVtYmVyID0gdGhpcy5fcmVzb2x2ZVNwYW5TdGFydFRpbWVOYW5vcygpO1xuICAgICAgICBjb25zdCBlbmRUaW1lVW5peE5hbm86IG51bWJlciA9IHRoaXMuX3Jlc29sdmVTcGFuRW5kVGltZU5hbm9zKCk7XG4gICAgICAgIGNvbnN0IHN0YXR1c0NvZGU6IFNwYW5TdGF0dXNDb2RlID1cbiAgICAgICAgICAgIFNwYW5TdGF0dXNDb2RlW3RoaXMuc3BhblN0YXR1c0NvZGUgYXMga2V5b2YgdHlwZW9mIFNwYW5TdGF0dXNDb2RlXTtcbiAgICAgICAgY29uc3Qgc3RhdHVzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5zcGFuU3RhdHVzTWVzc2FnZTtcbiAgICAgICAgY29uc3Qgc3RhdHVzOiBTcGFuU3RhdHVzID0ge1xuICAgICAgICAgICAgY29kZTogc3RhdHVzQ29kZSB8fCBTcGFuU3RhdHVzQ29kZS5VTlNFVCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHN0YXR1c01lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdID0gZmxhdHRlbkF0dHJpYnV0ZXModGhpcy5zcGFuQXR0cmlidXRlcyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRyYWNlSWQsXG4gICAgICAgICAgICBzcGFuSWQsXG4gICAgICAgICAgICB0cmFjZVN0YXRlLFxuICAgICAgICAgICAgcGFyZW50U3BhbklkLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICBzdGFydFRpbWVVbml4TmFubyxcbiAgICAgICAgICAgIGVuZFRpbWVVbml4TmFubyxcbiAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBkcm9wcGVkQXR0cmlidXRlc0NvdW50OiAwLFxuICAgICAgICB9IGFzIFNwYW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlU2NvcGVTcGFucygpOiBTY29wZVNwYW5zW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNjb3BlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IE9URUxfQ0xJX05BTUUsXG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246IE9URUxfQ0xJX1ZFUlNJT04sXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3BhbnM6IFt0aGlzLl9jcmVhdGVTcGFuKCldLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVSZXNvdXJjZVNwYW5zKCk6IFJlc291cmNlU3BhbnNbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogUkVTT1VSQ0VfQVRUUklCVVRFUy5TRVJWSUNFX05BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nVmFsdWU6IHRoaXMuc2VydmljZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzY29wZVNwYW5zOiB0aGlzLl9jcmVhdGVTY29wZVNwYW5zKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZVRyYWNlRXhwb3J0ZXIoKTogVHJhY2VFeHBvcnRlciB7XG4gICAgICAgIGlmICh0aGlzLnNlcnZlclBvcnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVTZXJ2ZXJUcmFjZUV4cG9ydGVyKHRoaXMuc2VydmVyUG9ydCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlVHJhY2VFeHBvcnRlcihcbiAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydGVyT1RMUFByb3RvY29sLFxuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVFeHBvcnRlck9UTFBFbmRwb2ludCgpLFxuICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0ZXJPVExQSGVhZGVyc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZVRyYWNlUmVxdWVzdCgpOiBUcmFjZVJlcXVlc3Qge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzb3VyY2VTcGFuczogdGhpcy5fY3JlYXRlUmVzb3VyY2VTcGFucygpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2V4cG9ydFRyYWNlUmVxdWVzdChcbiAgICAgICAgdHJhY2VSZXF1ZXN0OiBUcmFjZVJlcXVlc3RcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdHJhY2VFeHBvcnRlcjogVHJhY2VFeHBvcnRlciA9IHRoaXMuX2NyZWF0ZVRyYWNlRXhwb3J0ZXIoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIuaXNEZWJ1Z0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgRXhwb3J0aW5nIHRyYWNlIHJlcXVlc3Q6YCwgdHJhY2VSZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRyYWNlRXhwb3J0ZXIuZXhwb3J0KHRyYWNlUmVxdWVzdCk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoJ0V4cG9ydGVkIHRyYWNlIHJlcXVlc3QnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIGV4cG9ydCB0cmFjZSByZXF1ZXN0JywgZXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2dlbmVyYXRlVHJhY2VQYXJlbnQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAwMC0ke3RoaXMudHJhY2VJZH0tJHt0aGlzLnNwYW5JZH0tMDFgO1xuICAgIH1cblxuICAgIGNvbW1hbmROYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBDb21tYW5kcy5FWFBPUlQ7XG4gICAgfVxuXG4gICAgZGVmaW5lT3B0aW9ucyhjb21tYW5kOiBDb21tYW5kKSB7XG4gICAgICAgIGNvbW1hbmRcbiAgICAgICAgICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXYsIC0tdmVyYm9zZScsICdFbmFibGUgdmVyYm9zZSBtb2RlJylcbiAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAuZGVmYXVsdChwcm9jZXNzLmVudi5PVEVMX0NMSV9WRVJCT1NFICYmXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52Lk9URUxfQ0xJX1ZFUkJPU0UudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKSlcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLWUsIC0tZW5kcG9pbnQgPHVybD4nLCAnT1RFTCBFeHBvcnRlciBPVExQIGVuZHBvaW50JylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLXRlLCAtLXRyYWNlcy1lbmRwb2ludCA8dXJsPicsICdPVEVMIEV4cG9ydGVyIE9UTFAgdHJhY2VzIGVuZHBvaW50JylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfRU5EUE9JTlQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1wLCAtLXByb3RvY29sIDxwcm90b2NvbD4nLCAnT1RFTCBFeHBvcnRlciBPVExQIHByb3RvY29sJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX1BST1RPQ09MIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRlck9UTFBQcm90b2NvbHMuSFRUUF9KU09OXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhFeHBvcnRlck9UTFBQcm90b2NvbHMpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctaCwgLS1oZWFkZXJzIDxrZXktdmFsdWUtcGFpcnMuLi4+JywgJ09URUwgRXhwb3J0ZXIgT1RMUCBoZWFkZXJzJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9IRUFERVJTICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfSEVBREVSUy5zcGxpdCgnLCcpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctdHAsIC0tdHJhY2VwYXJlbnQgPGhlYWRlcj4nLCAnVHJhY2VwYXJlbnQgaGVhZGVyIGluIFczQyB0cmFjZSBjb250ZXh0IGZvcm1hdCcpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAuZGVmYXVsdChwcm9jZXNzLmVudi5UUkFDRVBBUkVOVClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLXRwcCwgLS10cmFjZXBhcmVudC1wcmludCcsICdQcmludCB0cmFjZXBhcmVudCBoZWFkZXIgaW4gVzNDIHRyYWNlIGNvbnRleHQgZm9ybWF0IGZvciB0aGUgZXhwb3J0ZWQgc3BhbicpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAuZGVmYXVsdChwcm9jZXNzLmVudi5PVEVMX0NMSV9UUkFDRVBBUkVOVF9QUklOVCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuT1RFTF9DTElfVFJBQ0VQQVJFTlRfUFJJTlQudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctdCwgLS10cmFjZS1pZCA8aWQ+JywgJ1RyYWNlIGlkJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52Lk9URUxfQ0xJX1RSQUNFX0lEKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctcywgLS1zcGFuLWlkIDxpZD4nLCAnU3BhbiBpZCcpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAuZGVmYXVsdChnZW5lcmF0ZVNwYW5JZCgpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctcCwgLS1wYXJlbnQtc3Bhbi1pZCA8aWQ+JywgJ1BhcmVudCBzcGFuIGlkJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1uLCAtLW5hbWUgPG5hbWU+JywgJ1NwYW4gbmFtZScpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1zbiwgLS1zZXJ2aWNlLW5hbWUgPG5hbWU+JywgJ1NlcnZpY2UgbmFtZScpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52Lk9URUxfQ0xJX1NFUlZJQ0VfTkFNRSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuT1RFTF9TRVJWSUNFX05BTUUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1rLCAtLWtpbmQgPGtpbmQ+JywgJ1NwYW4ga2luZCcpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAuZGVmYXVsdChTcGFuS2luZFtTcGFuS2luZC5JTlRFUk5BTF0pXG4gICAgICAgICAgICAgICAgICAgIC5jaG9pY2VzKE9iamVjdC5rZXlzKFNwYW5LaW5kKS5maWx0ZXIoKG8pID0+IGlzTmFOKE51bWJlcihvKSkpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctLXN0YXJ0LXRpbWUtbmFub3MgPG5hbm9zPicsICdTdGFydCB0aW1lIGluIG5hbm9zZWNvbmRzJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy0tc3RhcnQtdGltZS1taWNyb3MgPG1pY3Jvcz4nLCAnU3RhcnQgdGltZSBpbiBtaWNyb3NlY29uZHMnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLS1zdGFydC10aW1lLW1pbGxpcyA8bWlsbGlzPicsICdTdGFydCB0aW1lIGluIG1pbGxpc2Vjb25kcycpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctLXN0YXJ0LXRpbWUtc2VjcyA8c2Vjcz4nLCAnU3RhcnQgdGltZSBpbiBzZWNvbmRzJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy0tZW5kLXRpbWUtbmFub3MgPG5hbm9zPicsICdFbmQgdGltZSBpbiBuYW5vc2Vjb25kcycpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctLWVuZC10aW1lLW1pY3JvcyA8bWljcm9zPicsICdFbmQgdGltZSBpbiBtaWNyb3NlY29uZHMnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLS1lbmQtdGltZS1taWxsaXMgPG1pbGxpcz4nLCAnRW5kIHRpbWUgaW4gbWlsbGlzZWNvbmRzJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy0tZW5kLXRpbWUtc2VjcyA8c2Vjcz4nLCAnRW5kIHRpbWUgaW4gc2Vjb25kcycpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctc2MgLS1zdGF0dXMtY29kZSA8Y29kZT4nLCAnU3RhdHVzIGNvZGUnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQoU3BhblN0YXR1c0NvZGVbU3BhblN0YXR1c0NvZGUuVU5TRVRdKVxuICAgICAgICAgICAgICAgICAgICAuY2hvaWNlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKFNwYW5TdGF0dXNDb2RlKS5maWx0ZXIoKG8pID0+IGlzTmFOKE51bWJlcihvKSkpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLXNtIC0tc3RhdHVzLW1lc3NhZ2UgPG1lc3NhZ2U+JywgJ1N0YXR1cyBtZXNzYWdlJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oXG4gICAgICAgICAgICAgICAgICAgICctYSAtLWF0dHJpYnV0ZXMgPGtleS12YWx1ZS1wYWlycy4uLj4nLFxuICAgICAgICAgICAgICAgICAgICAnU3BhbiBhdHRyaWJ1dGVzIGFzIHNwYWNlIHNlcGVyYXRlZCBrZXktdmFsdWUgcGFpcnMgKGtleTE9dmFsdWUxIGtleTI9dmFsdWUyIGtleTM9dmFsdWUzKScpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctc3AsIC0tc2VydmVyLXBvcnQgPHBvcnQ+JyxcbiAgICAgICAgICAgICAgICAgICAgJ09URUwgQ0xJIHNlcnZlciBwb3J0IGZvciBjb21tdW5pY2F0aW5nIG92ZXIgdG8gZXhwb3J0IHRyYWNlcyBhc3luY2hyb25vdXNseSBpbiBiYWNrZ3JvdW5kJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52Lk9URUxfQ0xJX1NFUlZFUl9QT1JUKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhc3luYyBleGVjdXRlKG9wdGlvbnM6IE9wdGlvblZhbHVlcyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9wYXJzZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fY2hlY2tPcHRpb25zKCk7XG5cbiAgICAgICAgY29uc3QgdHJhY2VSZXF1ZXN0OiBUcmFjZVJlcXVlc3QgPSB0aGlzLl9jcmVhdGVUcmFjZVJlcXVlc3QoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZXhwb3J0VHJhY2VSZXF1ZXN0KHRyYWNlUmVxdWVzdCk7XG4gICAgICAgIGlmICh0aGlzLnRyYWNlUGFyZW50UHJpbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuX2dlbmVyYXRlVHJhY2VQYXJlbnQoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0= |
@@ -5,4 +5,6 @@ import { CommandExecutor } from './CommandExecutor'; | ||
| EXPORT = "export", | ||
| GENERATE_ID = "generate-id" | ||
| GENERATE_ID = "generate-id", | ||
| START_SERVER = "start-server", | ||
| SHUTDOWN_SERVER = "shutdown-server" | ||
| } | ||
| export declare function createCommandExecutor(command: string): CommandExecutor; |
@@ -20,2 +20,3 @@ "use strict"; | ||
| const generate_id_1 = require("./generate-id"); | ||
| const server_1 = require("./server"); | ||
| __exportStar(require("./CommandExecutor"), exports); | ||
@@ -26,2 +27,4 @@ var Commands; | ||
| Commands["GENERATE_ID"] = "generate-id"; | ||
| Commands["START_SERVER"] = "start-server"; | ||
| Commands["SHUTDOWN_SERVER"] = "shutdown-server"; | ||
| })(Commands = exports.Commands || (exports.Commands = {})); | ||
@@ -31,2 +34,4 @@ const COMMAND_EXECUTOR_FACTORY_MAP = { | ||
| [Commands.GENERATE_ID]: () => new generate_id_1.GenerateIdCommandExecutor(), | ||
| [Commands.START_SERVER]: () => new server_1.StartServerCommandExecutor(), | ||
| [Commands.SHUTDOWN_SERVER]: () => new server_1.ShutdownServerCommandExecutor(), | ||
| }; | ||
@@ -41,2 +46,2 @@ function createCommandExecutor(command) { | ||
| exports.createCommandExecutor = createCommandExecutor; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLHFDQUFpRDtBQUNqRCwrQ0FBMEQ7QUFFMUQsb0RBQWtDO0FBRWxDLElBQVksUUFHWDtBQUhELFdBQVksUUFBUTtJQUNoQiw2QkFBaUIsQ0FBQTtJQUNqQix1Q0FBMkIsQ0FBQTtBQUMvQixDQUFDLEVBSFcsUUFBUSxHQUFSLGdCQUFRLEtBQVIsZ0JBQVEsUUFHbkI7QUFRRCxNQUFNLDRCQUE0QixHQUE4QjtJQUM1RCxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLDhCQUFxQixFQUFFO0lBQ3BELENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksdUNBQXlCLEVBQUU7Q0FDaEUsQ0FBQztBQUVGLFNBQWdCLHFCQUFxQixDQUFDLE9BQWU7SUFDakQsTUFBTSxzQkFBc0IsR0FDeEIsNEJBQTRCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLE9BQU8sRUFBRSxDQUFDLENBQUM7S0FDbEU7SUFDRCxPQUFPLHNCQUFzQixFQUFFLENBQUM7QUFDcEMsQ0FBQztBQVBELHNEQU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZEV4ZWN1dG9yIH0gZnJvbSAnLi9Db21tYW5kRXhlY3V0b3InO1xuaW1wb3J0IHsgRXhwb3J0Q29tbWFuZEV4ZWN1dG9yIH0gZnJvbSAnLi9leHBvcnQnO1xuaW1wb3J0IHsgR2VuZXJhdGVJZENvbW1hbmRFeGVjdXRvciB9IGZyb20gJy4vZ2VuZXJhdGUtaWQnO1xuXG5leHBvcnQgKiBmcm9tICcuL0NvbW1hbmRFeGVjdXRvcic7XG5cbmV4cG9ydCBlbnVtIENvbW1hbmRzIHtcbiAgICBFWFBPUlQgPSAnZXhwb3J0JyxcbiAgICBHRU5FUkFURV9JRCA9ICdnZW5lcmF0ZS1pZCcsXG59XG5cbnR5cGUgQ29tbWFuZEV4ZWN1dG9yRmFjdG9yeSA9ICgpID0+IENvbW1hbmRFeGVjdXRvcjtcblxuaW50ZXJmYWNlIENvbW1hbmRFeGVjdXRvckZhY3RvcnlNYXAge1xuICAgIFtjb21tYW5kTmFtZTogc3RyaW5nXTogKCkgPT4gQ29tbWFuZEV4ZWN1dG9yO1xufVxuXG5jb25zdCBDT01NQU5EX0VYRUNVVE9SX0ZBQ1RPUllfTUFQOiBDb21tYW5kRXhlY3V0b3JGYWN0b3J5TWFwID0ge1xuICAgIFtDb21tYW5kcy5FWFBPUlRdOiAoKSA9PiBuZXcgRXhwb3J0Q29tbWFuZEV4ZWN1dG9yKCksXG4gICAgW0NvbW1hbmRzLkdFTkVSQVRFX0lEXTogKCkgPT4gbmV3IEdlbmVyYXRlSWRDb21tYW5kRXhlY3V0b3IoKSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21tYW5kRXhlY3V0b3IoY29tbWFuZDogc3RyaW5nKTogQ29tbWFuZEV4ZWN1dG9yIHtcbiAgICBjb25zdCBjb21tYW5kRXhlY3V0b3JGYWN0b3J5OiBDb21tYW5kRXhlY3V0b3JGYWN0b3J5ID1cbiAgICAgICAgQ09NTUFORF9FWEVDVVRPUl9GQUNUT1JZX01BUFtjb21tYW5kXTtcbiAgICBpZiAoIWNvbW1hbmRFeGVjdXRvckZhY3RvcnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgY29tbWFuZCB0byBleGVjdXRlOiAke2NvbW1hbmR9YCk7XG4gICAgfVxuICAgIHJldHVybiBjb21tYW5kRXhlY3V0b3JGYWN0b3J5KCk7XG59XG4iXX0= | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLHFDQUFpRDtBQUNqRCwrQ0FBMEQ7QUFDMUQscUNBR2tCO0FBRWxCLG9EQUFrQztBQUVsQyxJQUFZLFFBS1g7QUFMRCxXQUFZLFFBQVE7SUFDaEIsNkJBQWlCLENBQUE7SUFDakIsdUNBQTJCLENBQUE7SUFDM0IseUNBQTZCLENBQUE7SUFDN0IsK0NBQW1DLENBQUE7QUFDdkMsQ0FBQyxFQUxXLFFBQVEsR0FBUixnQkFBUSxLQUFSLGdCQUFRLFFBS25CO0FBUUQsTUFBTSw0QkFBNEIsR0FBOEI7SUFDNUQsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSw4QkFBcUIsRUFBRTtJQUNwRCxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLHVDQUF5QixFQUFFO0lBQzdELENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksbUNBQTBCLEVBQUU7SUFDL0QsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxzQ0FBNkIsRUFBRTtDQUN4RSxDQUFDO0FBRUYsU0FBZ0IscUJBQXFCLENBQUMsT0FBZTtJQUNqRCxNQUFNLHNCQUFzQixHQUN4Qiw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUNsRTtJQUNELE9BQU8sc0JBQXNCLEVBQUUsQ0FBQztBQUNwQyxDQUFDO0FBUEQsc0RBT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kRXhlY3V0b3IgfSBmcm9tICcuL0NvbW1hbmRFeGVjdXRvcic7XG5pbXBvcnQgeyBFeHBvcnRDb21tYW5kRXhlY3V0b3IgfSBmcm9tICcuL2V4cG9ydCc7XG5pbXBvcnQgeyBHZW5lcmF0ZUlkQ29tbWFuZEV4ZWN1dG9yIH0gZnJvbSAnLi9nZW5lcmF0ZS1pZCc7XG5pbXBvcnQge1xuICAgIFNodXRkb3duU2VydmVyQ29tbWFuZEV4ZWN1dG9yLFxuICAgIFN0YXJ0U2VydmVyQ29tbWFuZEV4ZWN1dG9yLFxufSBmcm9tICcuL3NlcnZlcic7XG5cbmV4cG9ydCAqIGZyb20gJy4vQ29tbWFuZEV4ZWN1dG9yJztcblxuZXhwb3J0IGVudW0gQ29tbWFuZHMge1xuICAgIEVYUE9SVCA9ICdleHBvcnQnLFxuICAgIEdFTkVSQVRFX0lEID0gJ2dlbmVyYXRlLWlkJyxcbiAgICBTVEFSVF9TRVJWRVIgPSAnc3RhcnQtc2VydmVyJyxcbiAgICBTSFVURE9XTl9TRVJWRVIgPSAnc2h1dGRvd24tc2VydmVyJyxcbn1cblxudHlwZSBDb21tYW5kRXhlY3V0b3JGYWN0b3J5ID0gKCkgPT4gQ29tbWFuZEV4ZWN1dG9yO1xuXG5pbnRlcmZhY2UgQ29tbWFuZEV4ZWN1dG9yRmFjdG9yeU1hcCB7XG4gICAgW2NvbW1hbmROYW1lOiBzdHJpbmddOiAoKSA9PiBDb21tYW5kRXhlY3V0b3I7XG59XG5cbmNvbnN0IENPTU1BTkRfRVhFQ1VUT1JfRkFDVE9SWV9NQVA6IENvbW1hbmRFeGVjdXRvckZhY3RvcnlNYXAgPSB7XG4gICAgW0NvbW1hbmRzLkVYUE9SVF06ICgpID0+IG5ldyBFeHBvcnRDb21tYW5kRXhlY3V0b3IoKSxcbiAgICBbQ29tbWFuZHMuR0VORVJBVEVfSURdOiAoKSA9PiBuZXcgR2VuZXJhdGVJZENvbW1hbmRFeGVjdXRvcigpLFxuICAgIFtDb21tYW5kcy5TVEFSVF9TRVJWRVJdOiAoKSA9PiBuZXcgU3RhcnRTZXJ2ZXJDb21tYW5kRXhlY3V0b3IoKSxcbiAgICBbQ29tbWFuZHMuU0hVVERPV05fU0VSVkVSXTogKCkgPT4gbmV3IFNodXRkb3duU2VydmVyQ29tbWFuZEV4ZWN1dG9yKCksXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZEV4ZWN1dG9yKGNvbW1hbmQ6IHN0cmluZyk6IENvbW1hbmRFeGVjdXRvciB7XG4gICAgY29uc3QgY29tbWFuZEV4ZWN1dG9yRmFjdG9yeTogQ29tbWFuZEV4ZWN1dG9yRmFjdG9yeSA9XG4gICAgICAgIENPTU1BTkRfRVhFQ1VUT1JfRkFDVE9SWV9NQVBbY29tbWFuZF07XG4gICAgaWYgKCFjb21tYW5kRXhlY3V0b3JGYWN0b3J5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGNvbW1hbmQgdG8gZXhlY3V0ZTogJHtjb21tYW5kfWApO1xuICAgIH1cbiAgICByZXR1cm4gY29tbWFuZEV4ZWN1dG9yRmFjdG9yeSgpO1xufVxuIl19 |
| export declare const OTEL_CLI_NAME = "otel-cli"; | ||
| export declare const OTEL_CLI_VERSION: any; | ||
| export declare const DEFAULT_SERVER_HOST: string; | ||
| export declare const DEFAULT_SERVER_PORT: number; | ||
| export declare const RESOURCE_ATTRIBUTES: { | ||
@@ -4,0 +6,0 @@ SERVICE_NAME: string; |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.RESOURCE_ATTRIBUTES = exports.OTEL_CLI_VERSION = exports.OTEL_CLI_NAME = void 0; | ||
| exports.RESOURCE_ATTRIBUTES = exports.DEFAULT_SERVER_PORT = exports.DEFAULT_SERVER_HOST = exports.OTEL_CLI_VERSION = exports.OTEL_CLI_NAME = void 0; | ||
| exports.OTEL_CLI_NAME = 'otel-cli'; | ||
| exports.OTEL_CLI_VERSION = require('../package.json').version; | ||
| exports.DEFAULT_SERVER_HOST = 'localhost'; | ||
| exports.DEFAULT_SERVER_PORT = 7777; | ||
| exports.RESOURCE_ATTRIBUTES = { | ||
@@ -23,2 +25,2 @@ // Logical name of the service. | ||
| }; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLGFBQWEsR0FBRyxVQUFVLENBQUM7QUFDaEIsd0JBQWdCLEdBQUssT0FBTyxDQUFDLGlCQUFpQixDQUFDLFNBQUM7QUFFM0QsUUFBQSxtQkFBbUIsR0FBRztJQUMvQiwrQkFBK0I7SUFDL0IsWUFBWSxFQUFFLGNBQWM7SUFDNUIsdUZBQXVGO0lBQ3ZGLDBFQUEwRTtJQUMxRSxTQUFTLEVBQUUsV0FBVztJQUN0QiwwREFBMEQ7SUFDMUQsU0FBUyxFQUFFLFdBQVc7SUFDdEIsc0RBQXNEO0lBQ3RELFNBQVMsRUFBRSxXQUFXO0lBQ3RCLDZCQUE2QjtJQUM3QixPQUFPLEVBQUUsU0FBUztJQUNsQix3Q0FBd0M7SUFDeEMsT0FBTyxFQUFFLFNBQVM7SUFDbEIsNkNBQTZDO0lBQzdDLFVBQVUsRUFBRSxZQUFZO0NBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgT1RFTF9DTElfTkFNRSA9ICdvdGVsLWNsaSc7XG5leHBvcnQgY29uc3QgeyB2ZXJzaW9uOiBPVEVMX0NMSV9WRVJTSU9OIH0gPSByZXF1aXJlKCcuLi9wYWNrYWdlLmpzb24nKTtcblxuZXhwb3J0IGNvbnN0IFJFU09VUkNFX0FUVFJJQlVURVMgPSB7XG4gICAgLy8gTG9naWNhbCBuYW1lIG9mIHRoZSBzZXJ2aWNlLlxuICAgIFNFUlZJQ0VfTkFNRTogJ3NlcnZpY2UubmFtZScsXG4gICAgLy8gTmFtZSBvZiB0aGUgaG9zdC4gT24gVW5peCBzeXN0ZW1zLCBpdCBtYXkgY29udGFpbiB3aGF0IHRoZSBob3N0bmFtZSBjb21tYW5kIHJldHVybnMsXG4gICAgLy8gb3IgdGhlIGZ1bGx5IHF1YWxpZmllZCBob3N0bmFtZSwgb3IgYW5vdGhlciBuYW1lIHNwZWNpZmllZCBieSB0aGUgdXNlci5cbiAgICBIT1NUX05BTUU6ICdob3N0Lm5hbWUnLFxuICAgIC8vIFR5cGUgb2YgaG9zdC4gRm9yIENsb3VkLCB0aGlzIG11c3QgYmUgdGhlIG1hY2hpbmUgdHlwZS5cbiAgICBIT1NUX1RZUEU6ICdob3N0LnR5cGUnLFxuICAgIC8vIFRoZSBDUFUgYXJjaGl0ZWN0dXJlIHRoZSBob3N0IHN5c3RlbSBpcyBydW5uaW5nIG9uLlxuICAgIEhPU1RfQVJDSDogJ2hvc3QuYXJjaCcsXG4gICAgLy8gVGhlIG9wZXJhdGluZyBzeXN0ZW0gdHlwZS5cbiAgICBPU19UWVBFOiAnb3MudHlwZScsXG4gICAgLy8gSHVtYW4gcmVhZGFibGUgb3BlcmF0aW5nIHN5c3RlbSBuYW1lLlxuICAgIE9TX05BTUU6ICdvcy5uYW1lJyxcbiAgICAvLyBUaGUgdmVyc2lvbiBzdHJpbmcgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW1cbiAgICBPU19WRVJTSU9OOiAnb3MudmVyc2lvbicsXG59O1xuIl19 | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLGFBQWEsR0FBRyxVQUFVLENBQUM7QUFDaEIsd0JBQWdCLEdBQUssT0FBTyxDQUFDLGlCQUFpQixDQUFDLFNBQUM7QUFFM0QsUUFBQSxtQkFBbUIsR0FBVyxXQUFXLENBQUM7QUFDMUMsUUFBQSxtQkFBbUIsR0FBVyxJQUFJLENBQUM7QUFFbkMsUUFBQSxtQkFBbUIsR0FBRztJQUMvQiwrQkFBK0I7SUFDL0IsWUFBWSxFQUFFLGNBQWM7SUFDNUIsdUZBQXVGO0lBQ3ZGLDBFQUEwRTtJQUMxRSxTQUFTLEVBQUUsV0FBVztJQUN0QiwwREFBMEQ7SUFDMUQsU0FBUyxFQUFFLFdBQVc7SUFDdEIsc0RBQXNEO0lBQ3RELFNBQVMsRUFBRSxXQUFXO0lBQ3RCLDZCQUE2QjtJQUM3QixPQUFPLEVBQUUsU0FBUztJQUNsQix3Q0FBd0M7SUFDeEMsT0FBTyxFQUFFLFNBQVM7SUFDbEIsNkNBQTZDO0lBQzdDLFVBQVUsRUFBRSxZQUFZO0NBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgT1RFTF9DTElfTkFNRSA9ICdvdGVsLWNsaSc7XG5leHBvcnQgY29uc3QgeyB2ZXJzaW9uOiBPVEVMX0NMSV9WRVJTSU9OIH0gPSByZXF1aXJlKCcuLi9wYWNrYWdlLmpzb24nKTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VSVkVSX0hPU1Q6IHN0cmluZyA9ICdsb2NhbGhvc3QnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VSVkVSX1BPUlQ6IG51bWJlciA9IDc3Nzc7XG5cbmV4cG9ydCBjb25zdCBSRVNPVVJDRV9BVFRSSUJVVEVTID0ge1xuICAgIC8vIExvZ2ljYWwgbmFtZSBvZiB0aGUgc2VydmljZS5cbiAgICBTRVJWSUNFX05BTUU6ICdzZXJ2aWNlLm5hbWUnLFxuICAgIC8vIE5hbWUgb2YgdGhlIGhvc3QuIE9uIFVuaXggc3lzdGVtcywgaXQgbWF5IGNvbnRhaW4gd2hhdCB0aGUgaG9zdG5hbWUgY29tbWFuZCByZXR1cm5zLFxuICAgIC8vIG9yIHRoZSBmdWxseSBxdWFsaWZpZWQgaG9zdG5hbWUsIG9yIGFub3RoZXIgbmFtZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuXG4gICAgSE9TVF9OQU1FOiAnaG9zdC5uYW1lJyxcbiAgICAvLyBUeXBlIG9mIGhvc3QuIEZvciBDbG91ZCwgdGhpcyBtdXN0IGJlIHRoZSBtYWNoaW5lIHR5cGUuXG4gICAgSE9TVF9UWVBFOiAnaG9zdC50eXBlJyxcbiAgICAvLyBUaGUgQ1BVIGFyY2hpdGVjdHVyZSB0aGUgaG9zdCBzeXN0ZW0gaXMgcnVubmluZyBvbi5cbiAgICBIT1NUX0FSQ0g6ICdob3N0LmFyY2gnLFxuICAgIC8vIFRoZSBvcGVyYXRpbmcgc3lzdGVtIHR5cGUuXG4gICAgT1NfVFlQRTogJ29zLnR5cGUnLFxuICAgIC8vIEh1bWFuIHJlYWRhYmxlIG9wZXJhdGluZyBzeXN0ZW0gbmFtZS5cbiAgICBPU19OQU1FOiAnb3MubmFtZScsXG4gICAgLy8gVGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtXG4gICAgT1NfVkVSU0lPTjogJ29zLnZlcnNpb24nLFxufTtcbiJdfQ== |
@@ -7,1 +7,2 @@ import { TraceExporter } from './TraceExporter'; | ||
| export declare function createTraceExporter(exporterOTLPProtocol: string, exporterOTLPEndpoint: string, exporterOTLPHeaders: Map<string, string>): TraceExporter; | ||
| export declare function createServerTraceExporter(serverPort: number): TraceExporter; |
@@ -17,4 +17,6 @@ "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.createTraceExporter = exports.ExporterOTLPProtocols = void 0; | ||
| exports.createServerTraceExporter = exports.createTraceExporter = exports.ExporterOTLPProtocols = void 0; | ||
| const http_1 = require("./http"); | ||
| const server_1 = require("./server"); | ||
| const constants_1 = require("../constants"); | ||
| __exportStar(require("./TraceExporter"), exports); | ||
@@ -36,2 +38,6 @@ var ExporterOTLPProtocols; | ||
| exports.createTraceExporter = createTraceExporter; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXhwb3J0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUNBQStDO0FBRy9DLGtEQUFnQztBQUVoQyxJQUFZLHFCQUVYO0FBRkQsV0FBWSxxQkFBcUI7SUFDN0IsZ0RBQXVCLENBQUE7QUFDM0IsQ0FBQyxFQUZXLHFCQUFxQixHQUFyQiw2QkFBcUIsS0FBckIsNkJBQXFCLFFBRWhDO0FBY0QsTUFBTSwwQkFBMEIsR0FBNEI7SUFDeEQsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUMvQixvQkFBNEIsRUFDNUIsbUJBQXdDLEVBQzFDLEVBQUUsQ0FBQyxJQUFJLDRCQUFxQixDQUFDLG9CQUFvQixFQUFFLG1CQUFtQixDQUFDO0NBQzVFLENBQUM7QUFFRixTQUFnQixtQkFBbUIsQ0FDL0Isb0JBQTRCLEVBQzVCLG9CQUE0QixFQUM1QixtQkFBd0M7SUFFeEMsTUFBTSxvQkFBb0IsR0FDdEIsMEJBQTBCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNyRCxJQUFJLENBQUMsb0JBQW9CLEVBQUU7UUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FDWCx3Q0FBd0Msb0JBQW9CLEVBQUUsQ0FDakUsQ0FBQztLQUNMO0lBQ0QsT0FBTyxvQkFBb0IsQ0FBQyxvQkFBb0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFiRCxrREFhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBKc29uVHJhY2VFeHBvcnRlciB9IGZyb20gJy4vaHR0cCc7XG5pbXBvcnQgeyBUcmFjZUV4cG9ydGVyIH0gZnJvbSAnLi9UcmFjZUV4cG9ydGVyJztcblxuZXhwb3J0ICogZnJvbSAnLi9UcmFjZUV4cG9ydGVyJztcblxuZXhwb3J0IGVudW0gRXhwb3J0ZXJPVExQUHJvdG9jb2xzIHtcbiAgICBIVFRQX0pTT04gPSAnaHR0cC9qc29uJyxcbn1cblxudHlwZSBUcmFjZUV4cG9ydGVyRmFjdG9yeSA9IChcbiAgICBleHBvcnRlck9UTFBFbmRwb2ludDogc3RyaW5nLFxuICAgIGV4cG9ydGVyT1RMUEhlYWRlcnM6IE1hcDxzdHJpbmcsIHN0cmluZz5cbikgPT4gVHJhY2VFeHBvcnRlcjtcblxuaW50ZXJmYWNlIFRyYWNlRXhwb3J0ZXJGYWN0b3J5TWFwIHtcbiAgICBbZXhwb3J0ZXJPVExQUHJvdG9jb2w6IHN0cmluZ106IChcbiAgICAgICAgZXhwb3J0ZXJPVExQRW5kcG9pbnQ6IHN0cmluZyxcbiAgICAgICAgZXhwb3J0ZXJPVExQSGVhZGVyczogTWFwPHN0cmluZywgc3RyaW5nPlxuICAgICkgPT4gVHJhY2VFeHBvcnRlcjtcbn1cblxuY29uc3QgVFJBQ0VfRVhQT1JURVJfRkFDVE9SWV9NQVA6IFRyYWNlRXhwb3J0ZXJGYWN0b3J5TWFwID0ge1xuICAgIFtFeHBvcnRlck9UTFBQcm90b2NvbHMuSFRUUF9KU09OXTogKFxuICAgICAgICBleHBvcnRlck9UTFBFbmRwb2ludDogc3RyaW5nLFxuICAgICAgICBleHBvcnRlck9UTFBIZWFkZXJzOiBNYXA8c3RyaW5nLCBzdHJpbmc+XG4gICAgKSA9PiBuZXcgSHR0cEpzb25UcmFjZUV4cG9ydGVyKGV4cG9ydGVyT1RMUEVuZHBvaW50LCBleHBvcnRlck9UTFBIZWFkZXJzKSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUcmFjZUV4cG9ydGVyKFxuICAgIGV4cG9ydGVyT1RMUFByb3RvY29sOiBzdHJpbmcsXG4gICAgZXhwb3J0ZXJPVExQRW5kcG9pbnQ6IHN0cmluZyxcbiAgICBleHBvcnRlck9UTFBIZWFkZXJzOiBNYXA8c3RyaW5nLCBzdHJpbmc+XG4pIHtcbiAgICBjb25zdCB0cmFjZUV4cG9ydGVyRmFjdG9yeTogVHJhY2VFeHBvcnRlckZhY3RvcnkgPVxuICAgICAgICBUUkFDRV9FWFBPUlRFUl9GQUNUT1JZX01BUFtleHBvcnRlck9UTFBQcm90b2NvbF07XG4gICAgaWYgKCF0cmFjZUV4cG9ydGVyRmFjdG9yeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVW5yZWNvZ25pemVkIGV4cG9ydGVyIE9UTFAgcHJvdG9jb2w6ICR7ZXhwb3J0ZXJPVExQUHJvdG9jb2x9YFxuICAgICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHJhY2VFeHBvcnRlckZhY3RvcnkoZXhwb3J0ZXJPVExQRW5kcG9pbnQsIGV4cG9ydGVyT1RMUEhlYWRlcnMpO1xufVxuIl19 | ||
| function createServerTraceExporter(serverPort) { | ||
| return new server_1.ServerTraceExporter(constants_1.DEFAULT_SERVER_HOST, serverPort); | ||
| } | ||
| exports.createServerTraceExporter = createServerTraceExporter; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXhwb3J0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUNBQStDO0FBRS9DLHFDQUErQztBQUMvQyw0Q0FBbUQ7QUFFbkQsa0RBQWdDO0FBRWhDLElBQVkscUJBRVg7QUFGRCxXQUFZLHFCQUFxQjtJQUM3QixnREFBdUIsQ0FBQTtBQUMzQixDQUFDLEVBRlcscUJBQXFCLEdBQXJCLDZCQUFxQixLQUFyQiw2QkFBcUIsUUFFaEM7QUFjRCxNQUFNLDBCQUEwQixHQUE0QjtJQUN4RCxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQy9CLG9CQUE0QixFQUM1QixtQkFBd0MsRUFDMUMsRUFBRSxDQUFDLElBQUksNEJBQXFCLENBQUMsb0JBQW9CLEVBQUUsbUJBQW1CLENBQUM7Q0FDNUUsQ0FBQztBQUVGLFNBQWdCLG1CQUFtQixDQUMvQixvQkFBNEIsRUFDNUIsb0JBQTRCLEVBQzVCLG1CQUF3QztJQUV4QyxNQUFNLG9CQUFvQixHQUN0QiwwQkFBMEIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3JELElBQUksQ0FBQyxvQkFBb0IsRUFBRTtRQUN2QixNQUFNLElBQUksS0FBSyxDQUNYLHdDQUF3QyxvQkFBb0IsRUFBRSxDQUNqRSxDQUFDO0tBQ0w7SUFDRCxPQUFPLG9CQUFvQixDQUFDLG9CQUFvQixFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDM0UsQ0FBQztBQWJELGtEQWFDO0FBRUQsU0FBZ0IseUJBQXlCLENBQUMsVUFBa0I7SUFDeEQsT0FBTyxJQUFJLDRCQUFtQixDQUFDLCtCQUFtQixFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFGRCw4REFFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBKc29uVHJhY2VFeHBvcnRlciB9IGZyb20gJy4vaHR0cCc7XG5pbXBvcnQgeyBUcmFjZUV4cG9ydGVyIH0gZnJvbSAnLi9UcmFjZUV4cG9ydGVyJztcbmltcG9ydCB7IFNlcnZlclRyYWNlRXhwb3J0ZXIgfSBmcm9tICcuL3NlcnZlcic7XG5pbXBvcnQgeyBERUZBVUxUX1NFUlZFUl9IT1NUIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuZXhwb3J0ICogZnJvbSAnLi9UcmFjZUV4cG9ydGVyJztcblxuZXhwb3J0IGVudW0gRXhwb3J0ZXJPVExQUHJvdG9jb2xzIHtcbiAgICBIVFRQX0pTT04gPSAnaHR0cC9qc29uJyxcbn1cblxudHlwZSBUcmFjZUV4cG9ydGVyRmFjdG9yeSA9IChcbiAgICBleHBvcnRlck9UTFBFbmRwb2ludDogc3RyaW5nLFxuICAgIGV4cG9ydGVyT1RMUEhlYWRlcnM6IE1hcDxzdHJpbmcsIHN0cmluZz5cbikgPT4gVHJhY2VFeHBvcnRlcjtcblxuaW50ZXJmYWNlIFRyYWNlRXhwb3J0ZXJGYWN0b3J5TWFwIHtcbiAgICBbZXhwb3J0ZXJPVExQUHJvdG9jb2w6IHN0cmluZ106IChcbiAgICAgICAgZXhwb3J0ZXJPVExQRW5kcG9pbnQ6IHN0cmluZyxcbiAgICAgICAgZXhwb3J0ZXJPVExQSGVhZGVyczogTWFwPHN0cmluZywgc3RyaW5nPlxuICAgICkgPT4gVHJhY2VFeHBvcnRlcjtcbn1cblxuY29uc3QgVFJBQ0VfRVhQT1JURVJfRkFDVE9SWV9NQVA6IFRyYWNlRXhwb3J0ZXJGYWN0b3J5TWFwID0ge1xuICAgIFtFeHBvcnRlck9UTFBQcm90b2NvbHMuSFRUUF9KU09OXTogKFxuICAgICAgICBleHBvcnRlck9UTFBFbmRwb2ludDogc3RyaW5nLFxuICAgICAgICBleHBvcnRlck9UTFBIZWFkZXJzOiBNYXA8c3RyaW5nLCBzdHJpbmc+XG4gICAgKSA9PiBuZXcgSHR0cEpzb25UcmFjZUV4cG9ydGVyKGV4cG9ydGVyT1RMUEVuZHBvaW50LCBleHBvcnRlck9UTFBIZWFkZXJzKSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUcmFjZUV4cG9ydGVyKFxuICAgIGV4cG9ydGVyT1RMUFByb3RvY29sOiBzdHJpbmcsXG4gICAgZXhwb3J0ZXJPVExQRW5kcG9pbnQ6IHN0cmluZyxcbiAgICBleHBvcnRlck9UTFBIZWFkZXJzOiBNYXA8c3RyaW5nLCBzdHJpbmc+XG4pOiBUcmFjZUV4cG9ydGVyIHtcbiAgICBjb25zdCB0cmFjZUV4cG9ydGVyRmFjdG9yeTogVHJhY2VFeHBvcnRlckZhY3RvcnkgPVxuICAgICAgICBUUkFDRV9FWFBPUlRFUl9GQUNUT1JZX01BUFtleHBvcnRlck9UTFBQcm90b2NvbF07XG4gICAgaWYgKCF0cmFjZUV4cG9ydGVyRmFjdG9yeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVW5yZWNvZ25pemVkIGV4cG9ydGVyIE9UTFAgcHJvdG9jb2w6ICR7ZXhwb3J0ZXJPVExQUHJvdG9jb2x9YFxuICAgICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHJhY2VFeHBvcnRlckZhY3RvcnkoZXhwb3J0ZXJPVExQRW5kcG9pbnQsIGV4cG9ydGVyT1RMUEhlYWRlcnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VydmVyVHJhY2VFeHBvcnRlcihzZXJ2ZXJQb3J0OiBudW1iZXIpOiBUcmFjZUV4cG9ydGVyIHtcbiAgICByZXR1cm4gbmV3IFNlcnZlclRyYWNlRXhwb3J0ZXIoREVGQVVMVF9TRVJWRVJfSE9TVCwgc2VydmVyUG9ydCk7XG59XG4iXX0= |
+1
-0
@@ -13,1 +13,2 @@ import { Attribute } from './domain/Attribute'; | ||
| export declare function flattenAttributes(attributeMap: Map<string, string>): Attribute[]; | ||
| export declare function parseKeyValue(keyValuePairs: string[]): Map<string, string>; |
+41
-2
| "use strict"; | ||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| var desc = Object.getOwnPropertyDescriptor(m, k); | ||
| if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
| desc = { enumerable: true, get: function() { return m[k]; } }; | ||
| } | ||
| Object.defineProperty(o, k2, desc); | ||
| }) : (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| o[k2] = m[k]; | ||
| })); | ||
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
| Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
| }) : function(o, v) { | ||
| o["default"] = v; | ||
| }); | ||
| var __importStar = (this && this.__importStar) || function (mod) { | ||
| if (mod && mod.__esModule) return mod; | ||
| var result = {}; | ||
| if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
| __setModuleDefault(result, mod); | ||
| return result; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.flattenAttributes = exports.extractSpanIdFromTraceParent = exports.extractTraceIdFromTraceParent = exports.validateTraceParent = exports.validateTraceId = exports.validateSpanId = exports.generateTraceId = exports.generateSpanId = exports.generateId = exports.isDouble = exports.isInteger = void 0; | ||
| exports.parseKeyValue = exports.flattenAttributes = exports.extractSpanIdFromTraceParent = exports.extractTraceIdFromTraceParent = exports.validateTraceParent = exports.validateTraceId = exports.validateSpanId = exports.generateTraceId = exports.generateSpanId = exports.generateId = exports.isDouble = exports.isInteger = void 0; | ||
| const logger = __importStar(require("./logger")); | ||
| const exit_1 = require("./exit"); | ||
| const SPAN_ID_BYTES = 8; | ||
@@ -105,2 +130,16 @@ const TRACE_ID_BYTES = 16; | ||
| exports.flattenAttributes = flattenAttributes; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUMxQixNQUFNLGFBQWEsR0FBVyxNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRWpFLFNBQWdCLFNBQVMsQ0FBQyxLQUFhO0lBQ25DLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRkQsOEJBRUM7QUFFRCxTQUFnQixRQUFRLENBQUMsS0FBYTtJQUNsQyxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUZELDRCQUVDO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLEtBQWE7SUFDcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDaEMsd0RBQXdEO1FBQ3hELCtFQUErRTtRQUMvRSxtREFBbUQ7UUFDbkQsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUN2RTtJQUVELHNGQUFzRjtJQUN0RixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzVCLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN0QixNQUFNO1NBQ1Q7YUFBTSxJQUFJLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLGFBQWEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdB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UCxDQUFDO0FBL0JELDhDQStCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0dHJpYnV0ZSwgVmFsdWUgfSBmcm9tICcuL2RvbWFpbi9BdHRyaWJ1dGUnO1xuXG5jb25zdCBTUEFOX0lEX0JZVEVTID0gODtcbmNvbnN0IFRSQUNFX0lEX0JZVEVTID0gMTY7XG5jb25zdCBTSEFSRURfQlVGRkVSOiBCdWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoVFJBQ0VfSURfQllURVMpO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL14tP1xcZCskLy50ZXN0KHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRG91YmxlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL15cXGQrXFwuXFxkKyQvLnRlc3QodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVJZChieXRlczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzIC8gNDsgaSsrKSB7XG4gICAgICAgIC8vIHVuc2lnbmVkIHJpZ2h0IHNoaWZ0IGRyb3BzIGRlY2ltYWwgcGFydCBvZiB0aGUgbnVtYmVyXG4gICAgICAgIC8vIGl0IGlzIHJlcXVpcmVkIGJlY2F1c2UgaWYgYSBudW1iZXIgYmV0d2VlbiAyKiozMiBhbmQgMioqMzIgLSAxIGlzIGdlbmVyYXRlZCxcbiAgICAgICAgLy8gYW4gb3V0IG9mIHJhbmdlIGVycm9yIGlzIHRocm93biBieSB3cml0ZVVJbnQzMkJFXG4gICAgICAgIFNIQVJFRF9CVUZGRVIud3JpdGVVSW50MzJCRSgoTWF0aC5yYW5kb20oKSAqIDIgKiogMzIpID4+PiAwLCBpICogNCk7XG4gICAgfVxuXG4gICAgLy8gSWYgYnVmZmVyIGlzIGFsbCAwLCBzZXQgdGhlIGxhc3QgYnl0ZSB0byAxIHRvIGd1YXJhbnRlZSBhIHZhbGlkIHczYyBpZCBpcyBnZW5lcmF0ZWRcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzOyBpKyspIHtcbiAgICAgICAgaWYgKFNIQVJFRF9CVUZGRVJbaV0gPiAwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSBieXRlcyAtIDEpIHtcbiAgICAgICAgICAgIFNIQVJFRF9CVUZGRVJbYnl0ZXMgLSAxXSA9IDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gU0hBUkVEX0JVRkZFUi50b1N0cmluZygnaGV4JywgMCwgYnl0ZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVTcGFuSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2VuZXJhdGVJZChTUEFOX0lEX0JZVEVTKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlVHJhY2VJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZW5lcmF0ZUlkKFRSQUNFX0lEX0JZVEVTKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU3BhbklkKHNwYW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eW2EtZlxcZF17MTZ9JC8udGVzdChzcGFuSWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUcmFjZUlkKHNwYW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eW2EtZlxcZF17MzJ9JC8udGVzdChzcGFuSWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUcmFjZVBhcmVudCh0cmFjZVBhcmVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eMDAtW2EtZlxcZF17MzJ9LVthLWZcXGRdezE2fS1bYS1mXFxkXXsyfSQvLnRlc3QodHJhY2VQYXJlbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFRyYWNlSWRGcm9tVHJhY2VQYXJlbnQodHJhY2VQYXJlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHZhbGlkYXRlVHJhY2VQYXJlbnQodHJhY2VQYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiB0cmFjZVBhcmVudC5zcGxpdCgnLScpWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0cmFjZSBwYXJlbnQ6ICR7dHJhY2VQYXJlbnR9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFNwYW5JZEZyb21UcmFjZVBhcmVudCh0cmFjZVBhcmVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodmFsaWRhdGVUcmFjZVBhcmVudCh0cmFjZVBhcmVudCkpIHtcbiAgICAgICAgcmV0dXJuIHRyYWNlUGFyZW50LnNwbGl0KCctJylbMl07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRyYWNlIHBhcmVudDogJHt0cmFjZVBhcmVudH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuQXR0cmlidXRlcyhcbiAgICBhdHRyaWJ1dGVNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz5cbik6IEF0dHJpYnV0ZVtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShhdHRyaWJ1dGVNYXAsIChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgbGV0IHZhbDogVmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCdcIicpICYmIHZhbHVlLmVuZHNXaXRoKCdcIicpKSB7XG4gICAgICAgICAgICB2YWwgPSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nVmFsdWU6IHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgfHxcbiAgICAgICAgICAgIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICdmYWxzZSdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB2YWwgPSB7XG4gICAgICAgICAgICAgICAgYm9vbFZhbHVlOiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbCA9IHtcbiAgICAgICAgICAgICAgICBpbnRWYWx1ZTogcGFyc2VJbnQodmFsdWUpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RvdWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbCA9IHtcbiAgICAgICAgICAgICAgICBkb3VibGVWYWx1ZTogcGFyc2VGbG9hdCh2YWx1ZSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsID0ge1xuICAgICAgICAgICAgICAgIHN0cmluZ1ZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZTogdmFsIH0gYXMgQXR0cmlidXRlO1xuICAgIH0pO1xufVxuIl19 | ||
| function parseKeyValue(keyValuePairs) { | ||
| return new Map((keyValuePairs || []).map((pair) => { | ||
| const separatorIdx = pair.indexOf('='); | ||
| if (separatorIdx < 0) { | ||
| logger.error(`Key-value pair must be in "key=value" format: ${pair}`); | ||
| (0, exit_1.exit)(1); | ||
| } | ||
| return [ | ||
| pair.substring(0, separatorIdx), | ||
| pair.substring(separatorIdx + 1), | ||
| ]; | ||
| })); | ||
| } | ||
| exports.parseKeyValue = parseKeyValue; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxpREFBbUM7QUFDbkMsaUNBQThCO0FBRTlCLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDMUIsTUFBTSxhQUFhLEdBQVcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUVqRSxTQUFnQixTQUFTLENBQUMsS0FBYTtJQUNuQyxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUZELDhCQUVDO0FBRUQsU0FBZ0IsUUFBUSxDQUFDLEtBQWE7SUFDbEMsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFGRCw0QkFFQztBQUVELFNBQWdCLFVBQVUsQ0FBQyxLQUFhO0lBQ3BDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hDLHdEQUF3RDtRQUN4RCwrRUFBK0U7UUFDL0UsbURBQW1EO1FBQ25ELGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDdkU7SUFFRCxzRkFBc0Y7SUFDdEYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM1QixJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdEIsTUFBTTtTQUNUO2FBQU0sSUFBSSxDQUFDLEtBQUssS0FBSyxHQUFH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S0FBSyxFQUFFLEdBQUcsRUFBZSxDQUFDO0lBQzVDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQS9CRCw4Q0ErQkM7QUFFRCxTQUFnQixhQUFhLENBQUMsYUFBdUI7SUFDakQsT0FBTyxJQUFJLEdBQUcsQ0FDVixDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUN2QyxNQUFNLFlBQVksR0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRTtZQUNsQixNQUFNLENBQUMsS0FBSyxDQUNSLGlEQUFpRCxJQUFJLEVBQUUsQ0FDMUQsQ0FBQztZQUNGLElBQUEsV0FBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ1g7UUFDRCxPQUFPO1lBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDO1lBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztTQUNuQyxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQ0wsQ0FBQztBQUNOLENBQUM7QUFoQkQsc0NBZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXR0cmlidXRlLCBWYWx1ZSB9IGZyb20gJy4vZG9tYWluL0F0dHJpYnV0ZSc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgZXhpdCB9IGZyb20gJy4vZXhpdCc7XG5cbmNvbnN0IFNQQU5fSURfQllURVMgPSA4O1xuY29uc3QgVFJBQ0VfSURfQllURVMgPSAxNjtcbmNvbnN0IFNIQVJFRF9CVUZGRVI6IEJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShUUkFDRV9JRF9CWVRFUyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXIodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXi0/XFxkKyQvLnRlc3QodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEb3VibGUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXlxcZCtcXC5cXGQrJC8udGVzdCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUlkKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMgLyA0OyBpKyspIHtcbiAgICAgICAgLy8gdW5zaWduZWQgcmlnaHQgc2hpZnQgZHJvcHMgZGVjaW1hbCBwYXJ0IG9mIHRoZSBudW1iZXJcbiAgICAgICAgLy8gaXQgaXMgcmVxdWlyZWQgYmVjYXVzZSBpZiBhIG51bWJlciBiZXR3ZWVuIDIqKjMyIGFuZCAyKiozMiAtIDEgaXMgZ2VuZXJhdGVkLFxuICAgICAgICAvLyBhbiBvdXQgb2YgcmFuZ2UgZXJyb3IgaXMgdGhyb3duIGJ5IHdyaXRlVUludDMyQkVcbiAgICAgICAgU0hBUkVEX0JVRkZFUi53cml0ZVVJbnQzMkJFKChNYXRoLnJhbmRvbSgpICogMiAqKiAzMikgPj4+IDAsIGkgKiA0KTtcbiAgICB9XG5cbiAgICAvLyBJZiBidWZmZXIgaXMgYWxsIDAsIHNldCB0aGUgbGFzdCBieXRlIHRvIDEgdG8gZ3VhcmFudGVlIGEgdmFsaWQgdzNjIGlkIGlzIGdlbmVyYXRlZFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykge1xuICAgICAgICBpZiAoU0hBUkVEX0JVRkZFUltpXSA+IDApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPT09IGJ5dGVzIC0gMSkge1xuICAgICAgICAgICAgU0hBUkVEX0JVRkZFUltieXRlcyAtIDFdID0gMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBTSEFSRURfQlVGRkVSLnRvU3RyaW5nKCdoZXgnLCAwLCBieXRlcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVNwYW5JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZW5lcmF0ZUlkKFNQQU5fSURfQllURVMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVUcmFjZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdlbmVyYXRlSWQoVFJBQ0VfSURfQllURVMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTcGFuSWQoc3BhbklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL15bYS1mXFxkXXsxNn0kLy50ZXN0KHNwYW5JZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRyYWNlSWQoc3BhbklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL15bYS1mXFxkXXszMn0kLy50ZXN0KHNwYW5JZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRyYWNlUGFyZW50KHRyYWNlUGFyZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL14wMC1bYS1mXFxkXXszMn0tW2EtZlxcZF17MTZ9LVthLWZcXGRdezJ9JC8udGVzdCh0cmFjZVBhcmVudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VHJhY2VJZEZyb21UcmFjZVBhcmVudCh0cmFjZVBhcmVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodmFsaWRhdGVUcmFjZVBhcmVudCh0cmFjZVBhcmVudCkpIHtcbiAgICAgICAgcmV0dXJuIHRyYWNlUGFyZW50LnNwbGl0KCctJylbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRyYWNlIHBhcmVudDogJHt0cmFjZVBhcmVudH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U3BhbklkRnJvbVRyYWNlUGFyZW50KHRyYWNlUGFyZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh2YWxpZGF0ZVRyYWNlUGFyZW50KHRyYWNlUGFyZW50KSkge1xuICAgICAgICByZXR1cm4gdHJhY2VQYXJlbnQuc3BsaXQoJy0nKVsyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHJhY2UgcGFyZW50OiAke3RyYWNlUGFyZW50fWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5BdHRyaWJ1dGVzKFxuICAgIGF0dHJpYnV0ZU1hcDogTWFwPHN0cmluZywgc3RyaW5nPlxuKTogQXR0cmlidXRlW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGF0dHJpYnV0ZU1hcCwgKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBsZXQgdmFsOiBWYWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ1wiJykgJiYgdmFsdWUuZW5kc1dpdGgoJ1wiJykpIHtcbiAgICAgICAgICAgIHZhbCA9IHtcbiAgICAgICAgICAgICAgICBzdHJpbmdWYWx1ZTogdmFsdWUuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ2ZhbHNlJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbCA9IHtcbiAgICAgICAgICAgICAgICBib29sVmFsdWU6IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsID0ge1xuICAgICAgICAgICAgICAgIGludFZhbHVlOiBwYXJzZUludCh2YWx1ZSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGlzRG91YmxlKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsID0ge1xuICAgICAgICAgICAgICAgIGRvdWJsZVZhbHVlOiBwYXJzZUZsb2F0KHZhbHVlKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWwgPSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBrZXksIHZhbHVlOiB2YWwgfSBhcyBBdHRyaWJ1dGU7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUtleVZhbHVlKGtleVZhbHVlUGFpcnM6IHN0cmluZ1tdKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBNYXAoXG4gICAgICAgIChrZXlWYWx1ZVBhaXJzIHx8IFtdKS5tYXAoKHBhaXI6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9ySWR4OiBudW1iZXIgPSBwYWlyLmluZGV4T2YoJz0nKTtcbiAgICAgICAgICAgIGlmIChzZXBhcmF0b3JJZHggPCAwKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgS2V5LXZhbHVlIHBhaXIgbXVzdCBiZSBpbiBcImtleT12YWx1ZVwiIGZvcm1hdDogJHtwYWlyfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHBhaXIuc3Vic3RyaW5nKDAsIHNlcGFyYXRvcklkeCksXG4gICAgICAgICAgICAgICAgcGFpci5zdWJzdHJpbmcoc2VwYXJhdG9ySWR4ICsgMSksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9KVxuICAgICk7XG59XG4iXX0= |
+4
-2
| { | ||
| "name": "otel-cli", | ||
| "version": "1.0.1", | ||
| "version": "1.0.2", | ||
| "description": "OTEL CLI is a command-line tool for sending OpenTelemetry traces.", | ||
@@ -24,2 +24,3 @@ "author": "Serkan Ozal <serkanozal86@gmail.com> (https://github.com/serkan-ozal)", | ||
| "start": "ts-node -O \"{\\\"module\\\":\\\"commonjs\\\"}\" ./src/index.ts", | ||
| "start-server": "ts-node -O \"{\\\"module\\\":\\\"commonjs\\\"}\" ./src/server/bootstrap.ts", | ||
| "test": "echo \"Error: no test specified\" && exit 1", | ||
@@ -58,4 +59,5 @@ "lint-check": "prettier --config .prettierrc.json --check ./src/*.ts ./src/**/*.ts", | ||
| "chalk": "^4.1.2", | ||
| "commander": "^9.4.1" | ||
| "commander": "^9.4.1", | ||
| "find-process": "^1.4.7" | ||
| } | ||
| } |
+226
-9
@@ -38,5 +38,7 @@ # OTEL (OpenTelemetry) CLI | ||
| ### Commands | ||
| - `otel-cli export [options]`: Create the span by given options and exports the created span to the OTEL collector OTLP endpoint. | ||
| - `otel-cli generate-id [options]`: Generate id of the specified type (`trace` or `span`) and outputs the generated id. | ||
| - `otel-cli help [command]`: Display help for the given command. | ||
| - `otel-cli export [options]`: Create the span by given options and exports the created span to the OTEL collector OTLP endpoint. | ||
| - `otel-cli generate-id [options]`: Generate id of the specified type (`trace` or `span`) and outputs the generated id. | ||
| - `otel-cli start-server [options]`: Starts OTEL CLI server to be able to export traces in background. | ||
| - `otel-cli shutdown-server [options]`: Gracefully shutdowns OTEL CLI server by exporting buffered traces before terminate. | ||
| - `otel-cli help [command]`: Display help for the given command. | ||
@@ -71,2 +73,3 @@ ### `export` command | ||
| | - `--attributes <key-value-pairs...>` <br/> - `-a <key-value-pairs...>` | | NO | | | Span attributes as space (` `) seperated key-value pairs (`key1=value1 key2=value2 key3=value3`) | `--attributes key1=value1 key2=\"my value\" key3=true key4=123 key5=67.89 key6=\"456\"` | | ||
| | - `--server-port` <br/> - `-sp <port>` | `OTEL_CLI_SERVER_PORT=<port>` | NO | | `7777` | OTEL CLI server port for communicating over to export traces asynchronously in background | - `--server-port 12345` <br/> - `-sp 12345` | | ||
@@ -133,2 +136,59 @@ #### How OTEL Exporter OTLP endpoint resolved? | ||
| #### How to export traces asynchronously in background? | ||
| By default, `export` command sends traces synchronously to the configured OTLP endpoint by blocking the caller in the script. | ||
| But OTEL CLI also supports sending traces asynchronously through OTEL CLI server by exporting traces to the OTEL CLI server first over the specified HTTP port. | ||
| Then OTEL CLI server buffers the received traces and sends them to the target OTLP endpoint asynchronously in background. | ||
| ##### Start OTEL CLI server | ||
| To be able to start OTEL CLI server, you can use `start-server` [command](#start-server-command). | ||
| By default, `start-server` command is blocking, so you should run it in the background yourself to not to block your program/script. | ||
| For example, in the Linux and MacOS environments, you can use `&` operation after the command to run it in the background: | ||
| ```bash | ||
| export OTEL_EXPORTER_OTLP_ENDPOINT=<YOUR-OTEL-VENDOR-OTLP-ENDPOINT> | ||
| export OTEL_EXPORTER_OTLP_HEADERS=<YOUR-OTEL-VENDOR-API-AUTH-HEADER-NAME>=<YOUR-OTEL-VENDOR-API-AUTH-TOKEN> | ||
| # OTEL CLI server port is "7777" by default | ||
| export OTEL_CLI_SERVER_PORT=12345 | ||
| # "start-server" command is blocking for the caller. | ||
| # So we put "&" at the end of command to run OTEL CLI server in background without blocking here. | ||
| otel-cli start-server & | ||
| ``` | ||
| or by specifying configurations through the options: | ||
| ```bash | ||
| # "start-server" command is blocking for the caller. | ||
| # So we put "&" at the end of command to run OTEL CLI server in background without blocking here. | ||
| otel-cli start-server \ | ||
| --endpoint <YOUR-OTEL-VENDOR-OTLP-ENDPOINT> \ | ||
| --headers <YOUR-OTEL-VENDOR-API-AUTH-HEADER-NAME>=<YOUR-OTEL-VENDOR-API-AUTH-TOKEN> \ | ||
| --server-port 12345 \ | ||
| & | ||
| ``` | ||
| ##### Shutdown OTEL CLI server | ||
| Since the OTEL CLI server buffers the received traces to be send them asynchronously, | ||
| it should be shutdown gracefully to flush the buffered traces by exporting them to the configured OTLP endpoint before terminated. | ||
| Otherwise, some of the traces might be lost. | ||
| To be able to shutdown OTEL CLI server gracefully, you can use `shutdown-server` [command](#shutdown-server-command) | ||
| by specifying the **same** port number you use while starting server. | ||
| ```bash | ||
| # OTEL CLI server port is "7777" by default | ||
| export OTEL_CLI_SERVER_PORT=12345 | ||
| otel-cli shutdown-server | ||
| ``` | ||
| or by specifying configurations through the options: | ||
| ```bash | ||
| otel-cli shutdown-server --server-port 12345 | ||
| ``` | ||
| > :warning: | ||
| Even you don't shutdown the server manually by yourself, | ||
| OTEL CLI server shutdown itself automatically when the parent process (program or script) exits. | ||
| But in any way, it is good practice to shutdown by yourself explicitly. | ||
| ### `generate-id` command | ||
@@ -141,5 +201,23 @@ | ||
| ### `start-server` command | ||
| | CLI Option | Environment Variable | Mandatory | Choices | Default Value | Description | Example | | ||
| |--------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|-----------|--------------------------------------------------------------------------------------------|---------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------| | ||
| | - `--verbose` <br/> - `-v` | `OTEL_CLI_VERBOSE=true` | NO | | `false` | Enable verbose mode | `--verbose` | | ||
| | - `--endpoint <url>` <br/> - `-e <url>` | `OTEL_EXPORTER_OTLP_ENDPOINT=<url>` | NO | | | OTEL Exporter OTLP endpoint | `--endpoint https://collector.otel.io` | | ||
| | - `--traces-endpoint <url>` <br/> - `-te <url>` | `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=<url>` | NO | | | OTEL Exporter OTLP traces endpoint | `--traces-endpoint https://collector.otel.io/v1/traces` | | ||
| | - `--protocol <url>` <br/> - `-p <url>` | `OTEL_EXPORTER_OTLP_PROTOCOL=<protocol>` | NO | - `http/json` <br/> | `http/json` | OTEL Exporter OTLP protocol | `--protocol http/json` | | ||
| | - `--headers <key1=value1> <key2=value2> ...` <br/> - `-h <key1=value1> <key2=value2> ...` | `OTEL_EXPORTER_OTLP_HEADERS=key1=value1>,<key2=value2>` | NO | | | OTEL Exporter OTLP headers <br/> - In CLI options, headers are specified as space (` `) seperated key-value pairs (`key1=value1 key2=value2 key3=value3`) <br/> - In environment variable, headers are specified as comma (`,`) seperated key-value pairs (`key1=value1,key2=value2,key3=value3`) <br/> | `--headers x-api-key=abcd-1234 x-project-id=efgh-5678` | | ||
| | - `--server-port` <br/> - `-sp <port>` | `OTEL_CLI_SERVER_PORT=<port>` | NO | | `7777` | OTEL CLI server port to start on | - `--server-port 12345` <br/> - `-sp 12345` | | ||
| ### `shutdown-server` command | ||
| | CLI Option | Environment Variable | Mandatory | Choices | Default Value | Description | Example | | ||
| |--------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|-----------|--------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------|-----------------------------------------------------------------------------------------| | ||
| | - `--verbose` <br/> - `-v` | `OTEL_CLI_VERBOSE=true` | NO | | `false` | Enable verbose mode | `--verbose` | | ||
| | - `--server-port` <br/> - `-sp <port>` | `OTEL_CLI_SERVER_PORT=<port>` | NO | | `7777` | OTEL CLI server port for communicating over to shutdown gracefully | - `--server-port 12345` <br/> - `-sp 12345` | | ||
| ## Examples | ||
| #### Export trace [UNIX] | ||
| #### Export trace [Linux] | ||
| ```bash | ||
@@ -217,3 +295,3 @@ export OTEL_EXPORTER_OTLP_ENDPOINT=<YOUR-OTEL-VENDOR-OTLP-ENDPOINT> | ||
| otel-cli export \ | ||
| --name build-auth-service --start-time-nanos ${start_time} --end-time-nanos ${end_time} \ | ||
| --name build-auth-service --start-time-millis ${start_time} --end-time-millis ${end_time} \ | ||
| --kind INTERNAL --status-code OK --attributes serviceName=auth-service buildTool=maven runtime=java | ||
@@ -239,3 +317,3 @@ | ||
| otel-cli export \ | ||
| --name build-payment-service --start-time-nanos ${start_time} --end-time-nanos ${end_time} \ | ||
| --name build-payment-service --start-time-millis ${start_time} --end-time-millis ${end_time} \ | ||
| --kind INTERNAL --status-code OK --attributes serviceName=payment-service buildTool=npm runtime=node | ||
@@ -247,3 +325,3 @@ | ||
| #### Export trace (Parent-Child) [UNIX] | ||
| #### Export trace (Parent-Child) [Linux] | ||
| ```bash | ||
@@ -347,3 +425,3 @@ export OTEL_EXPORTER_OTLP_ENDPOINT=<YOUR-OTEL-VENDOR-OTLP-ENDPOINT> | ||
| otel-cli export \ | ||
| --name build-auth-service --parent-span-id ${root_span_id} --start-time-nanos ${start_time1} --end-time-nanos ${end_time1} \ | ||
| --name build-auth-service --parent-span-id ${root_span_id} --start-time-millis ${start_time1} --end-time-millis ${end_time1} \ | ||
| --kind INTERNAL --status-code OK --attributes serviceName=auth-service buildTool=maven runtime=java | ||
@@ -385,2 +463,142 @@ | ||
| #### Export trace asynchronously in background [Linux] | ||
| ```bash | ||
| export OTEL_EXPORTER_OTLP_ENDPOINT=<YOUR-OTEL-VENDOR-OTLP-ENDPOINT> | ||
| export OTEL_EXPORTER_OTLP_HEADERS=<YOUR-OTEL-VENDOR-API-AUTH-HEADER-NAME>=<YOUR-OTEL-VENDOR-API-AUTH-TOKEN> | ||
| export OTEL_SERVICE_NAME=build | ||
| # Specify port number to start server port on (the default value is "7777") | ||
| # to be used by "otel-cli server-start" command. | ||
| # Additionally, this environment variable will also be picked up by "otel-cli export" command automatically | ||
| # while exporting traces to send asynchronously over OTEL CLI server. | ||
| export OTEL_CLI_SERVER_PORT=12345 | ||
| export OTEL_CLI_TRACE_ID=$(otel-cli generate-id -t trace) | ||
| # "start-server" command is blocking for the caller. | ||
| # So we put "&" at the end of command to run OTEL CLI server in background without blocking here. | ||
| otel-cli start-server & | ||
| function shutdown_server { | ||
| # Shutdown OTEL CLI server. | ||
| # | ||
| # Note: | ||
| # Even we don't shutdown manually, OTEL CLI server shutdown itself automatically | ||
| # when this bash process (its parent process) exits. | ||
| # But in any way, it is good practice to shutdown by ourself explicitly. | ||
| otel-cli shutdown-server | ||
| } | ||
| trap shutdown_server EXIT | ||
| # 1. Build auth service | ||
| ######################################## | ||
| # Get start time of auth service project build process in nanoseconds | ||
| start_time=$(date +%s%9N) | ||
| # Build auth service project | ||
| pushd auth-service | ||
| mvn clean package | ||
| popd | ||
| # Get end time of auth service project build process in nanoseconds | ||
| end_time=$(date +%s%9N) | ||
| # Export span of the auth service build process | ||
| otel-cli export \ | ||
| --name build-auth-service --start-time-nanos ${start_time} --end-time-nanos ${end_time} \ | ||
| --kind INTERNAL --status-code OK --attributes serviceName=auth-service buildTool=maven runtime=java | ||
| ######################################## | ||
| # 2. Build payment service | ||
| ######################################## | ||
| # Get start time of payment service project build process in nanoseconds | ||
| start_time=$(date +%s%9N) | ||
| # Build payment service project | ||
| pushd payment-service | ||
| npm run build | ||
| popd | ||
| # Get end time of payment service project build process in nanoseconds | ||
| end_time=$(date +%s%9N) | ||
| # Export span of the payment service project build process | ||
| otel-cli export \ | ||
| --name build-payment-service --start-time-nanos ${start_time} --end-time-nanos ${end_time} \ | ||
| --kind INTERNAL --status-code OK --attributes serviceName=payment-service buildTool=npm runtime=node | ||
| ######################################## | ||
| ``` | ||
| #### Export trace asynchronously in background [MacOS] | ||
| ```bash | ||
| export OTEL_EXPORTER_OTLP_ENDPOINT=<YOUR-OTEL-VENDOR-OTLP-ENDPOINT> | ||
| export OTEL_EXPORTER_OTLP_HEADERS=<YOUR-OTEL-VENDOR-API-AUTH-HEADER-NAME>=<YOUR-OTEL-VENDOR-API-AUTH-TOKEN> | ||
| export OTEL_SERVICE_NAME=build | ||
| # Specify port number to start server port on (the default value is "7777") | ||
| # to be used by "otel-cli server-start" command. | ||
| # Additionally, this environment variable will also be picked up by "otel-cli export" command automatically | ||
| # while exporting traces to send asynchronously over OTEL CLI server. | ||
| export OTEL_CLI_SERVER_PORT=12345 | ||
| export OTEL_CLI_TRACE_ID=$(otel-cli generate-id -t trace) | ||
| # "start-server" command is blocking for the caller. | ||
| # So we put "&" at the end of command to run OTEL CLI server in background without blocking here. | ||
| otel-cli start-server & | ||
| function shutdown_server { | ||
| # Shutdown OTEL CLI server. | ||
| # | ||
| # Note: | ||
| # Even we don't shutdown manually, OTEL CLI server shutdown itself automatically | ||
| # when this bash process (its parent process) exits. | ||
| # But in any way, it is good practice to shutdown by ourself explicitly. | ||
| otel-cli shutdown-server | ||
| } | ||
| trap shutdown_server EXIT | ||
| # 1. Build auth service | ||
| ######################################## | ||
| # Get start time of auth service project build process in milliseconds ("date" command only support second resolution in MacOS) | ||
| start_time=$(node -e 'console.log(Date.now())') | ||
| # Build auth service project | ||
| pushd auth-service | ||
| mvn clean package | ||
| popd | ||
| # Get end time of auth service project build process in milliseconds ("date" command only support second resolution in MacOS) | ||
| end_time=$(node -e 'console.log(Date.now())') | ||
| # Export span of the auth service build process | ||
| otel-cli export \ | ||
| --name build-auth-service --start-time-millis ${start_time} --end-time-millis ${end_time} \ | ||
| --kind INTERNAL --status-code OK --attributes serviceName=auth-service buildTool=maven runtime=java | ||
| ######################################## | ||
| # 1. Build payment service | ||
| ######################################## | ||
| # Get start time of payment service project build process in milliseconds ("date" command only support second resolution in MacOS) | ||
| start_time=$(node -e 'console.log(Date.now())') | ||
| # Build payment service project | ||
| pushd payment-service | ||
| npm run build | ||
| popd | ||
| # Get end time of payment service project build process in milliseconds ("date" command only support second resolution in MacOS) | ||
| end_time=$(node -e 'console.log(Date.now())') | ||
| # Export span of the payment service project build process | ||
| otel-cli export \ | ||
| --name build-payment-service --start-time-millis ${start_time} --end-time-millis ${end_time} \ | ||
| --kind INTERNAL --status-code OK --attributes serviceName=payment-service buildTool=npm runtime=node | ||
| ######################################## | ||
| ``` | ||
| ## Roadmap | ||
@@ -391,3 +609,2 @@ - Automated bash command tracing by wrapping command to be executed | ||
| - Batch transmission support while sending traces to OTLP endpoint to reduce network RTT (Round Trip Time) | ||
| - Async (non-blocking) transmission support while sending traces to OTLP endpoint to reduce sync (blocking) transmission overhead | ||
@@ -394,0 +611,0 @@ ## Issues and Feedback |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 3 instances in 1 package
282225
61.13%74
42.31%1977
74.65%626
53.06%4
33.33%38
90%2
Infinity%+ Added
+ Added
+ Added
+ Added