Class: JobTimeSpacer

Inherits:
Object
  • Object
show all
Defined in:
lib/job_time_spacer.rb

Overview

In some cases we may want to enqueue_at several of the same job with batches, spacing them out or incrementing by some amount of seconds, in case the jobs do heavy work or send many MessageBus messages and the like. This class handles figuring out the seconds increments.

Examples:

spacer = JobTimeSpacer.new
user_ids.in_groups_of(200, false) do |user_id_batch|
  spacer.enqueue(:kick_users_from_topic, { topic_id: topic_id, user_ids: user_id_batch })
end

Instance Method Summary collapse

Constructor Details

#initialize(seconds_space_increment: 1, seconds_delay: 5) ⇒ JobTimeSpacer

Returns a new instance of JobTimeSpacer.



15
16
17
18
19
# File 'lib/job_time_spacer.rb', line 15

def initialize(seconds_space_increment: 1, seconds_delay: 5)
  @seconds_space_increment = seconds_space_increment
  @seconds_space_modifier = seconds_space_increment
  @seconds_step = seconds_delay
end

Instance Method Details

#enqueue(job_name, job_args = {}) ⇒ Object



21
22
23
24
# File 'lib/job_time_spacer.rb', line 21

def enqueue(job_name, job_args = {})
  Jobs.enqueue_at((@seconds_step * @seconds_space_modifier).seconds.from_now, job_name, job_args)
  @seconds_space_modifier += @seconds_space_increment
end