resque 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of resque might be problematic. Click here for more details.

Files changed (61) hide show
  1. data/.kick +26 -0
  2. data/HISTORY.md +3 -0
  3. data/LICENSE +20 -0
  4. data/README.markdown +638 -0
  5. data/Rakefile +61 -0
  6. data/TODO.md +60 -0
  7. data/bin/resque +57 -0
  8. data/bin/resque-web +47 -0
  9. data/config.ru +8 -0
  10. data/deps.rip +5 -0
  11. data/examples/async_helper.rb +31 -0
  12. data/examples/demo/README.markdown +71 -0
  13. data/examples/demo/Rakefile +3 -0
  14. data/examples/demo/app.rb +27 -0
  15. data/examples/demo/config.ru +19 -0
  16. data/examples/demo/job.rb +12 -0
  17. data/examples/existing_classes_as_jobs.rb +3 -0
  18. data/examples/instance.rb +11 -0
  19. data/examples/simple.rb +30 -0
  20. data/init.rb +1 -0
  21. data/lib/resque.rb +184 -0
  22. data/lib/resque/errors.rb +7 -0
  23. data/lib/resque/failure.rb +57 -0
  24. data/lib/resque/failure/base.rb +54 -0
  25. data/lib/resque/failure/hoptoad.rb +88 -0
  26. data/lib/resque/failure/redis.rb +28 -0
  27. data/lib/resque/helpers.rb +57 -0
  28. data/lib/resque/job.rb +91 -0
  29. data/lib/resque/server.rb +154 -0
  30. data/lib/resque/server/public/idle.png +0 -0
  31. data/lib/resque/server/public/jquery-1.3.2.min.js +19 -0
  32. data/lib/resque/server/public/jquery.relatize_date.js +95 -0
  33. data/lib/resque/server/public/nav-bg.png +0 -0
  34. data/lib/resque/server/public/ranger.js +7 -0
  35. data/lib/resque/server/public/reset.css +51 -0
  36. data/lib/resque/server/public/style.css +67 -0
  37. data/lib/resque/server/public/tab_b.gif +0 -0
  38. data/lib/resque/server/public/tab_r.gif +0 -0
  39. data/lib/resque/server/public/tabs.css +189 -0
  40. data/lib/resque/server/public/working.png +0 -0
  41. data/lib/resque/server/views/error.erb +1 -0
  42. data/lib/resque/server/views/failed.erb +29 -0
  43. data/lib/resque/server/views/key.erb +17 -0
  44. data/lib/resque/server/views/layout.erb +43 -0
  45. data/lib/resque/server/views/next_more.erb +12 -0
  46. data/lib/resque/server/views/overview.erb +2 -0
  47. data/lib/resque/server/views/queues.erb +40 -0
  48. data/lib/resque/server/views/stats.erb +62 -0
  49. data/lib/resque/server/views/workers.erb +72 -0
  50. data/lib/resque/server/views/working.erb +66 -0
  51. data/lib/resque/stat.rb +53 -0
  52. data/lib/resque/tasks.rb +24 -0
  53. data/lib/resque/version.rb +3 -0
  54. data/lib/resque/worker.rb +406 -0
  55. data/tasks/redis.rake +125 -0
  56. data/tasks/resque.rake +2 -0
  57. data/test/redis-test.conf +132 -0
  58. data/test/resque_test.rb +160 -0
  59. data/test/test_helper.rb +90 -0
  60. data/test/worker_test.rb +212 -0
  61. metadata +124 -0
@@ -0,0 +1,212 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ context "Resque::Worker" do
4
+ setup do
5
+ Resque.redis.flush_all
6
+
7
+ @worker = Resque::Worker.new(:jobs)
8
+ Resque::Job.create(:jobs, SomeJob, 20, '/tmp')
9
+ end
10
+
11
+ test "can fail jobs" do
12
+ Resque::Job.create(:jobs, BadJob)
13
+ @worker.work(0)
14
+ assert_equal 1, Resque::Failure.count
15
+ end
16
+
17
+ test "can peek at failed jobs" do
18
+ 10.times { Resque::Job.create(:jobs, BadJob) }
19
+ @worker.work(0)
20
+ assert_equal 10, Resque::Failure.count
21
+
22
+ assert_equal 10, Resque::Failure.all(0, 20).size
23
+ end
24
+
25
+ test "catches exceptional jobs" do
26
+ Resque::Job.create(:jobs, BadJob)
27
+ Resque::Job.create(:jobs, BadJob)
28
+ @worker.process
29
+ @worker.process
30
+ @worker.process
31
+ assert_equal 2, Resque::Failure.count
32
+ end
33
+
34
+ test "can work on multiple queues" do
35
+ Resque::Job.create(:high, GoodJob)
36
+ Resque::Job.create(:critical, GoodJob)
37
+
38
+ worker = Resque::Worker.new(:critical, :high)
39
+
40
+ worker.process
41
+ assert_equal 1, Resque.size(:high)
42
+ assert_equal 0, Resque.size(:critical)
43
+
44
+ worker.process
45
+ assert_equal 0, Resque.size(:high)
46
+ end
47
+
48
+ test "can work on all queues" do
49
+ Resque::Job.create(:high, GoodJob)
50
+ Resque::Job.create(:critical, GoodJob)
51
+ Resque::Job.create(:blahblah, GoodJob)
52
+
53
+ worker = Resque::Worker.new("*")
54
+
55
+ worker.work(0)
56
+ assert_equal 0, Resque.size(:high)
57
+ assert_equal 0, Resque.size(:critical)
58
+ assert_equal 0, Resque.size(:blahblah)
59
+ end
60
+
61
+ test "processes * queues in alphabetical order" do
62
+ Resque::Job.create(:high, GoodJob)
63
+ Resque::Job.create(:critical, GoodJob)
64
+ Resque::Job.create(:blahblah, GoodJob)
65
+
66
+ worker = Resque::Worker.new("*")
67
+ processed_queues = []
68
+
69
+ worker.work(0) do |job|
70
+ processed_queues << job.queue
71
+ end
72
+
73
+ assert_equal %w( jobs high critical blahblah ).sort, processed_queues
74
+ end
75
+
76
+ test "has a unique id" do
77
+ assert_equal "#{`hostname`.chomp}:#{$$}:jobs", @worker.to_s
78
+ end
79
+
80
+ test "complains if no queues are given" do
81
+ assert_raise Resque::NoQueueError do
82
+ Resque::Worker.new
83
+ end
84
+ end
85
+
86
+ test "inserts itself into the 'workers' list on startup" do
87
+ @worker.work(0) do
88
+ assert_equal @worker, Resque.workers[0]
89
+ end
90
+ end
91
+
92
+ test "removes itself from the 'workers' list on shutdown" do
93
+ @worker.work(0) do
94
+ assert_equal @worker, Resque.workers[0]
95
+ end
96
+
97
+ assert_equal [], Resque.workers
98
+ end
99
+
100
+ test "records what it is working on" do
101
+ @worker.work(0) do
102
+ task = @worker.job
103
+ assert_equal({"args"=>[20, "/tmp"], "class"=>"SomeJob"}, task['payload'])
104
+ assert task['run_at']
105
+ assert_equal 'jobs', task['queue']
106
+ end
107
+ end
108
+
109
+ test "clears its status when not working on anything" do
110
+ @worker.work(0)
111
+ assert_equal Hash.new, @worker.job
112
+ end
113
+
114
+ test "knows when it is working" do
115
+ @worker.work(0) do
116
+ assert @worker.working?
117
+ end
118
+ end
119
+
120
+ test "knows when it is idle" do
121
+ @worker.work(0)
122
+ assert @worker.idle?
123
+ end
124
+
125
+ test "knows who is working" do
126
+ @worker.work(0) do
127
+ assert_equal [@worker], Resque.working
128
+ end
129
+ end
130
+
131
+ test "keeps track of how many jobs it has processed" do
132
+ Resque::Job.create(:jobs, BadJob)
133
+ Resque::Job.create(:jobs, BadJob)
134
+
135
+ 3.times do
136
+ job = @worker.reserve
137
+ @worker.process job
138
+ end
139
+ assert_equal 3, @worker.processed
140
+ end
141
+
142
+ test "keeps track of how many failures it has seen" do
143
+ Resque::Job.create(:jobs, BadJob)
144
+ Resque::Job.create(:jobs, BadJob)
145
+
146
+ 3.times do
147
+ job = @worker.reserve
148
+ @worker.process job
149
+ end
150
+ assert_equal 2, @worker.failed
151
+ end
152
+
153
+ test "stats are erased when the worker goes away" do
154
+ @worker.work(0)
155
+ assert_equal 0, @worker.processed
156
+ assert_equal 0, @worker.failed
157
+ end
158
+
159
+ test "knows when it started" do
160
+ time = Time.now
161
+ @worker.work(0) do
162
+ assert_equal time.to_s, @worker.started.to_s
163
+ end
164
+ end
165
+
166
+ test "knows whether it exists or not" do
167
+ @worker.work(0) do
168
+ assert Resque::Worker.exists?(@worker)
169
+ assert !Resque::Worker.exists?('blah-blah')
170
+ end
171
+ end
172
+
173
+ test "sets $0 while working" do
174
+ @worker.work(0) do
175
+ assert_equal "resque: Processing jobs since #{Time.now.to_i}", $0
176
+ end
177
+ end
178
+
179
+ test "can be found" do
180
+ @worker.work(0) do
181
+ found = Resque::Worker.find(@worker.to_s)
182
+ assert_equal @worker.to_s, found.to_s
183
+ assert found.working?
184
+ assert_equal @worker.job, found.job
185
+ end
186
+ end
187
+
188
+ test "doesn't find fakes" do
189
+ @worker.work(0) do
190
+ found = Resque::Worker.find('blah-blah')
191
+ assert_equal nil, found
192
+ end
193
+ end
194
+
195
+ test "cleans up dead worker info on start (crash recovery)" do
196
+ # first we fake out two dead workers
197
+ workerA = Resque::Worker.new(:jobs)
198
+ workerA.instance_variable_set(:@to_s, "#{`hostname`.chomp}:1:jobs")
199
+ workerA.register_worker
200
+
201
+ workerB = Resque::Worker.new(:high, :low)
202
+ workerB.instance_variable_set(:@to_s, "#{`hostname`.chomp}:2:high,low")
203
+ workerB.register_worker
204
+
205
+ assert_equal 2, Resque.workers.size
206
+
207
+ # then we prune them
208
+ @worker.work(0) do
209
+ assert_equal 1, Resque.workers.size
210
+ end
211
+ end
212
+ end
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: resque
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Chris Wanstrath
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-03 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: ""
17
+ email: chris@ozmm.org
18
+ executables:
19
+ - resque
20
+ - resque-web
21
+ extensions: []
22
+
23
+ extra_rdoc_files:
24
+ - LICENSE
25
+ - README.markdown
26
+ files:
27
+ - .kick
28
+ - HISTORY.md
29
+ - LICENSE
30
+ - README.markdown
31
+ - Rakefile
32
+ - TODO.md
33
+ - bin/resque
34
+ - bin/resque-web
35
+ - config.ru
36
+ - deps.rip
37
+ - examples/async_helper.rb
38
+ - examples/demo/README.markdown
39
+ - examples/demo/Rakefile
40
+ - examples/demo/app.rb
41
+ - examples/demo/config.ru
42
+ - examples/demo/job.rb
43
+ - examples/existing_classes_as_jobs.rb
44
+ - examples/instance.rb
45
+ - examples/simple.rb
46
+ - init.rb
47
+ - lib/resque.rb
48
+ - lib/resque/errors.rb
49
+ - lib/resque/failure.rb
50
+ - lib/resque/failure/base.rb
51
+ - lib/resque/failure/hoptoad.rb
52
+ - lib/resque/failure/redis.rb
53
+ - lib/resque/helpers.rb
54
+ - lib/resque/job.rb
55
+ - lib/resque/server.rb
56
+ - lib/resque/server/public/idle.png
57
+ - lib/resque/server/public/jquery-1.3.2.min.js
58
+ - lib/resque/server/public/jquery.relatize_date.js
59
+ - lib/resque/server/public/nav-bg.png
60
+ - lib/resque/server/public/ranger.js
61
+ - lib/resque/server/public/reset.css
62
+ - lib/resque/server/public/style.css
63
+ - lib/resque/server/public/tab_b.gif
64
+ - lib/resque/server/public/tab_r.gif
65
+ - lib/resque/server/public/tabs.css
66
+ - lib/resque/server/public/working.png
67
+ - lib/resque/server/views/error.erb
68
+ - lib/resque/server/views/failed.erb
69
+ - lib/resque/server/views/key.erb
70
+ - lib/resque/server/views/layout.erb
71
+ - lib/resque/server/views/next_more.erb
72
+ - lib/resque/server/views/overview.erb
73
+ - lib/resque/server/views/queues.erb
74
+ - lib/resque/server/views/stats.erb
75
+ - lib/resque/server/views/workers.erb
76
+ - lib/resque/server/views/working.erb
77
+ - lib/resque/stat.rb
78
+ - lib/resque/tasks.rb
79
+ - lib/resque/version.rb
80
+ - lib/resque/worker.rb
81
+ - tasks/redis.rake
82
+ - tasks/resque.rake
83
+ - test/redis-test.conf
84
+ - test/resque_test.rb
85
+ - test/test_helper.rb
86
+ - test/worker_test.rb
87
+ has_rdoc: true
88
+ homepage: http://github.com/defunkt/resque
89
+ licenses: []
90
+
91
+ post_install_message:
92
+ rdoc_options:
93
+ - --charset=UTF-8
94
+ require_paths:
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: "0"
101
+ version:
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: "0"
107
+ version:
108
+ requirements: []
109
+
110
+ rubyforge_project:
111
+ rubygems_version: 1.3.5
112
+ signing_key:
113
+ specification_version: 3
114
+ summary: ""
115
+ test_files:
116
+ - test/resque_test.rb
117
+ - test/test_helper.rb
118
+ - test/worker_test.rb
119
+ - examples/async_helper.rb
120
+ - examples/demo/app.rb
121
+ - examples/demo/job.rb
122
+ - examples/existing_classes_as_jobs.rb
123
+ - examples/instance.rb
124
+ - examples/simple.rb