class Sqs2mandrill::MessageHandler
Public Class Methods
new()
click to toggle source
# File lib/sqs2mandrill.rb, line 9 def initialize @awsAccessKeyId = ENV['AWS_ACCESS_KEY'] @awsSecretAccessKey = ENV['AWS_SECRET_ACCESS_KEY'] @queue = ENV['MANDRILL_QUEUE'] logfile = ENV['SQS2MANDRILL_LOGFILE_PATH'].nil? ? STDOUT : File.open(ENV['SQS2MANDRILL_LOGFILE_PATH'], 'a') @logger = Logger.new logfile @stop = false raise RuntimeError, "Please ensure AWS_ACCESS_KEY is set." if @awsAccessKeyId.nil? or @awsAccessKeyId.empty? raise RuntimeError, "Please ensure AWS_SECRET_ACCESS_KEY is set." if @awsSecretAccessKey.nil? or @awsSecretAccessKey.empty? raise RuntimeError, "Please ensure MANDRILL_QUEUE is set." if @queue.nil? or @queue.empty? @logger.info "MessageHandler ready to transfer messages." end
Public Instance Methods
handle_received_message(message)
click to toggle source
# File lib/sqs2mandrill.rb, line 42 def handle_received_message(message) @logger.info "Message received." @logger.debug message.body payload = JSON.parse(message.body) send_to_mandrill(payload["template_name"], payload["template_content"], payload["message"]) rescue JSON::ParserError => ex # TODO needs some form of remote notification that an error occured. @logger.error "Bad message format. Unable to deserialize message into JSON." @logger.error ex rescue Exception => ex @logger.error "Something caused a message handling failure." @logger.error ex end
send_to_mandrill(template_name, template_content, message)
click to toggle source
# File lib/sqs2mandrill.rb, line 56 def send_to_mandrill(template_name, template_content, message) @logger.info "Sending to Mandrill" m = Mandrill::API.new @logger.debug m.messages.send_template(template_name, template_content, message) @logger.info "Message sent." rescue Exception => ex @logger.error ex end
stop()
click to toggle source
# File lib/sqs2mandrill.rb, line 24 def stop @stop = true end
transfer_messages()
click to toggle source
# File lib/sqs2mandrill.rb, line 28 def transfer_messages @logger.info "MessageHandler awaiting first message from #{@queue}" begin sqs = AWS::SQS.new(region: 'us-east-1', access_key_id: @awsAccessKeyId, secret_access_key: @awsSecretAccessKey) sqs.queues[@queue].poll do |message| handle_received_message(message) return if @stop end rescue Exception => ex @logger.error "Something cause an SQS failure." @logger.error ex end end