sidekiq 0.10.0 → 7.2.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (234) hide show
  1. checksums.yaml +7 -0
  2. data/Changes.md +2082 -0
  3. data/LICENSE.txt +9 -0
  4. data/README.md +73 -27
  5. data/bin/sidekiq +25 -9
  6. data/bin/sidekiqload +247 -0
  7. data/bin/sidekiqmon +11 -0
  8. data/lib/generators/sidekiq/job_generator.rb +57 -0
  9. data/lib/generators/sidekiq/templates/job.rb.erb +9 -0
  10. data/lib/generators/sidekiq/templates/job_spec.rb.erb +6 -0
  11. data/lib/generators/sidekiq/templates/job_test.rb.erb +8 -0
  12. data/lib/sidekiq/api.rb +1145 -0
  13. data/lib/sidekiq/capsule.rb +127 -0
  14. data/lib/sidekiq/cli.rb +348 -109
  15. data/lib/sidekiq/client.rb +241 -41
  16. data/lib/sidekiq/component.rb +68 -0
  17. data/lib/sidekiq/config.rb +287 -0
  18. data/lib/sidekiq/deploy.rb +62 -0
  19. data/lib/sidekiq/embedded.rb +61 -0
  20. data/lib/sidekiq/fetch.rb +88 -0
  21. data/lib/sidekiq/job.rb +374 -0
  22. data/lib/sidekiq/job_logger.rb +51 -0
  23. data/lib/sidekiq/job_retry.rb +301 -0
  24. data/lib/sidekiq/job_util.rb +107 -0
  25. data/lib/sidekiq/launcher.rb +271 -0
  26. data/lib/sidekiq/logger.rb +131 -0
  27. data/lib/sidekiq/manager.rb +96 -103
  28. data/lib/sidekiq/metrics/query.rb +155 -0
  29. data/lib/sidekiq/metrics/shared.rb +95 -0
  30. data/lib/sidekiq/metrics/tracking.rb +136 -0
  31. data/lib/sidekiq/middleware/chain.rb +149 -38
  32. data/lib/sidekiq/middleware/current_attributes.rb +95 -0
  33. data/lib/sidekiq/middleware/i18n.rb +42 -0
  34. data/lib/sidekiq/middleware/modules.rb +21 -0
  35. data/lib/sidekiq/monitor.rb +146 -0
  36. data/lib/sidekiq/paginator.rb +55 -0
  37. data/lib/sidekiq/processor.rb +246 -61
  38. data/lib/sidekiq/rails.rb +60 -13
  39. data/lib/sidekiq/redis_client_adapter.rb +111 -0
  40. data/lib/sidekiq/redis_connection.rb +68 -15
  41. data/lib/sidekiq/ring_buffer.rb +29 -0
  42. data/lib/sidekiq/scheduled.rb +236 -0
  43. data/lib/sidekiq/sd_notify.rb +149 -0
  44. data/lib/sidekiq/systemd.rb +24 -0
  45. data/lib/sidekiq/testing/inline.rb +30 -0
  46. data/lib/sidekiq/testing.rb +310 -10
  47. data/lib/sidekiq/transaction_aware_client.rb +44 -0
  48. data/lib/sidekiq/version.rb +4 -1
  49. data/lib/sidekiq/web/action.rb +93 -0
  50. data/lib/sidekiq/web/application.rb +463 -0
  51. data/lib/sidekiq/web/csrf_protection.rb +180 -0
  52. data/lib/sidekiq/web/helpers.rb +364 -0
  53. data/lib/sidekiq/web/router.rb +104 -0
  54. data/lib/sidekiq/web.rb +143 -74
  55. data/lib/sidekiq/worker_compatibility_alias.rb +13 -0
  56. data/lib/sidekiq.rb +120 -73
  57. data/sidekiq.gemspec +26 -23
  58. data/web/assets/images/apple-touch-icon.png +0 -0
  59. data/web/assets/images/favicon.ico +0 -0
  60. data/web/assets/images/logo.png +0 -0
  61. data/web/assets/images/status.png +0 -0
  62. data/web/assets/javascripts/application.js +177 -3
  63. data/web/assets/javascripts/base-charts.js +106 -0
  64. data/web/assets/javascripts/chart.min.js +13 -0
  65. data/web/assets/javascripts/chartjs-plugin-annotation.min.js +7 -0
  66. data/web/assets/javascripts/dashboard-charts.js +182 -0
  67. data/web/assets/javascripts/dashboard.js +57 -0
  68. data/web/assets/javascripts/metrics.js +298 -0
  69. data/web/assets/stylesheets/application-dark.css +147 -0
  70. data/web/assets/stylesheets/application-rtl.css +153 -0
  71. data/web/assets/stylesheets/application.css +729 -7
  72. data/web/assets/stylesheets/bootstrap-rtl.min.css +9 -0
  73. data/web/assets/stylesheets/bootstrap.css +5 -0
  74. data/web/locales/ar.yml +87 -0
  75. data/web/locales/cs.yml +78 -0
  76. data/web/locales/da.yml +75 -0
  77. data/web/locales/de.yml +81 -0
  78. data/web/locales/el.yml +87 -0
  79. data/web/locales/en.yml +101 -0
  80. data/web/locales/es.yml +86 -0
  81. data/web/locales/fa.yml +80 -0
  82. data/web/locales/fr.yml +99 -0
  83. data/web/locales/gd.yml +99 -0
  84. data/web/locales/he.yml +80 -0
  85. data/web/locales/hi.yml +75 -0
  86. data/web/locales/it.yml +69 -0
  87. data/web/locales/ja.yml +91 -0
  88. data/web/locales/ko.yml +68 -0
  89. data/web/locales/lt.yml +83 -0
  90. data/web/locales/nb.yml +77 -0
  91. data/web/locales/nl.yml +68 -0
  92. data/web/locales/pl.yml +59 -0
  93. data/web/locales/pt-br.yml +96 -0
  94. data/web/locales/pt.yml +67 -0
  95. data/web/locales/ru.yml +83 -0
  96. data/web/locales/sv.yml +68 -0
  97. data/web/locales/ta.yml +75 -0
  98. data/web/locales/uk.yml +77 -0
  99. data/web/locales/ur.yml +80 -0
  100. data/web/locales/vi.yml +83 -0
  101. data/web/locales/zh-cn.yml +95 -0
  102. data/web/locales/zh-tw.yml +102 -0
  103. data/web/views/_footer.erb +23 -0
  104. data/web/views/_job_info.erb +105 -0
  105. data/web/views/_metrics_period_select.erb +12 -0
  106. data/web/views/_nav.erb +52 -0
  107. data/web/views/_paging.erb +25 -0
  108. data/web/views/_poll_link.erb +4 -0
  109. data/web/views/_status.erb +4 -0
  110. data/web/views/_summary.erb +40 -0
  111. data/web/views/busy.erb +148 -0
  112. data/web/views/dashboard.erb +105 -0
  113. data/web/views/dead.erb +34 -0
  114. data/web/views/filtering.erb +7 -0
  115. data/web/views/layout.erb +42 -0
  116. data/web/views/metrics.erb +91 -0
  117. data/web/views/metrics_for_job.erb +59 -0
  118. data/web/views/morgue.erb +74 -0
  119. data/web/views/queue.erb +55 -0
  120. data/web/views/queues.erb +44 -0
  121. data/web/views/retries.erb +79 -0
  122. data/web/views/retry.erb +34 -0
  123. data/web/views/scheduled.erb +56 -0
  124. data/web/views/scheduled_job_info.erb +8 -0
  125. metadata +159 -237
  126. data/.gitignore +0 -6
  127. data/.rvmrc +0 -4
  128. data/COMM-LICENSE +0 -75
  129. data/Gemfile +0 -10
  130. data/LICENSE +0 -22
  131. data/Rakefile +0 -9
  132. data/TODO.md +0 -1
  133. data/bin/client +0 -7
  134. data/bin/sidekiqctl +0 -43
  135. data/config.ru +0 -8
  136. data/examples/chef/cookbooks/sidekiq/README.rdoc +0 -11
  137. data/examples/chef/cookbooks/sidekiq/recipes/default.rb +0 -55
  138. data/examples/chef/cookbooks/sidekiq/templates/default/monitrc.conf.erb +0 -8
  139. data/examples/chef/cookbooks/sidekiq/templates/default/sidekiq.erb +0 -219
  140. data/examples/chef/cookbooks/sidekiq/templates/default/sidekiq.yml.erb +0 -22
  141. data/examples/config.yml +0 -9
  142. data/examples/monitrc.conf +0 -6
  143. data/examples/por.rb +0 -27
  144. data/examples/scheduling.rb +0 -37
  145. data/examples/sinkiq.rb +0 -57
  146. data/examples/web-ui.png +0 -0
  147. data/lib/sidekiq/capistrano.rb +0 -32
  148. data/lib/sidekiq/extensions/action_mailer.rb +0 -26
  149. data/lib/sidekiq/extensions/active_record.rb +0 -27
  150. data/lib/sidekiq/extensions/generic_proxy.rb +0 -21
  151. data/lib/sidekiq/middleware/client/unique_jobs.rb +0 -32
  152. data/lib/sidekiq/middleware/server/active_record.rb +0 -13
  153. data/lib/sidekiq/middleware/server/exception_handler.rb +0 -38
  154. data/lib/sidekiq/middleware/server/failure_jobs.rb +0 -24
  155. data/lib/sidekiq/middleware/server/logging.rb +0 -27
  156. data/lib/sidekiq/middleware/server/retry_jobs.rb +0 -59
  157. data/lib/sidekiq/middleware/server/unique_jobs.rb +0 -15
  158. data/lib/sidekiq/retry.rb +0 -57
  159. data/lib/sidekiq/util.rb +0 -61
  160. data/lib/sidekiq/worker.rb +0 -37
  161. data/myapp/.gitignore +0 -15
  162. data/myapp/Capfile +0 -5
  163. data/myapp/Gemfile +0 -19
  164. data/myapp/Gemfile.lock +0 -143
  165. data/myapp/Rakefile +0 -7
  166. data/myapp/app/controllers/application_controller.rb +0 -3
  167. data/myapp/app/controllers/work_controller.rb +0 -38
  168. data/myapp/app/helpers/application_helper.rb +0 -2
  169. data/myapp/app/mailers/.gitkeep +0 -0
  170. data/myapp/app/mailers/user_mailer.rb +0 -9
  171. data/myapp/app/models/.gitkeep +0 -0
  172. data/myapp/app/models/post.rb +0 -5
  173. data/myapp/app/views/layouts/application.html.erb +0 -14
  174. data/myapp/app/views/user_mailer/greetings.html.erb +0 -3
  175. data/myapp/app/views/work/index.html.erb +0 -1
  176. data/myapp/app/workers/hard_worker.rb +0 -9
  177. data/myapp/config/application.rb +0 -59
  178. data/myapp/config/boot.rb +0 -6
  179. data/myapp/config/database.yml +0 -25
  180. data/myapp/config/deploy.rb +0 -15
  181. data/myapp/config/environment.rb +0 -5
  182. data/myapp/config/environments/development.rb +0 -38
  183. data/myapp/config/environments/production.rb +0 -67
  184. data/myapp/config/environments/test.rb +0 -37
  185. data/myapp/config/initializers/backtrace_silencers.rb +0 -7
  186. data/myapp/config/initializers/inflections.rb +0 -15
  187. data/myapp/config/initializers/mime_types.rb +0 -5
  188. data/myapp/config/initializers/secret_token.rb +0 -7
  189. data/myapp/config/initializers/session_store.rb +0 -8
  190. data/myapp/config/initializers/sidekiq.rb +0 -6
  191. data/myapp/config/initializers/wrap_parameters.rb +0 -14
  192. data/myapp/config/locales/en.yml +0 -5
  193. data/myapp/config/routes.rb +0 -10
  194. data/myapp/config.ru +0 -4
  195. data/myapp/db/migrate/20120123214055_create_posts.rb +0 -10
  196. data/myapp/db/seeds.rb +0 -7
  197. data/myapp/lib/assets/.gitkeep +0 -0
  198. data/myapp/lib/tasks/.gitkeep +0 -0
  199. data/myapp/log/.gitkeep +0 -0
  200. data/myapp/script/rails +0 -6
  201. data/test/config.yml +0 -9
  202. data/test/fake_env.rb +0 -0
  203. data/test/helper.rb +0 -15
  204. data/test/test_cli.rb +0 -168
  205. data/test/test_client.rb +0 -105
  206. data/test/test_extensions.rb +0 -68
  207. data/test/test_manager.rb +0 -43
  208. data/test/test_middleware.rb +0 -92
  209. data/test/test_processor.rb +0 -32
  210. data/test/test_retry.rb +0 -83
  211. data/test/test_stats.rb +0 -78
  212. data/test/test_testing.rb +0 -65
  213. data/test/test_web.rb +0 -61
  214. data/web/assets/images/bootstrap/glyphicons-halflings-white.png +0 -0
  215. data/web/assets/images/bootstrap/glyphicons-halflings.png +0 -0
  216. data/web/assets/javascripts/vendor/bootstrap/bootstrap-alert.js +0 -91
  217. data/web/assets/javascripts/vendor/bootstrap/bootstrap-button.js +0 -98
  218. data/web/assets/javascripts/vendor/bootstrap/bootstrap-carousel.js +0 -154
  219. data/web/assets/javascripts/vendor/bootstrap/bootstrap-collapse.js +0 -136
  220. data/web/assets/javascripts/vendor/bootstrap/bootstrap-dropdown.js +0 -92
  221. data/web/assets/javascripts/vendor/bootstrap/bootstrap-modal.js +0 -210
  222. data/web/assets/javascripts/vendor/bootstrap/bootstrap-popover.js +0 -95
  223. data/web/assets/javascripts/vendor/bootstrap/bootstrap-scrollspy.js +0 -125
  224. data/web/assets/javascripts/vendor/bootstrap/bootstrap-tab.js +0 -130
  225. data/web/assets/javascripts/vendor/bootstrap/bootstrap-tooltip.js +0 -270
  226. data/web/assets/javascripts/vendor/bootstrap/bootstrap-transition.js +0 -51
  227. data/web/assets/javascripts/vendor/bootstrap/bootstrap-typeahead.js +0 -271
  228. data/web/assets/javascripts/vendor/bootstrap.js +0 -12
  229. data/web/assets/javascripts/vendor/jquery.js +0 -9266
  230. data/web/assets/stylesheets/vendor/bootstrap-responsive.css +0 -567
  231. data/web/assets/stylesheets/vendor/bootstrap.css +0 -3365
  232. data/web/views/index.slim +0 -62
  233. data/web/views/layout.slim +0 -24
  234. data/web/views/queue.slim +0 -11
@@ -1,68 +0,0 @@
1
- require 'helper'
2
- require 'sidekiq'
3
- require 'active_record'
4
- require 'action_mailer'
5
- require 'sidekiq/extensions/action_mailer'
6
- require 'sidekiq/extensions/active_record'
7
-
8
- Sidekiq.hook_rails!
9
-
10
- class TestExtensions < MiniTest::Unit::TestCase
11
- describe 'sidekiq extensions' do
12
- before do
13
- Sidekiq.redis = REDIS
14
- Sidekiq.redis.flushdb
15
- end
16
-
17
- class MyModel < ActiveRecord::Base
18
- def self.long_class_method
19
- raise "Should not be called!"
20
- end
21
- end
22
-
23
- it 'allows delayed exection of ActiveRecord class methods' do
24
- assert_equal [], Sidekiq::Client.registered_queues
25
- assert_equal 0, Sidekiq.redis.llen('queue:default')
26
- MyModel.delay.long_class_method
27
- assert_equal ['default'], Sidekiq::Client.registered_queues
28
- assert_equal 1, Sidekiq.redis.llen('queue:default')
29
- end
30
-
31
- class UserMailer < ActionMailer::Base
32
- def greetings(a, b)
33
- raise "Should not be called!"
34
- end
35
- end
36
-
37
- it 'allows delayed delivery of ActionMailer mails' do
38
- assert_equal [], Sidekiq::Client.registered_queues
39
- assert_equal 0, Sidekiq.redis.llen('queue:default')
40
- UserMailer.delay.greetings(1, 2)
41
- assert_equal ['default'], Sidekiq::Client.registered_queues
42
- assert_equal 1, Sidekiq.redis.llen('queue:default')
43
- end
44
- end
45
-
46
- describe 'sidekiq rails extensions configuration' do
47
- before do
48
- @options = Sidekiq.options
49
- end
50
-
51
- after do
52
- Sidekiq.options = @options
53
- end
54
-
55
- it 'should set enable_rails_extensions option to true by default' do
56
- assert Sidekiq.options[:enable_rails_extensions]
57
- end
58
-
59
- it 'should extend ActiveRecord and ActiveMailer if enable_rails_extensions is true' do
60
- assert Sidekiq.hook_rails!
61
- end
62
-
63
- it 'should not extend ActiveRecord and ActiveMailer if enable_rails_extensions is false' do
64
- Sidekiq.options = { :enable_rails_extensions => false }
65
- refute Sidekiq.hook_rails!
66
- end
67
- end
68
- end
data/test/test_manager.rb DELETED
@@ -1,43 +0,0 @@
1
- require 'helper'
2
- require 'sidekiq'
3
- require 'sidekiq/manager'
4
-
5
- # for TimedQueue
6
- require 'connection_pool'
7
-
8
- class TestManager < MiniTest::Unit::TestCase
9
- describe 'with redis' do
10
- before do
11
- Sidekiq.redis = REDIS
12
- Sidekiq.redis.flushdb
13
- $processed = 0
14
- $mutex = Mutex.new
15
- end
16
-
17
- class IntegrationWorker
18
- include Sidekiq::Worker
19
-
20
- def perform(a, b)
21
- $mutex.synchronize do
22
- $processed += 1
23
- end
24
- a + b
25
- end
26
- end
27
-
28
- it 'processes messages' do
29
- Sidekiq::Client.push(:foo, 'class' => IntegrationWorker, 'args' => [1, 2])
30
- Sidekiq::Client.push(:foo, 'class' => IntegrationWorker, 'args' => [1, 3])
31
-
32
- q = TimedQueue.new
33
- mgr = Sidekiq::Manager.new(:queues => [:foo], :concurrency => 2)
34
- mgr.when_done do |_|
35
- q << 'done' if $processed == 2
36
- end
37
- mgr.start!
38
- result = q.timed_pop(1.0)
39
- assert_equal 'done', result
40
- mgr.stop
41
- end
42
- end
43
- end
@@ -1,92 +0,0 @@
1
- require 'helper'
2
- require 'sidekiq/middleware/chain'
3
- require 'sidekiq/middleware/server/unique_jobs'
4
- require 'sidekiq/processor'
5
-
6
- class TestMiddleware < MiniTest::Unit::TestCase
7
- describe 'middleware chain' do
8
- before do
9
- $errors = []
10
- Sidekiq.redis = REDIS
11
- end
12
-
13
- it 'handles errors' do
14
- handler = Sidekiq::Middleware::Server::ExceptionHandler.new
15
-
16
- assert_raises ArgumentError do
17
- handler.call('', { :a => 1 }, 'default') do
18
- raise ArgumentError
19
- end
20
- end
21
- assert_equal 1, $errors.size
22
- assert_equal({ :a => 1 }, $errors[0][:parameters])
23
- end
24
-
25
- class CustomMiddleware
26
- def initialize(name, recorder)
27
- @name = name
28
- @recorder = recorder
29
- end
30
-
31
- def call(*args)
32
- @recorder << [@name, 'before']
33
- yield
34
- @recorder << [@name, 'after']
35
- end
36
- end
37
-
38
- it 'supports custom middleware' do
39
- chain = Sidekiq::Middleware::Chain.new
40
- chain.add CustomMiddleware, 1, []
41
-
42
- assert_equal CustomMiddleware, chain.entries.last.klass
43
- end
44
-
45
- class CustomWorker
46
- include Sidekiq::Worker
47
- def perform(recorder)
48
- recorder << ['work_performed']
49
- end
50
- end
51
-
52
- class NonYieldingMiddleware
53
- def call(*args)
54
- end
55
- end
56
-
57
- it 'executes middleware in the proper order' do
58
- recorder = []
59
- msg = { 'class' => CustomWorker.to_s, 'args' => [recorder] }
60
-
61
- Sidekiq.server_middleware do |chain|
62
- # should only add once, second should be ignored
63
- 2.times { |i| chain.add CustomMiddleware, i.to_s, recorder }
64
- end
65
-
66
- boss = MiniTest::Mock.new
67
- processor = Sidekiq::Processor.new(boss)
68
- boss.expect(:processor_done!, nil, [processor])
69
- processor.process(msg, 'default')
70
- assert_equal %w(0 before work_performed 0 after), recorder.flatten
71
- end
72
-
73
- it 'allows middleware to abruptly stop processing rest of chain' do
74
- recorder = []
75
- chain = Sidekiq::Middleware::Chain.new
76
- chain.add NonYieldingMiddleware
77
- chain.add CustomMiddleware, 1, recorder
78
-
79
- final_action = nil
80
- chain.invoke { final_action = true }
81
- assert_equal nil, final_action
82
- assert_equal [], recorder
83
- end
84
- end
85
- end
86
-
87
- class FakeAirbrake
88
- def self.notify(ex, hash)
89
- $errors << hash
90
- end
91
- end
92
- Airbrake = FakeAirbrake
@@ -1,32 +0,0 @@
1
- require 'helper'
2
- require 'sidekiq/processor'
3
-
4
- class TestProcessor < MiniTest::Unit::TestCase
5
- describe 'with mock setup' do
6
- before do
7
- $invokes = 0
8
- $errors = []
9
- @boss = MiniTest::Mock.new
10
- Celluloid.logger = nil
11
- Sidekiq.redis = REDIS
12
- end
13
-
14
- class MockWorker
15
- include Sidekiq::Worker
16
- def perform(args)
17
- raise "kerboom!" if args == 'boom'
18
- $invokes += 1
19
- end
20
- end
21
-
22
- it 'processes as expected' do
23
- msg = { 'class' => MockWorker.to_s, 'args' => ['myarg'] }
24
- processor = ::Sidekiq::Processor.new(@boss)
25
- @boss.expect(:processor_done!, nil, [processor])
26
- processor.process(msg, 'default')
27
- @boss.verify
28
- assert_equal 1, $invokes
29
- assert_equal 0, $errors.size
30
- end
31
- end
32
- end
data/test/test_retry.rb DELETED
@@ -1,83 +0,0 @@
1
- require 'helper'
2
- require 'sidekiq/retry'
3
- require 'sidekiq/middleware/server/retry_jobs'
4
-
5
- class TestRetry < MiniTest::Unit::TestCase
6
- describe 'middleware' do
7
- before do
8
- @redis = MiniTest::Mock.new
9
- # Ugh, this is terrible.
10
- Sidekiq.instance_variable_set(:@redis, @redis)
11
-
12
- def @redis.with; yield self; end
13
- end
14
-
15
- it 'handles a new failed message' do
16
- @redis.expect :zadd, 1, ['retry', String, String]
17
- msg = { 'class' => 'Bob', 'args' => [1,2,'foo'] }
18
- handler = Sidekiq::Middleware::Server::RetryJobs.new
19
- assert_raises RuntimeError do
20
- handler.call('', msg, 'default') do
21
- raise "kerblammo!"
22
- end
23
- end
24
- assert_equal 'default', msg["queue"]
25
- assert_equal 'kerblammo!', msg["error_message"]
26
- assert_equal 'RuntimeError', msg["error_class"]
27
- assert_equal 0, msg["retry_count"]
28
- assert msg["failed_at"]
29
- @redis.verify
30
- end
31
-
32
- it 'handles a recurring failed message' do
33
- @redis.expect :zadd, 1, ['retry', String, String]
34
- now = Time.now.utc
35
- msg = {"class"=>"Bob", "args"=>[1, 2, "foo"], "queue"=>"default", "error_message"=>"kerblammo!", "error_class"=>"RuntimeError", "failed_at"=>now, "retry_count"=>10}
36
- handler = Sidekiq::Middleware::Server::RetryJobs.new
37
- assert_raises RuntimeError do
38
- handler.call('', msg, 'default') do
39
- raise "kerblammo!"
40
- end
41
- end
42
- assert_equal 'default', msg["queue"]
43
- assert_equal 'kerblammo!', msg["error_message"]
44
- assert_equal 'RuntimeError', msg["error_class"]
45
- assert_equal 11, msg["retry_count"]
46
- assert msg["failed_at"]
47
- @redis.verify
48
- end
49
-
50
- it 'throws away old messages after too many retries' do
51
- now = Time.now.utc
52
- msg = {"class"=>"Bob", "args"=>[1, 2, "foo"], "queue"=>"default", "error_message"=>"kerblammo!", "error_class"=>"RuntimeError", "failed_at"=>now, "retry_count"=>25}
53
- handler = Sidekiq::Middleware::Server::RetryJobs.new
54
- assert_raises RuntimeError do
55
- handler.call('', msg, 'default') do
56
- raise "kerblammo!"
57
- end
58
- end
59
- @redis.verify
60
- end
61
- end
62
-
63
- describe 'poller' do
64
- before do
65
- @redis = MiniTest::Mock.new
66
- Sidekiq.instance_variable_set(:@redis, @redis)
67
-
68
- def @redis.with; yield self; end
69
- end
70
-
71
- it 'should poll like a bad mother...SHUT YO MOUTH' do
72
- fake_msg = MultiJson.encode({ 'class' => 'Bob', 'args' => [1,2], 'queue' => 'someq' })
73
- @redis.expect :multi, [[fake_msg], 1], []
74
- @redis.expect :rpush, 1, ['queue:someq', fake_msg]
75
-
76
- inst = Sidekiq::Retry::Poller.new
77
- inst.poll
78
-
79
- @redis.verify
80
- end
81
- end
82
-
83
- end
data/test/test_stats.rb DELETED
@@ -1,78 +0,0 @@
1
- require 'helper'
2
- require 'sidekiq'
3
- require 'sidekiq/processor'
4
-
5
- class TestStats < MiniTest::Unit::TestCase
6
- describe 'with redis' do
7
- before do
8
- @redis = Sidekiq.redis = REDIS
9
- Sidekiq.redis.flushdb
10
- end
11
-
12
- class DumbWorker
13
- include Sidekiq::Worker
14
-
15
- def perform(arg)
16
- raise 'bang' if arg == nil
17
- end
18
- end
19
-
20
- it 'updates global stats in the success case' do
21
- msg = { 'class' => DumbWorker.to_s, 'args' => [""] }
22
- boss = MiniTest::Mock.new
23
-
24
- @redis.with do |conn|
25
-
26
- set = conn.smembers('workers')
27
- assert_equal 0, set.size
28
-
29
- processor = Sidekiq::Processor.new(boss)
30
- boss.expect(:processor_done!, nil, [processor])
31
-
32
- # adds to the workers set upon initialize
33
- set = conn.smembers('workers')
34
- assert_equal 1, set.size
35
- assert_match(/#{Regexp.escape(`hostname`.strip)}/, set.first)
36
-
37
- assert_equal 0, conn.get('stat:failed').to_i
38
- assert_equal 0, conn.get('stat:processed').to_i
39
- assert_equal 0, conn.get("stat:processed:#{processor}").to_i
40
-
41
- processor.process(msg, 'xyzzy')
42
- processor.process(msg, 'xyzzy')
43
- processor.process(msg, 'xyzzy')
44
-
45
- set = conn.smembers('workers')
46
- assert_equal 1, set.size
47
- assert_match(/#{Regexp.escape(`hostname`.strip)}/, set.first)
48
- assert_equal 0, conn.get('stat:failed').to_i
49
- assert_equal 3, conn.get('stat:processed').to_i
50
- assert_equal 3, conn.get("stat:processed:#{processor}").to_i
51
- end
52
- end
53
-
54
- it 'updates global stats in the error case' do
55
- msg = { 'class' => DumbWorker.to_s, 'args' => [nil] }
56
- boss = MiniTest::Mock.new
57
-
58
- assert_equal [], @redis.smembers('workers')
59
- assert_equal 0, @redis.get('stat:failed').to_i
60
- assert_equal 0, @redis.get('stat:processed').to_i
61
-
62
- processor = Sidekiq::Processor.new(boss)
63
- assert_equal 1, @redis.smembers('workers').size
64
-
65
- pstr = processor.to_s
66
- assert_raises RuntimeError do
67
- processor.process(msg, 'xyzzy')
68
- end
69
-
70
- set = @redis.smembers('workers')
71
- assert_equal 0, set.size
72
- assert_equal 1, @redis.get('stat:failed').to_i
73
- assert_equal 1, @redis.get('stat:processed').to_i
74
- assert_equal nil, @redis.get("stat:processed:#{pstr}")
75
- end
76
-
77
- end
78
- end
data/test/test_testing.rb DELETED
@@ -1,65 +0,0 @@
1
- require 'helper'
2
- require 'sidekiq'
3
- require 'sidekiq/worker'
4
- require 'active_record'
5
- require 'action_mailer'
6
- require 'sidekiq/extensions/action_mailer'
7
- require 'sidekiq/extensions/active_record'
8
-
9
- Sidekiq.hook_rails!
10
-
11
- class TestTesting < MiniTest::Unit::TestCase
12
- describe 'sidekiq testing' do
13
-
14
- class DirectWorker
15
- include Sidekiq::Worker
16
- def perform(a, b)
17
- a + b
18
- end
19
- end
20
-
21
- class FooMailer < ActionMailer::Base
22
- def bar(str)
23
- str
24
- end
25
- end
26
-
27
- class FooModel < ActiveRecord::Base
28
- def bar(str)
29
- str
30
- end
31
- end
32
-
33
- before do
34
- require 'sidekiq/testing'
35
- end
36
-
37
- after do
38
- # Undo override
39
- Sidekiq::Worker::ClassMethods.class_eval do
40
- remove_method :perform_async
41
- alias_method :perform_async, :perform_async_old
42
- remove_method :perform_async_old
43
- end
44
- end
45
-
46
- it 'stubs the async call when in testing mode' do
47
- # We can only have one it block here so all 'testing' tests
48
- # have to go here because require 'sidekiq/testing' changes
49
- # how Sidekiq works and we need to roll back those changes
50
- # when the test is done.
51
- assert_equal 0, DirectWorker.jobs.size
52
- assert DirectWorker.perform_async(1, 2)
53
- assert_equal 1, DirectWorker.jobs.size
54
-
55
- assert_equal 0, Sidekiq::Extensions::DelayedMailer.jobs.size
56
- FooMailer.delay.bar('hello!')
57
- assert_equal 1, Sidekiq::Extensions::DelayedMailer.jobs.size
58
-
59
- assert_equal 0, Sidekiq::Extensions::DelayedModel.jobs.size
60
- FooModel.delay.bar('hello!')
61
- assert_equal 1, Sidekiq::Extensions::DelayedModel.jobs.size
62
- end
63
-
64
- end
65
- end
data/test/test_web.rb DELETED
@@ -1,61 +0,0 @@
1
- require 'helper'
2
- require 'sidekiq'
3
- require 'sidekiq/web'
4
- require 'rack/test'
5
-
6
- class TestWeb < MiniTest::Unit::TestCase
7
- describe 'sidekiq web' do
8
- include Rack::Test::Methods
9
-
10
- def app
11
- Sidekiq::Web
12
- end
13
-
14
- before do
15
- Sidekiq.redis = REDIS
16
- Sidekiq.redis.flushdb
17
- end
18
-
19
- class WebWorker
20
- include Sidekiq::Worker
21
-
22
- def perform(a, b)
23
- a + b
24
- end
25
- end
26
-
27
- it 'shows active queues' do
28
- get '/'
29
- assert_equal 200, last_response.status
30
- assert_match last_response.body, /Sidekiq is down/
31
- refute_match last_response.body, /default/
32
-
33
- assert WebWorker.perform_async(1, 2)
34
-
35
- get '/'
36
- assert_equal 200, last_response.status
37
- assert_match last_response.body, /Sidekiq is down/
38
- assert_match last_response.body, /default/
39
- refute_match last_response.body, /foo/
40
-
41
- assert Sidekiq::Client.push(:foo, 'class' => WebWorker, 'args' => [1, 3])
42
-
43
- get '/'
44
- assert_equal 200, last_response.status
45
- assert_match last_response.body, /Sidekiq is down/
46
- assert_match last_response.body, /default/
47
- assert_match last_response.body, /foo/
48
- end
49
-
50
- it 'handles queues with no name' do
51
- get '/queues'
52
- assert_equal 404, last_response.status
53
- end
54
-
55
- it 'handles queue view' do
56
- get '/queues/default'
57
- assert_equal 200, last_response.status
58
- end
59
-
60
- end
61
- end
@@ -1,91 +0,0 @@
1
- /* ==========================================================
2
- * bootstrap-alert.js v2.0.0
3
- * http://twitter.github.com/bootstrap/javascript.html#alerts
4
- * ==========================================================
5
- * Copyright 2012 Twitter, Inc.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the "License");
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
18
- * ========================================================== */
19
-
20
-
21
- !function( $ ){
22
-
23
- "use strict"
24
-
25
- /* ALERT CLASS DEFINITION
26
- * ====================== */
27
-
28
- var dismiss = '[data-dismiss="alert"]'
29
- , Alert = function ( el ) {
30
- $(el).on('click', dismiss, this.close)
31
- }
32
-
33
- Alert.prototype = {
34
-
35
- constructor: Alert
36
-
37
- , close: function ( e ) {
38
- var $this = $(this)
39
- , selector = $this.attr('data-target')
40
- , $parent
41
-
42
- if (!selector) {
43
- selector = $this.attr('href')
44
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
45
- }
46
-
47
- $parent = $(selector)
48
- $parent.trigger('close')
49
-
50
- e && e.preventDefault()
51
-
52
- $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
53
-
54
- $parent.removeClass('in')
55
-
56
- function removeElement() {
57
- $parent.remove()
58
- $parent.trigger('closed')
59
- }
60
-
61
- $.support.transition && $parent.hasClass('fade') ?
62
- $parent.on($.support.transition.end, removeElement) :
63
- removeElement()
64
- }
65
-
66
- }
67
-
68
-
69
- /* ALERT PLUGIN DEFINITION
70
- * ======================= */
71
-
72
- $.fn.alert = function ( option ) {
73
- return this.each(function () {
74
- var $this = $(this)
75
- , data = $this.data('alert')
76
- if (!data) $this.data('alert', (data = new Alert(this)))
77
- if (typeof option == 'string') data[option].call($this)
78
- })
79
- }
80
-
81
- $.fn.alert.Constructor = Alert
82
-
83
-
84
- /* ALERT DATA-API
85
- * ============== */
86
-
87
- $(function () {
88
- $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
89
- })
90
-
91
- }( window.jQuery )