diff --git a/src/executionModes/baseExecutionMode.coffee b/src/executionModes/baseExecutionMode.coffee index 9554dd2..c9cba69 100644 --- a/src/executionModes/baseExecutionMode.coffee +++ b/src/executionModes/baseExecutionMode.coffee @@ -1,5 +1,6 @@ _ = require "lodash" convert = require "convert-units" +Promise = require "bluebird" module.exports = class BaseExecutionMode @@ -21,3 +22,7 @@ module.exports = _nextTimeout: (reader, message) -> if _.isEmpty message then convert(reader.waitingTime).from("s").to("ms") else 0 + handleError: (err, reader, keepAliveMessage, message) -> + reader.emit "job_error", { method: "executionMode.execute", err, message } + Promise.resolve() + .tap -> keepAliveMessage.destroy() diff --git a/src/executionModes/onceExecutionMode.coffee b/src/executionModes/onceExecutionMode.coffee index a37c36a..e725bc8 100644 --- a/src/executionModes/onceExecutionMode.coffee +++ b/src/executionModes/onceExecutionMode.coffee @@ -7,3 +7,10 @@ module.exports = .tap () => reader.emit "job-finish" .tap () => process.exit 0 + handleError: (err, reader, keepAliveMessage, message) -> + super err, reader, keepAliveMessage, message + .then () => + reader.emit "job-error-finish" + process.exit 1 + + diff --git a/src/longTaskQueueReader.coffee b/src/longTaskQueueReader.coffee index 50a80e1..3afa404 100644 --- a/src/longTaskQueueReader.coffee +++ b/src/longTaskQueueReader.coffee @@ -10,6 +10,7 @@ eventsToLog = (logger) -> "job-get-messages": -> logger.info "Obteniendo mensajes nuevas" "job-finish-messages": -> logger.info "Finalizo la ejecucion de mensajes" "job-finish": -> logger.info "Finalizo la ejecucion" + "job-error-finish": -> logger.info "Finalizo la ejecucion por un error" "message-start": (message) -> logger.info "Iniciando el proceso de un mensaje", message "message-finish": (message) -> logger.info "Finalizo la ejecucion de un proceso", message "message-touch": ({ messageId, MessageId, messageText, Body }) -> logger.info "Touching #{messageId or MessageId}", messageText or Body @@ -38,8 +39,7 @@ module.exports = .execute() .tap => @_removeSafety message .catch MaxRetriesExceededException, (e) => @_sendToPoison message - .catch (err) => @emit "job_error", { method: "_execute", err, message } - .tap -> keepAliveMessage.destroy() + .catch (err) => @executionMode.handleError(err, @, keepAliveMessage, message) .then => @emit "message-finish", message _sendToPoison: (message) =>