UNPKG

@forestadmin/forest-cloud

Version:

Utility to bootstrap and publish forest admin cloud projects customization

147 lines 13.2 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const joi_1 = __importDefault(require("joi")); const action_runner_1 = __importDefault(require("../dialogs/action-runner")); const check_latest_version_1 = __importDefault(require("../dialogs/check-latest-version")); const errors_1 = require("../errors"); const environment_variables_1 = require("../services/environment-variables"); const http_server_1 = __importDefault(require("../services/http-server")); const shared_1 = require("../shared"); const levelToLog = { Info: 'info', Warn: 'warn', Debug: 'debug', Error: 'error', }; const displayLog = (logger, log) => { try { logger[levelToLog[log.level]](log.message, log.timestamp); } catch (e) { logger.log(log.message, log.timestamp); } }; function validateTailOption(tail) { if (tail === undefined) return; if (joi_1.default.number().integer().validate(tail).error) { throw new errors_1.BusinessError('The --tail (-n) option must be an integer'); } else if (joi_1.default.number().positive().validate(tail).error) { throw new errors_1.BusinessError('The --tail (-n) option must be a positive integer'); } else if (joi_1.default.number().max(1000).validate(tail).error) { throw new errors_1.BusinessError('The --tail (-n) option must be equal or less than 1000'); } } function fromAndToValidator() { const dateMatchValidator = joi_1.default.string().regex(/^now(-)\d+(s|m|H|h|d|w|M|y)(\/d)?$/); return joi_1.default.alternatives([joi_1.default.date(), dateMatchValidator]).optional(); } function validateFromOption(from) { if (!from) return; if (fromAndToValidator().validate(from).error) { throw new errors_1.BusinessError('The --from (-f) option must be a valid timestamp.' + ' You must enter a date (e.g: 2021-01-01T00:00:00.000Z) or' + ' match a relative date (e.g. now-1d)'); } } function validateToOption(to) { if (joi_1.default.alternatives(fromAndToValidator(), joi_1.default.string().valid('now')).validate(to).error) { throw new errors_1.BusinessError('The --to (-t) option must be a valid timestamp.' + ' You must enter a date (e.g: 2021-01-01T00:00:00.000Z) or' + 'match a relative date (e.g. now-1d)'); } } function isRunningWithOptions(options) { return !!(options.tail || options.from || options.to); } exports.default = (program, context) => { const { logger, getCurrentVersion, login, getEnvironmentVariables, buildHttpServer } = context; program .command('logs') .option('-e, --env-secret <string>', 'Environment secret, you can find it in your environment settings.' + ' (you can also pass it with environment variable FOREST_ENV_SECRET)') .option('-n, --tail <integer>', 'Number of lines to show from the end of the logs in the last month.' + ' Default is 30, Max is 1000. Use from option to get older logs.') .option('-f, --from <timestamp>', 'Minimum timestamp for requested logs. Default is the last month (now-1M)') .option('-t, --to <timestamp>', 'Maximum timestamp for requested logs. Default is now') .description('Display logs of the customizations published on your agent') .action((0, action_runner_1.default)(logger.spinner, async (options) => { validateTailOption(options.tail); validateFromOption(options.from); validateToOption(options.to); const { spinner } = logger; const tail = Number(options.tail ?? 30); const from = options.from ?? 'now-1M'; const to = options.to ?? 'now'; await (0, check_latest_version_1.default)(spinner, getCurrentVersion(), http_server_1.default.getLatestVersion); const vars = await (0, shared_1.loginIfMissingAuthAndReturnEnvironmentVariables)(login, logger, getEnvironmentVariables); vars.FOREST_ENV_SECRET = options.envSecret || vars.FOREST_ENV_SECRET; (0, environment_variables_1.validateMissingForestEnvSecret)(vars.FOREST_ENV_SECRET, 'logs'); (0, environment_variables_1.validateEnvironmentVariables)(vars); let logs; try { spinner.start('Fetching logs'); logs = await buildHttpServer(vars).getLogs({ from, to, limit: tail, // we want to get the logs from the oldest to the newest when we have a from option orderByRecentFirst: !options.from, }); } catch (e) { if (e instanceof errors_1.ValidationError) { logger.spinner.warn(`Given Options: from=${from}, to=${to}, tail=${tail}`); } throw e; } let message; if (options.from && options.to) { message = `between "${from}" and "${to}"`; } else if (options.from) { message = `since "${from}"`; } else if (options.to) { message = `until "${to}"`; } else { message = 'in the last month'; } const helperMessage = 'To see more logs or change the time range, use --help for all options'; spinner.stop(); if (logs?.length > 0) { spinner.info('...you have probably more logs...'); logs.forEach(log => displayLog(logger, log)); if (options.from || options.to) spinner.info('...you have probably more logs...'); const pluralize = tail > 1 ? 's' : ''; const baseMessage = `Requested ${tail} log${pluralize} ${message}`; const fromToMessage = `You have received logs from ${logs[0].timestamp} to ${logs[logs.length - 1].timestamp}`; if (logs.length === tail) { spinner.succeed(`${baseMessage}\n${fromToMessage}\n`); logger.log(`${helperMessage}`); } else { spinner.succeed(`${baseMessage} but only ${logs.length} were found\n${fromToMessage}`); } } else { spinner.warn(`No logs found ${message}`); if (!isRunningWithOptions(options)) { const defaultMessage = 'By default, the last 30 logs from the past month are displayed.'; logger.log(`${defaultMessage} ${helperMessage}`); } else { logger.log(helperMessage); } } })); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9sb2dzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsOENBQXNCO0FBRXRCLDZFQUFvRDtBQUNwRCwyRkFBaUU7QUFDakUsc0NBQTJEO0FBQzNELDZFQUcyQztBQUMzQywwRUFBaUQ7QUFDakQsc0NBQTRFO0FBRzVFLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLE1BQU07SUFDWixLQUFLLEVBQUUsT0FBTztJQUNkLEtBQUssRUFBRSxPQUFPO0NBQ2YsQ0FBQztBQUVGLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBYyxFQUFFLEdBQVEsRUFBRSxFQUFFO0lBQzlDLElBQUk7UUFDRixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzNEO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3hDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsU0FBUyxrQkFBa0IsQ0FBQyxJQUFjO0lBQ3hDLElBQUksSUFBSSxLQUFLLFNBQVM7UUFBRSxPQUFPO0lBRS9CLElBQUksYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7UUFDL0MsTUFBTSxJQUFJLHNCQUFhLENBQUMsMkNBQTJDLENBQUMsQ0FBQztLQUN0RTtTQUFNLElBQUksYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7UUFDdkQsTUFBTSxJQUFJLHNCQUFh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