class Delayed::Quota
Attributes
interval[RW]
queue[RW]
reached[RW]
size[RW]
started[RW]
Public Class Methods
new(options)
click to toggle source
# File lib/delayed_job_memento/delayed/quota.rb, line 8 def initialize(options) self.queue = options[:queue] self.interval = options[:interval] self.size = options[:size] self.started, self.reached = nil, nil self.instances[self.queue] = self end
Public Instance Methods
quota_reached?()
click to toggle source
fix class variables to instances
# File lib/delayed_job_memento/delayed/quota.rb, line 17 def quota_reached? current_time = Time.zone.now if self.reached != nil time_left = self.interval - (self.reached - self.started) if self.reached + time_left < current_time self.reached = nil self.started = current_time false else true end else if self.started != nil conditions = { queue: self.queue, created_at: self.started..current_time, locked_at: Time.new(0)..current_time } finished_jobs = Delayed::Memento.where(queue: self.queue,created_at: self.started..current_time,locked_at: Time.new(0)..current_time).count if finished_jobs >= self.size self.reached = current_time true else false end else self.started = current_time false end end end
rebalance_queue()
click to toggle source
# File lib/delayed_job_memento/delayed/quota.rb, line 49 def rebalance_queue run_at = self.interval - (self.reached - self.started) conditions = {queue: self.queue, locked_at: nil} Delayed::Job.where(conditions).find_in_batches(batch_size: self.size) do |batch| batch.each { |job| job.run_at = run_at } Delayed::Job.import batch, validate: false, on_duplicate_key_update: [:run_at] run_at= run_at + self.interval end end