Class: BossQueue
- Inherits:
-
Object
- Object
- BossQueue
- Defined in:
- lib/boss_queue/job.rb,
lib/boss_queue/boss_queue.rb
Defined Under Namespace
Classes: Job
Class Method Summary collapse
-
.create_job(class_or_instance, method_name, *args) ⇒ Object
:nodoc:.
- .create_queue ⇒ Object
- .create_table(read_capacity = 1, write_capacity = 1, options = {}) ⇒ Object
- .enqueue(class_or_instance, method_name, *args) ⇒ Object
- .enqueue_with_delay(delay, class_or_instance, method_name, *args) ⇒ Object
-
.environment ⇒ Object
:nodoc:.
- .environment=(env) ⇒ Object
- .failure_action ⇒ Object
- .failure_action=(env) ⇒ Object
- .queue_name ⇒ Object
-
.queue_prefix ⇒ Object
:nodoc:.
-
.sqs_queue ⇒ Object
:nodoc:.
- .table_name ⇒ Object
- .work ⇒ Object
Class Method Details
.create_job(class_or_instance, method_name, *args) ⇒ Object
:nodoc:
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/boss_queue/boss_queue.rb', line 60 def self.create_job(class_or_instance, method_name, *args) # :nodoc: job = BossQueue::Job.shard(table_name).new if class_or_instance.is_a?(Class) class_name = class_or_instance.to_s instance_id = nil job.kind = "#{class_name}@#{method_name}" else class_name = class_or_instance.class.to_s instance_id = class_or_instance.id job.kind = "#{class_name}##{method_name}" end job.queue_name = self.queue_name job.failure_action = self.failure_action job.model_class_name = class_name job.model_id = instance_id unless instance_id.nil? job.job_method = method_name.to_s job.job_arguments = JSON.generate(args) job.save! job end |
.create_queue ⇒ Object
37 38 39 |
# File 'lib/boss_queue/boss_queue.rb', line 37 def self.create_queue AWS::SQS::QueueCollection.new.create(self.queue_name, :default_visibility_timeout => 5 * 60) end |
.create_table(read_capacity = 1, write_capacity = 1, options = {}) ⇒ Object
30 31 32 33 34 35 |
# File 'lib/boss_queue/boss_queue.rb', line 30 def self.create_table(read_capacity=1, write_capacity=1, ={}) create_opts = {} create_opts[:hash_key] = { :id => :string } AWS::DynamoDB.new.tables.create(self.table_name, read_capacity, write_capacity, create_opts) end |
.enqueue(class_or_instance, method_name, *args) ⇒ Object
50 51 52 53 |
# File 'lib/boss_queue/boss_queue.rb', line 50 def self.enqueue(class_or_instance, method_name, *args) job = self.create_job(class_or_instance, method_name, *args) job.enqueue end |
.enqueue_with_delay(delay, class_or_instance, method_name, *args) ⇒ Object
55 56 57 58 |
# File 'lib/boss_queue/boss_queue.rb', line 55 def self.enqueue_with_delay(delay, class_or_instance, method_name, *args) job = self.create_job(class_or_instance, method_name, *args) job.enqueue_with_delay(delay) end |
.environment ⇒ Object
:nodoc:
85 86 87 88 89 90 91 92 93 |
# File 'lib/boss_queue/boss_queue.rb', line 85 def self.environment # :nodoc: @@environment ||= if Module.const_get('Rails') Rails.env elsif Module.const_get('Rack') Rack.env else raise 'BossQueue requires an environment' end end |
.environment=(env) ⇒ Object
6 7 8 |
# File 'lib/boss_queue/boss_queue.rb', line 6 def self.environment=(env) @@environment = env end |
.failure_action ⇒ Object
12 13 14 |
# File 'lib/boss_queue/boss_queue.rb', line 12 def self.failure_action @@failure_action ||= 'retry' end |
.failure_action=(env) ⇒ Object
16 17 18 |
# File 'lib/boss_queue/boss_queue.rb', line 16 def self.failure_action=(env) @@failure_action = env end |
.queue_name ⇒ Object
25 26 27 |
# File 'lib/boss_queue/boss_queue.rb', line 25 def self.queue_name "#{self.queue_prefix}boss_queue" end |
.queue_prefix ⇒ Object
:nodoc:
95 96 97 98 99 100 101 102 103 104 |
# File 'lib/boss_queue/boss_queue.rb', line 95 def self.queue_prefix # :nodoc: case self.environment when 'production' '' when 'development' 'dev_' else environment + '_' end end |
.sqs_queue ⇒ Object
:nodoc:
81 82 83 |
# File 'lib/boss_queue/boss_queue.rb', line 81 def self.sqs_queue # :nodoc: AWS::SQS.new.queues[AWS::SQS.new.queues.url_for(self.queue_name)] end |
.table_name ⇒ Object
21 22 23 |
# File 'lib/boss_queue/boss_queue.rb', line 21 def self.table_name "#{self.queue_prefix}boss_queue_jobs" end |
.work ⇒ Object
41 42 43 44 45 46 47 48 |
# File 'lib/boss_queue/boss_queue.rb', line 41 def self.work self.sqs_queue. do |job_id| # When a block is given, each message is yielded to the block and then deleted as long as the block exits normally - http://docs.aws.amazon.com/AWSRubySDK/latest/frames.html job = BossQueue::Job.shard(table_name).find(job_id.body) job.queue_name = self.queue_name job.work end end |