round_robin 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -30,11 +30,29 @@ Now fire up two workers with:
30
30
 
31
31
  COUNT=2 rake round_robin:workers
32
32
 
33
- The two workers workers will take one job at a time each and process them in order.
33
+ The two workers workers will take one job at a time each and process them in
34
+ order.
34
35
 
35
36
  The workers will be persisted and will be kept even after a restart of the
36
37
  server. Typically in a Rails project a `RoundRobin.add` can be called in an
37
38
  `after_create` callback and similarly a `RoundRobin.remove` may be called
38
39
  `after_destroy`.
39
40
 
41
+ The RoundRobin.add call returns a RoundRobin::Job, that descends from
42
+ ActiveRecord::Base. That record has the following attributes of interest,
43
+
44
+ started_at, finished_at: datetime
45
+
46
+ When the job was started and finished most recently.
47
+
48
+ every_n_hours: integer
49
+
50
+ Whether to skip to job unless it was atleast n hours since it was run last
51
+ time. Use this to avoid running a job more often than preferred. By default
52
+ set to nil. Nil and zero means as often as possible.
53
+
54
+ skip: boolean
55
+
56
+ Whether the job should be skipped in the future. By default set to false.
57
+
40
58
  Round Robin is inspired by Resque and DelayedJob.
@@ -5,8 +5,10 @@ module RoundRobin
5
5
  self.table_name = 'round_robin_jobs'
6
6
 
7
7
  def invoke_job
8
+ update_attribute :invoked_at, Time.now
9
+ return unless runnable?
8
10
  begin
9
- update_attributes(:started_at => Time.now, :finished_at => nil)
11
+ update_attributes(:started_at => Time.now, :finished_at => nil)
10
12
  klass = Module.const_get(parsed_handler["class"])
11
13
  args = parsed_handler["args"]
12
14
  klass.perform(*args)
@@ -17,8 +19,12 @@ module RoundRobin
17
19
  end
18
20
  end
19
21
 
22
+ def runnable?
23
+ !skip && (every_n_hours.nil? || every_n_hours == 0 || invoked_at.nil? || invoked_at < every_n_hours.hours.ago)
24
+ end
20
25
 
21
26
  private
27
+
22
28
  def parsed_handler
23
29
  @parsed_handler ||= JSON.parse(handler)
24
30
  end
@@ -4,7 +4,7 @@ module RoundRobin
4
4
 
5
5
  def work
6
6
  begin
7
- RoundRobin::Job.order("started_at").limit(1).first.try(:invoke_job)
7
+ RoundRobin::Job.order("invoked_at").limit(1).first.try(:invoke_job)
8
8
  sleep sleep_time
9
9
  end while not shutdown
10
10
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: round_robin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-03-14 00:00:00.000000000Z
13
+ date: 2012-05-09 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
17
- requirement: &70301459842800 !ruby/object:Gem::Requirement
17
+ requirement: &70162860081960 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,7 +22,7 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *70301459842800
25
+ version_requirements: *70162860081960
26
26
  description: ''
27
27
  email:
28
28
  - jan.andersson@gmail.com