Skip to content

Commit

Permalink
feat: handle truncated Roarr messages
Browse files Browse the repository at this point in the history
  • Loading branch information
gajus committed Oct 24, 2018
1 parent 62d56ce commit 3dedff2
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 44 deletions.
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@
"roarr": "./dist/bin/index.js"
},
"dependencies": {
"node-jq": "^1.3.1",
"chalk": "^2.4.1",
"node-jq": "^1.3.1",
"prettyjson": "^1.2.1",
"roarr": "^2.11.6",
"split2": "^3.0.0",
"through2": "^2.0.3",
"ulid": "^2.3.0",
Expand Down
106 changes: 63 additions & 43 deletions src/bin/commands/pretty-print.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
import split from 'split2';
import chalk from 'chalk';
import prettyjson from 'prettyjson';
import type {
MessageType
} from 'roarr';
import {
isRoarrLine
} from './utilities';
Expand Down Expand Up @@ -41,62 +44,79 @@ const getLogLevelName = (logLevel: number): string => {
return logLevels[logLevel] || 'INFO';
};

const createLogFormatter = (configuration: LogFormatterConfigurationType) => {
const stream = split((line) => {
if (!isRoarrLine(line)) {
return configuration.excludeOrphans ? '' : line + '\n';
}
const formatMessage = (configuration: LogFormatterConfigurationType, message: MessageType): string => {
let formattedMessage = '';

const message = JSON.parse(line);
formattedMessage = '[' + new Date(message.time).toISOString() + ']';

let formattedMessage = '';
if (message.context.logLevel && typeof message.context.logLevel === 'number') {
const logLevelName = getLogLevelName(message.context.logLevel);

formattedMessage = '[' + new Date(message.time).toISOString() + ']';
const logLevelColorName = logLevelColorMap[logLevelName];

if (message.context.logLevel && typeof message.context.logLevel === 'number') {
const logLevelName = getLogLevelName(message.context.logLevel);
if (!logLevelColorName) {
throw new Error('Unexpected state.');
}

const logLevelColorName = logLevelColorMap[logLevelName];
formattedMessage += ' ' + logLevelColorName(logLevelName + ' (' + message.context.logLevel + ')');
}

if (message.context.package) {
formattedMessage += ' (@' + message.context.package + ')';
}

if (message.context.namespace) {
formattedMessage += ' (#' + message.context.namespace + ')';
}

formattedMessage += ': ' + message.message + '\n';

if (configuration.includeContext && message.context) {
/* eslint-disable no-unused-vars */
const {
application: tmp0,
hostname: tmp1,
instanceId: tmp2,
logLevel: tmp3,
namespace: tmp4,
package: tmp5,
package: tmp6,
...rest
} = message.context;

/* eslint-enable */

if (Object.keys(rest).length) {
// eslint-disable-next-line no-console
formattedMessage += prettyjson.render(rest) + '\n\n';
}
}

if (!logLevelColorName) {
throw new Error('Unexpected state.');
}
return formattedMessage;
};

formattedMessage += ' ' + logLevelColorName(logLevelName + ' (' + message.context.logLevel + ')');
}
const formatInvalidInputMessage = (error: Error, input: string): string => {
return chalk.red('Cannot parse presumed Roarr log message as JSON [' + error.name + ': ' + error.message + ']') +
'\n' + chalk.gray('---INVALID INPUT START---') +
'\n' + input +
'\n' + chalk.gray('---INVALID INPUT END---');
};

if (message.context.package) {
formattedMessage += ' (@' + message.context.package + ')';
const createLogFormatter = (configuration: LogFormatterConfigurationType) => {
const stream = split((line) => {
if (!isRoarrLine(line)) {
return configuration.excludeOrphans ? '' : line + '\n';
}

if (message.context.namespace) {
formattedMessage += ' (#' + message.context.namespace + ')';
}
let parsedMessage;

formattedMessage += ': ' + message.message + '\n';

if (configuration.includeContext && message.context) {
/* eslint-disable no-unused-vars */
const {
application: tmp0,
hostname: tmp1,
instanceId: tmp2,
logLevel: tmp3,
namespace: tmp4,
package: tmp5,
package: tmp6,
...rest
} = message.context;

/* eslint-enable */

if (Object.keys(rest).length) {
// eslint-disable-next-line no-console
formattedMessage += prettyjson.render(rest) + '\n\n';
}
try {
parsedMessage = JSON.parse(line);
} catch (error) {
return formatInvalidInputMessage(error, line);
}

return formattedMessage;
return formatMessage(parsedMessage);
});

return stream;
Expand Down

0 comments on commit 3dedff2

Please sign in to comment.