lib/propono/components/sqs_message.rb in propono-1.0.0.rc2 vs lib/propono/components/sqs_message.rb in propono-1.0.0.rc3
- old
+ new
@@ -1,17 +1,33 @@
module Propono
class SqsMessage
include Sqs
- attr_reader :context, :message, :raw_message, :receipt_handle
+ attr_reader :context, :message, :raw_message, :receipt_handle, :failure_count
def initialize(raw_message)
- body = JSON.parse(raw_message["Body"])["Message"]
- body = JSON.parse(body)
+ raw_body = raw_message["Body"]
+ @raw_body_json = JSON.parse(raw_body)
+ body = JSON.parse(@raw_body_json["Message"])
@raw_message = raw_message
@context = body.symbolize_keys
+ @failure_count = context[:num_failures] || 0
@message = context.delete(:message)
@receipt_handle = raw_message["receipt_handle"]
+ end
+
+ def to_json_with_exception(exception)
+ message = @raw_body_json.dup
+ context = {}
+ context[:id] = @context[:id]
+ context[:message] = @message
+ context[:last_exception_message] = exception.message
+ context[:last_exception_stack_trace] = exception.backtrace
+ context[:last_exception_time] = Time.now
+ context[:num_failures] = failure_count + 1
+ context[:last_context] = @context
+ message['Message'] = context.to_json
+ JSON.pretty_generate(message)
end
def ==(other)
other.is_a?(SqsMessage) && other.receipt_handle == @receipt_handle
end