class HerdstWorker::Queue::Facade

Attributes

app[RW]
processor[RW]

Public Class Methods

get_delay(index) click to toggle source
# File lib/herdst_worker/queue/facade.rb, line 149
def self.get_delay(index)
    messages_per_second = 10
    send_time_per_message = 0.4
    
    offset = (index / messages_per_second)
    delay = (offset * (messages_per_second * send_time_per_message)).to_i
    
    delay > 900 ? 900 : delay
end
new(app, enabled, url, queue_wait_time) click to toggle source
# File lib/herdst_worker/queue/facade.rb, line 13
def initialize(app, enabled, url, queue_wait_time)
    self.app = app
    self.processor = HerdstWorker::Queue::Processor.new(app, enabled, url, queue_wait_time)
end

Public Instance Methods

create_email_queue_message(template, company, message_data, attributes = nil, delay = 2) click to toggle source
# File lib/herdst_worker/queue/facade.rb, line 91
def create_email_queue_message(template, company, message_data, attributes = nil, delay = 2)
    # Convert instances of ApplicationRecord to attributes instead of json representation
    message_data.each do |key, value|
        message_data[key] = value.attributes if value.is_a?(ActiveRecord::Base)
    end
    
    # Build data
    data = Hash.new
    data[:app] = self.app.name
    data[:app_id] = company.id
    data[:app_name] = company.name
    data[:app_slug] = company.get_host_name
    data[:app_brand_id] = company.brand_id
    data[:app_host] = company.get_url
    data[:type] = "email"
    data[:template] = template
    data[:data] = message_data
    
    # Add message structure
    message = Hash.new
    message[:id] = SecureRandom.hex(32)
    message[:message_body] = data.to_json
    message[:message_attributes] = attributes if attributes
    message[:delay_seconds] = delay
    message
end
create_notification_message(message_data, attributes = nil, expiry = nil, delay = nil) click to toggle source
# File lib/herdst_worker/queue/facade.rb, line 119
def create_notification_message(message_data, attributes = nil, expiry = nil, delay = nil)
    message = Hash.new
    message[:id] = SecureRandom.hex(32)
    message[:message_body] = Hash.new
    message[:message_body][:Type] = "Notification"
    message[:message_body][:Message] = message_data.to_json
    message[:message_body] = message[:message_body].to_json
    message[:message_attributes] = attributes ? attributes : Hash.new
    message[:message_attributes]["expiry"] = { :string_value => expiry.to_s, :data_type => "Number" } if expiry
    message[:delay_seconds] = delay if delay
    
    message.delete(:message_attributes) if message[:message_attributes].size == 0
    
    message
end
create_queue_message(type, company_id, user_id, data, attributes = nil, delay = nil) click to toggle source
# File lib/herdst_worker/queue/facade.rb, line 72
def create_queue_message(type, company_id, user_id, data, attributes = nil, delay = nil)
    message = Hash.new
    message[:id] = SecureRandom.hex(32)
    message[:message_body] = Hash.new
    message[:message_body][:eventVersion] = 1.0
    message[:message_body][:eventSource] = "application:Que"
    message[:message_body][:eventTime] = Time.now.utc.strftime("%Y-%m-%dT%H:%M:%S.%LZ")
    message[:message_body][:eventName] = type.to_s.camelize(:lower)
    message[:message_body][:userIdentity] = { :principalId => user_id, :companyId => company_id }
    message[:message_body][:Que] = data
    message[:message_body][:Que][:configurationId] = message[:message_body][:eventName]

    message[:message_body] = { :Records => [message[:message_body]] }.to_json
    message[:message_attributes] = attributes if attributes
    message[:delay_seconds] = delay if delay
    message
end
get_processor() click to toggle source
# File lib/herdst_worker/queue/facade.rb, line 39
def get_processor
    self.processor
end
get_queue_client(queue_name) click to toggle source
# File lib/herdst_worker/queue/facade.rb, line 136
def get_queue_client(queue_name)
    queue_url = self.app.queues[queue_name]
    sqs_client = Aws::SQS::Client.new(
        :credentials => self.app.config.metadata.get_aws_credentials
    )
    
    Aws::SQS::Queue.new(
        :url => queue_url,
        :client => sqs_client
    )
end
get_status() click to toggle source
# File lib/herdst_worker/queue/facade.rb, line 19
def get_status
    self.processor.processor_status
end
halt() click to toggle source
# File lib/herdst_worker/queue/facade.rb, line 29
def halt
    self.processor.halt
end
send_email_message(template, company, data = {}, attributes = nil, delay = nil) click to toggle source
# File lib/herdst_worker/queue/facade.rb, line 62
def send_email_message(template, company, data = {}, attributes = nil, delay = nil)
    client = get_queue_client(:notifications)
    
    message = create_email_queue_message(template, company, data, attributes, delay)
    message.delete(:id)
    
    client.send_message(message)
end
send_message(type, company_id, user_id, data = {}, queue = :primary, attributes = nil, delay = nil) click to toggle source
# File lib/herdst_worker/queue/facade.rb, line 44
def send_message(type, company_id, user_id, data = {}, queue = :primary, attributes = nil, delay = nil)
    client = get_queue_client(queue)
    message = create_queue_message(type, company_id, user_id, data, attributes, delay)
    message.delete(:id)
    
    client.send_message(message)
end
send_messages(messages = [], queue = :primary) click to toggle source
# File lib/herdst_worker/queue/facade.rb, line 53
def send_messages(messages = [], queue = :primary)
    client = get_queue_client(queue)
    
    messages.each_slice(10) do |messages_group|
        client.send_messages({ :entries => messages_group })
    end
end
start() click to toggle source
# File lib/herdst_worker/queue/facade.rb, line 24
def start
    self.processor.start
end
stop() click to toggle source
# File lib/herdst_worker/queue/facade.rb, line 34
def stop
    self.processor.stop
end