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