@forestadmin/forest-cloud
Version:
Utility to bootstrap and publish forest admin cloud projects customization
147 lines • 13.2 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9sb2dzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsOENBQXNCO0FBRXRCLDZFQUFvRDtBQUNwRCwyRkFBaUU7QUFDakUsc0NBQTJEO0FBQzNELDZFQUcyQztBQUMzQywwRUFBaUQ7QUFDakQsc0NBQTRFO0FBRzVFLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLE1BQU07SUFDWixLQUFLLEVBQUUsT0FBTztJQUNkLEtBQUssRUFBRSxPQUFPO0NBQ2YsQ0FBQztBQUVGLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBYyxFQUFFLEdBQVEsRUFBRSxFQUFFO0lBQzlDLElBQUk7UUFDRixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzNEO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3hDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsU0FBUyxrQkFBa0IsQ0FBQyxJQUFjO0lBQ3hDLElBQUksSUFBSSxLQUFLLFNBQVM7UUFBRSxPQUFPO0lBRS9CLElBQUksYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7UUFDL0MsTUFBTSxJQUFJLHNCQUFhLENBQUMsMkNBQTJDLENBQUMsQ0FBQztLQUN0RTtTQUFNLElBQUksYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7UUFDdkQsTUFBTSxJQUFJLHNCQUFhLENBQUMsbURBQW1ELENBQUMsQ0FBQztLQUM5RTtTQUFNLElBQUksYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO1FBQ3RELE1BQU0sSUFBSSxzQkFBYSxDQUFDLHdEQUF3RCxDQUFDLENBQUM7S0FDbkY7QUFDSCxDQUFDO0FBRUQsU0FBUyxrQkFBa0I7SUFDekIsTUFBTSxrQkFBa0IsR0FBRyxhQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFFcEYsT0FBTyxhQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsYUFBRyxDQUFDLElBQUksRUFBRSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN2RSxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxJQUFhO0lBQ3ZDLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTztJQUVsQixJQUFJLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTtRQUM3QyxNQUFNLElBQUksc0JBQWEsQ0FDckIsbURBQW1EO1lBQ2pELDJEQUEyRDtZQUMzRCxzQ0FBc0MsQ0FDekMsQ0FBQztLQUNIO0FBQ0gsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsRUFBVztJQUNuQyxJQUFJLGFBQUcsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRTtRQUN4RixNQUFNLElBQUksc0JBQWEsQ0FDckIsaURBQWlEO1lBQy9DLDJEQUEyRDtZQUMzRCxxQ0FBcUMsQ0FDeEMsQ0FBQztLQUNIO0FBQ0gsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsT0FBbUQ7SUFDL0UsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRCxrQkFBZSxDQUFDLE9BQWdCLEVBQUUsT0FBcUIsRUFBRSxFQUFFO0lBQ3pELE1BQU0sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLGVBQWUsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUMvRixPQUFPO1NBQ0osT0FBTyxDQUFDLE1BQU0sQ0FBQztTQUNmLE1BQU0sQ0FDTCwyQkFBMkIsRUFDM0IsbUVBQW1FO1FBQ2pFLHFFQUFxRSxDQUN4RTtTQUNBLE1BQU0sQ0FDTCxzQkFBc0IsRUFDdEIscUVBQXFFO1FBQ25FLGlFQUFpRSxDQUNwRTtTQUNBLE1BQU0sQ0FDTCx3QkFBd0IsRUFDeEIsMEVBQTBFLENBQzNFO1NBQ0EsTUFBTSxDQUFDLHNCQUFzQixFQUFFLHNEQUFzRCxDQUFDO1NBQ3RGLFdBQVcsQ0FBQyw0REFBNEQsQ0FBQztTQUN6RSxNQUFNLENBQ0wsSUFBQSx1QkFBWSxFQUNWLE1BQU0sQ0FBQyxPQUFPLEVBQ2QsS0FBSyxFQUFFLE9BQXNFLEVBQUUsRUFBRTtRQUMvRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDO1FBQ3RDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDO1FBRS9CLE1BQU0sSUFBQSw4QkFBa0IsRUFBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxxQkFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDcEYsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLHdEQUErQyxFQUNoRSxLQUFLLEVBQ0wsTUFBTSxFQUNOLHVCQUF1QixDQUN4QixDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ3JFLElBQUEsc0RBQThCLEVBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELElBQUEsb0RBQTRCLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFFbkMsSUFBSSxJQUFXLENBQUM7UUFFaEIsSUFBSTtZQUNGLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDL0IsSUFBSSxHQUFHLE1BQU0sZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDekMsSUFBSTtnQkFDSixFQUFFO2dCQUNGLEtBQUssRUFBRSxJQUFJO2dCQUNYLG1GQUFtRjtnQkFDbkYsa0JBQWtCLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSTthQUNsQyxDQUFDLENBQUM7U0FDSjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLFlBQVksd0JBQWUsRUFBRTtnQkFDaEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLElBQUksUUFBUSxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUM1RTtZQUVELE1BQU0sQ0FBQyxDQUFDO1NBQ1Q7UUFFRCxJQUFJLE9BQWUsQ0FBQztRQUVwQixJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUM5QixPQUFPLEdBQUcsWUFBWSxJQUFJLFVBQVUsRUFBRSxHQUFHLENBQUM7U0FDM0M7YUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDdkIsT0FBTyxHQUFHLFVBQVUsSUFBSSxHQUFHLENBQUM7U0FDN0I7YUFBTSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDckIsT0FBTyxHQUFHLFVBQVUsRUFBRSxHQUFHLENBQUM7U0FDM0I7YUFBTTtZQUNMLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQztTQUMvQjtRQUVELE1BQU0sYUFBYSxHQUNqQix1RUFBdUUsQ0FBQztRQUUxRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFZixJQUFJLElBQUksRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzdDLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsRUFBRTtnQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7WUFFbEYsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxXQUFXLEdBQUcsYUFBYSxJQUFJLE9BQU8sU0FBUyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ25FLE1BQU0sYUFBYSxHQUFHLCtCQUErQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxPQUNwRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUN4QixFQUFFLENBQUM7WUFFSCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFO2dCQUN4QixPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsV0FBVyxLQUFLLGFBQWEsSUFBSSxDQUFDLENBQUM7Z0JBQ3RELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxDQUFDO2FBQ2hDO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxPQUFPLENBQ2IsR0FBRyxXQUFXLGFBQWEsSUFBSSxDQUFDLE1BQU0sZ0JBQWdCLGFBQWEsRUFBRSxDQUN0RSxDQUFDO2FBQ0g7U0FDRjthQUFNO1lBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUV6QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ2xDLE1BQU0sY0FBYyxHQUNsQixpRUFBaUUsQ0FBQztnQkFDcEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGNBQWMsSUFBSSxhQUFhLEVBQUUsQ0FBQyxDQUFDO2FBQ2xEO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDM0I7U0FDRjtJQUNILENBQUMsQ0FDRixDQUNGLENBQUM7QUFDTixDQUFDLENBQUMifQ==