Class: Jobs::Onceoff

Inherits:
Base
  • Object
show all
Defined in:
app/jobs/onceoff/onceoff.rb

Constant Summary collapse

@@onceoff_job_klasses =
Set.new

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

acquire_cluster_concurrency_lock!, clear_cluster_concurrency_lock!, cluster_concurrency, cluster_concurrency_redis_key, delayed_perform, #error_context, get_cluster_concurrency, #last_db_duration, #log, #perform, #perform_immediately

Class Method Details

.enqueue_allObject



43
44
45
46
47
48
49
50
# File 'app/jobs/onceoff/onceoff.rb', line 43

def self.enqueue_all
  previously_ran = OnceoffLog.pluck(:job_name).uniq

  self.onceoff_job_klasses.each do |klass|
    job_name = name_for(klass)
    Jobs.enqueue(job_name.underscore.to_sym) if previously_ran.exclude?(job_name)
  end
end

.inherited(klass) ⇒ Object



9
10
11
# File 'app/jobs/onceoff/onceoff.rb', line 9

def inherited(klass)
  @@onceoff_job_klasses << klass
end

.name_for(klass) ⇒ Object



18
19
20
# File 'app/jobs/onceoff/onceoff.rb', line 18

def self.name_for(klass)
  klass.name.sub(/\AJobs\:\:/, "")
end

.onceoff_job_klassesObject



13
14
15
# File 'app/jobs/onceoff/onceoff.rb', line 13

def onceoff_job_klasses
  @@onceoff_job_klasses
end

Instance Method Details

#execute(args) ⇒ Object

Pass ‘force: true` to force it happen again



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'app/jobs/onceoff/onceoff.rb', line 27

def execute(args)
  job_name = self.class.name_for(self.class)
  has_lock = Discourse.redis.setnx(running_key_name, Time.now.to_i)

  # If we can't get a lock, just noop
  if args[:force] || has_lock
    begin
      return if OnceoffLog.where(job_name: job_name).exists? && !args[:force]
      execute_onceoff(args)
      OnceoffLog.create!(job_name: job_name)
    ensure
      Discourse.redis.del(running_key_name) if has_lock
    end
  end
end

#running_key_nameObject



22
23
24
# File 'app/jobs/onceoff/onceoff.rb', line 22

def running_key_name
  "#{self.class.name}:running"
end