Class: HerdstWorker::Queue::Facade

Inherits:
Object
  • Object
show all
Defined in:
lib/herdst_worker/queue/facade.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app, enabled, url, queue_wait_time) ⇒ Facade

Returns a new instance of Facade.



13
14
15
16
# 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

Instance Attribute Details

#appObject

Returns the value of attribute app.



10
11
12
# File 'lib/herdst_worker/queue/facade.rb', line 10

def app
  @app
end

#processorObject

Returns the value of attribute processor.



10
11
12
# File 'lib/herdst_worker/queue/facade.rb', line 10

def processor
  @processor
end

Class Method Details

.get_delay(index) ⇒ Object



149
150
151
152
153
154
155
156
157
# 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

Instance Method Details

#create_email_queue_message(template, company, message_data, attributes = nil, delay = 2) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# 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) ⇒ Object



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# 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) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# 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_processorObject



39
40
41
# File 'lib/herdst_worker/queue/facade.rb', line 39

def get_processor
    self.processor
end

#get_queue_client(queue_name) ⇒ Object



136
137
138
139
140
141
142
143
144
145
146
# 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..get_aws_credentials
    )
    
    Aws::SQS::Queue.new(
        :url => queue_url,
        :client => sqs_client
    )
end

#get_statusObject



19
20
21
# File 'lib/herdst_worker/queue/facade.rb', line 19

def get_status
    self.processor.processor_status
end

#haltObject



29
30
31
# 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) ⇒ Object



62
63
64
65
66
67
68
69
# 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) ⇒ Object



44
45
46
47
48
49
50
# 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) ⇒ Object



53
54
55
56
57
58
59
# 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

#startObject



24
25
26
# File 'lib/herdst_worker/queue/facade.rb', line 24

def start
    self.processor.start
end

#stopObject



34
35
36
# File 'lib/herdst_worker/queue/facade.rb', line 34

def stop
    self.processor.stop
end