@forestadmin/forest-cloud
Version:
Utility to bootstrap and publish forest admin cloud projects customization
147 lines • 13.5 kB
JavaScript
;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9sb2dzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0EsOENBQXNCO0FBRXRCLDZFQUFvRDtBQUNwRCwyRkFBaUU7QUFDakUsc0NBQTJEO0FBQzNELDZFQUcyQztBQUMzQywwRUFBaUQ7QUFDakQsc0NBQTRFO0FBRTVFLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLE1BQU07SUFDWixLQUFLLEVBQUUsT0FBTztJQUNkLEtBQUssRUFBRSxPQUFPO0NBQ2YsQ0FBQztBQUVGLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBYyxFQUFFLEdBQVEsRUFBRSxFQUFFO0lBQzlDLElBQUksQ0FBQztRQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixTQUFTLGtCQUFrQixDQUFDLElBQWM7SUFDeEMsSUFBSSxJQUFJLEtBQUssU0FBUztRQUFFLE9BQU87SUFFL0IsSUFBSSxhQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hELE1BQU0sSUFBSSxzQkFBYSxDQUFDLDJDQUEyQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztTQUFNLElBQUksYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxL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