@polymathnetwork/launchpad-rabbitmq
Advanced tools
Comparing version 1.1.5 to 1.2.0
@@ -1,2 +0,2 @@ | ||
declare const _default: import("winston").Logger; | ||
export default _default; | ||
declare const logger: (IS_DEV?: boolean) => import("winston").Logger; | ||
export default logger; |
"use strict"; | ||
var __rest = (this && this.__rest) || function (s, e) { | ||
var t = {}; | ||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) | ||
t[p] = s[p]; | ||
if (s != null && typeof Object.getOwnPropertySymbols === "function") | ||
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { | ||
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) | ||
t[p[i]] = s[p[i]]; | ||
} | ||
return t; | ||
}; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
@@ -9,2 +20,15 @@ return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
const winston_1 = require("winston"); | ||
// This flattens the object from morgan | ||
const formatHttpRequest = (0, winston_1.format)((info) => { | ||
const { level, message } = info, restInfo = __rest(info, ["level", "message"]); | ||
if (level !== 'http') | ||
return false; | ||
const span = dd_trace_1.default.scope().active(); | ||
const httpRequest = JSON.parse(message); | ||
const record = Object.assign(Object.assign({ level }, httpRequest), restInfo); | ||
if (span) { | ||
dd_trace_1.default.inject(span.context(), formats_1.default.LOG, record); | ||
} | ||
return record; | ||
}); | ||
const formatInfo = (0, winston_1.format)((info) => { | ||
@@ -24,2 +48,6 @@ const span = dd_trace_1.default.scope().active(); | ||
}), | ||
new winston_1.transports.Console({ | ||
level: 'http', | ||
format: winston_1.format.combine(formatHttpRequest(), winston_1.format.json()), | ||
}), | ||
], | ||
@@ -29,3 +57,26 @@ exitOnError: false, | ||
} | ||
exports.default = createProductionLogger(); | ||
function createDevelopmentLogger() { | ||
const colors = { | ||
error: 'red', | ||
warn: 'yellow', | ||
info: 'green', | ||
http: 'magenta', | ||
debug: 'white', | ||
}; | ||
(0, winston_1.addColors)(colors); | ||
return (0, winston_1.createLogger)({ | ||
level: 'debug', | ||
format: winston_1.format.combine(winston_1.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss:ms' }), winston_1.format.colorize(), winston_1.format.printf((info) => `${info.timestamp} ${info.level}: ${info.message}`)), | ||
transports: [new winston_1.transports.Console()], | ||
exitOnError: false, | ||
}); | ||
} | ||
let loggerInstance = null; | ||
const logger = (IS_DEV = false) => { | ||
if (!loggerInstance) { | ||
loggerInstance = IS_DEV ? createDevelopmentLogger() : createProductionLogger(); | ||
} | ||
return loggerInstance; | ||
}; | ||
exports.default = logger; | ||
//# sourceMappingURL=logger.js.map |
@@ -21,2 +21,3 @@ "use strict"; | ||
const queue_1 = __importDefault(require("../queue")); | ||
const log = (0, logger_1.default)(); | ||
const baseConnection = (connectionType) => { | ||
@@ -36,3 +37,3 @@ let connection = null; | ||
connection = yield amqplib_1.default.connect(config.url); | ||
logger_1.default.info(`✅ Intialized Rabbit MQ ${connectionType} connection successfully!!`); | ||
log.info(`✅ Intialized Rabbit MQ ${connectionType} connection successfully!!`); | ||
clearTimeout(reconnectTimer); | ||
@@ -44,7 +45,7 @@ connection.on('close', function () { | ||
connection.on('error', (err) => __awaiter(void 0, void 0, void 0, function* () { | ||
logger_1.default.error('Error occured in RabbitMQ connection:', err); | ||
log.error('Error occured in RabbitMQ connection:', err); | ||
yield cleanUp(); | ||
})); | ||
channel = yield connection.createConfirmChannel(); | ||
channel.on('error', (err) => __awaiter(void 0, void 0, void 0, function* () { return logger_1.default.error('Error occured in RabbitMQ channel:', err); })); | ||
channel.on('error', (err) => __awaiter(void 0, void 0, void 0, function* () { return log.error('Error occured in RabbitMQ channel:', err); })); | ||
yield channel.assertExchange(constants_1.PRIMARY_EXCHANGE, 'direct', { | ||
@@ -62,3 +63,3 @@ durable: true, | ||
catch (error) { | ||
logger_1.default.error(`❌ Failed to connect to Rabbit MQ ${connectionType}!!, trying to reconnect in ${config.reconnectDelay}ms...`, error); | ||
log.error(`❌ Failed to connect to Rabbit MQ ${connectionType}!!, trying to reconnect in ${config.reconnectDelay}ms...`, error); | ||
reconnect(); | ||
@@ -71,3 +72,3 @@ return false; | ||
clearTimeout(reconnectTimer); | ||
logger_1.default.info(`RabbitMQ Connection closed unexpectedly, trying to reconnect in ${config === null || config === void 0 ? void 0 : config.reconnectDelay}ms...`); | ||
log.info(`RabbitMQ Connection closed unexpectedly, trying to reconnect in ${config === null || config === void 0 ? void 0 : config.reconnectDelay}ms...`); | ||
reconnectTimer = setTimeout(() => __awaiter(void 0, void 0, void 0, function* () { | ||
@@ -84,8 +85,8 @@ const isInitialized = yield initialize(); | ||
isExpressAppTerminated = isClosureIntentional; | ||
logger_1.default.info(`Trying to close RabbitMQ ${connectionType} connection`); | ||
log.info(`Trying to close RabbitMQ ${connectionType} connection`); | ||
yield connection.close(); | ||
logger_1.default.info(`RabbitMQ ${connectionType} connection closed successfully!!`); | ||
log.info(`RabbitMQ ${connectionType} connection closed successfully!!`); | ||
} | ||
catch (error) { | ||
logger_1.default.error('Connection was already closed...', error.stackAtStateChange); | ||
log.error('Connection was already closed...', error.stackAtStateChange); | ||
} | ||
@@ -92,0 +93,0 @@ }); |
@@ -19,2 +19,3 @@ "use strict"; | ||
const queue_1 = __importDefault(require("../queue")); | ||
const log = (0, logger_1.default)(); | ||
const consumer = (() => { | ||
@@ -70,5 +71,5 @@ const connection = (0, base_1.baseConnection)('consumer'); | ||
} | ||
logger_1.default.info(`Starting consumer for queue ${queueName}.....`); | ||
log.info(`Starting consumer for queue ${queueName}.....`); | ||
if (!channel) { | ||
logger_1.default.error(`Channel is not available, skipping consumer start for queue: ${queueName}`); | ||
log.error(`Channel is not available, skipping consumer start for queue: ${queueName}`); | ||
return; | ||
@@ -83,7 +84,7 @@ } | ||
if (isSuccessfull) { | ||
logger_1.default.info('Message processed successfully and sending ack back to the queue..'); | ||
log.info('Message processed successfully and sending ack back to the queue..'); | ||
channel.ack(msg); | ||
} | ||
else { | ||
logger_1.default.info('Error occured while processing message and sending negative ack back to the queue..'); | ||
log.info('Error occured while processing message and sending negative ack back to the queue..'); | ||
// Move the msg to dead letter queue, if it has been failing for a while. | ||
@@ -94,3 +95,3 @@ yield nackMessage(channel, msg, queueName, queueConfig.maxRetries); | ||
catch (err) { | ||
logger_1.default.error('Error occured while consuming message:', err); | ||
log.error('Error occured while consuming message:', err); | ||
yield nackMessage(channel, msg, queueName, queueConfig.maxRetries); | ||
@@ -102,3 +103,3 @@ } | ||
catch (error) { | ||
logger_1.default.error(`Error occured while starting consumer for queue: ${queueName}`, error); | ||
log.error(`Error occured while starting consumer for queue: ${queueName}`, error); | ||
} | ||
@@ -114,3 +115,3 @@ }); | ||
if (retryCount > maxRetries) { | ||
logger_1.default.info('Max number of retries reached, moving message to dead letter queue..'); | ||
log.info('Max number of retries reached, moving message to dead letter queue..'); | ||
yield channel.sendToQueue(`${queueName}_dead_letter_queue`, msg.content); | ||
@@ -121,3 +122,3 @@ channel.ack(msg); | ||
if (xDeathHeader) | ||
logger_1.default.info(`Number of retries already happened ${retryCount} and the threshold is at: ${maxRetries}`); | ||
log.info(`Number of retries already happened ${retryCount} and the threshold is at: ${maxRetries}`); | ||
channel.nack(msg, undefined, false); | ||
@@ -124,0 +125,0 @@ } |
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const logger_1 = __importDefault(require("monitoring/logger")); | ||
const rabbitMQ = (() => { | ||
let queueConfig = null; | ||
const initialize = (config) => (queueConfig = config); | ||
const initialize = (config) => { | ||
queueConfig = config; | ||
// Initialize logger | ||
(0, logger_1.default)(config.isDev); | ||
}; | ||
const getConfig = () => queueConfig; | ||
@@ -7,0 +15,0 @@ return { |
@@ -18,2 +18,3 @@ "use strict"; | ||
const constants_1 = require("../config/constants"); | ||
const log = (0, logger_1.default)(); | ||
const publisher = (() => { | ||
@@ -38,7 +39,7 @@ const connection = (0, base_1.baseConnection)('publisher'); | ||
if (err !== null) { | ||
logger_1.default.error('Message nacked! could not push the message to queue due to error:', err); | ||
log.error('Message nacked! could not push the message to queue due to error:', err); | ||
reject({ ack: false }); // NOSONAR | ||
} | ||
else { | ||
logger_1.default.info(`Message acked, successfully pushed the message to queue: ${queueName}`); | ||
log.info(`Message acked, successfully pushed the message to queue: ${queueName}`); | ||
resolve({ ack: true }); | ||
@@ -45,0 +46,0 @@ } |
@@ -6,3 +6,3 @@ /// <reference types="node" /> | ||
export type RabbitMQ = { | ||
initialize: (config: RabbitMQConfig) => RabbitMQConfig; | ||
initialize: (config: RabbitMQConfig) => void; | ||
getConfig: () => RabbitMQConfig | null; | ||
@@ -15,4 +15,4 @@ }; | ||
reconnectDelay: number; | ||
isDev?: boolean; | ||
}; | ||
export type GetConfigs = () => RabbitMQConfig | null; | ||
export type QueuePublisher = { | ||
@@ -19,0 +19,0 @@ initialize: () => Promise<boolean>; |
{ | ||
"name": "@polymathnetwork/launchpad-rabbitmq", | ||
"version": "1.1.5", | ||
"version": "1.2.0", | ||
"description": "Helper package to interact with rabbitmq", | ||
@@ -5,0 +5,0 @@ "files": [ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
33869
461