Class: Sidecloq::Schedule

Inherits:
Object
  • Object
show all
Includes:
Utils
Defined in:
lib/sidecloq/schedule.rb

Overview

Schedule loads and parses recurring job specs from files, hashes, and redis

Constant Summary collapse

REDIS_KEY =
:sidecloq_schedule

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Utils

included, #logger, #redis, #will_never_run

Constructor Details

#initialize(specs) ⇒ Schedule

Returns a new instance of Schedule.



10
11
12
# File 'lib/sidecloq/schedule.rb', line 10

def initialize(specs)
  @job_specs = specs
end

Instance Attribute Details

#job_specsObject (readonly)

Returns the value of attribute job_specs.



8
9
10
# File 'lib/sidecloq/schedule.rb', line 8

def job_specs
  @job_specs
end

Class Method Details

.envObject



76
77
78
# File 'lib/sidecloq/schedule.rb', line 76

def self.env
  rails_env || rack_env
end

.from_hash(hash) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/sidecloq/schedule.rb', line 34

def self.from_hash(hash)
  hash = hash[env] if hash.key?(env)

  specs = hash.each_with_object({}) do |(name, spec), memo|
    memo[name] = spec.dup.tap do |s|
      s['class'] = name unless spec.key?('class') || spec.key?(:class)
      s['args'] = s['args'] || s[:args] || []
    end
  end

  new(specs)
end

.from_redisObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/sidecloq/schedule.rb', line 18

def self.from_redis
  specs = {}

  if redis { |r| r.exists(REDIS_KEY) }
    specs = {}

    redis { |r| r.hgetall(REDIS_KEY) }.tap do |h|
      h.each do |name, config|
        specs[name] = JSON.parse(config)
      end
    end
  end

  from_hash(specs)
end

.from_yaml(filename) ⇒ Object



14
15
16
# File 'lib/sidecloq/schedule.rb', line 14

def self.from_yaml(filename)
  from_hash(YAML.load_file(filename))
end

.rack_envObject



84
85
86
# File 'lib/sidecloq/schedule.rb', line 84

def self.rack_env
  ENV['RACK_ENV']
end

.rails_envObject



80
81
82
# File 'lib/sidecloq/schedule.rb', line 80

def self.rails_env
  Rails.env if defined?(Rails)
end

Instance Method Details

#reset_redis_scheduleObject



60
61
62
63
64
65
66
# File 'lib/sidecloq/schedule.rb', line 60

def reset_redis_schedule
  redis do |r|
    r.hkeys(REDIS_KEY).each do |k|
      r.hdel(REDIS_KEY, k)
    end
  end
end

#save_all_to_redisObject



68
69
70
71
72
73
74
# File 'lib/sidecloq/schedule.rb', line 68

def save_all_to_redis
  redis do |r|
    @job_specs.each do |name, spec|
      r.hset(REDIS_KEY, name, spec.to_json)
    end
  end
end

#save_redisObject



53
54
55
56
# File 'lib/sidecloq/schedule.rb', line 53

def save_redis
  reset_redis_schedule
  save_all_to_redis
end

#save_yaml(filename) ⇒ Object



47
48
49
50
51
# File 'lib/sidecloq/schedule.rb', line 47

def save_yaml(filename)
  File.open(filename, 'w') do |h|
    h.write @job_specs.to_yaml
  end
end