rocketjob 1.3.0 → 2.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +201 -0
  3. data/README.md +15 -10
  4. data/bin/rocketjob +3 -1
  5. data/bin/rocketjob_perf +92 -0
  6. data/lib/rocket_job/cli.rb +71 -31
  7. data/lib/rocket_job/config.rb +21 -23
  8. data/lib/rocket_job/dirmon_entry.rb +63 -45
  9. data/lib/rocket_job/extensions/aasm.rb +56 -0
  10. data/lib/rocket_job/extensions/mongo.rb +23 -0
  11. data/lib/rocket_job/job.rb +9 -433
  12. data/lib/rocket_job/jobs/dirmon_job.rb +20 -20
  13. data/lib/rocket_job/jobs/simple_job.rb +12 -0
  14. data/lib/rocket_job/plugins/document.rb +69 -0
  15. data/lib/rocket_job/plugins/job/callbacks.rb +92 -0
  16. data/lib/rocket_job/plugins/job/defaults.rb +40 -0
  17. data/lib/rocket_job/plugins/job/logger.rb +36 -0
  18. data/lib/rocket_job/plugins/job/model.rb +288 -0
  19. data/lib/rocket_job/plugins/job/persistence.rb +167 -0
  20. data/lib/rocket_job/plugins/job/state_machine.rb +166 -0
  21. data/lib/rocket_job/plugins/job/worker.rb +167 -0
  22. data/lib/rocket_job/plugins/restart.rb +54 -0
  23. data/lib/rocket_job/plugins/singleton.rb +26 -0
  24. data/lib/rocket_job/plugins/state_machine.rb +105 -0
  25. data/lib/rocket_job/version.rb +1 -1
  26. data/lib/rocket_job/worker.rb +150 -119
  27. data/lib/rocketjob.rb +43 -21
  28. data/test/config_test.rb +12 -0
  29. data/test/dirmon_entry_test.rb +81 -85
  30. data/test/dirmon_job_test.rb +40 -28
  31. data/test/job_test.rb +14 -257
  32. data/test/plugins/job/callbacks_test.rb +163 -0
  33. data/test/plugins/job/defaults_test.rb +52 -0
  34. data/test/plugins/job/logger_test.rb +58 -0
  35. data/test/plugins/job/model_test.rb +97 -0
  36. data/test/plugins/job/persistence_test.rb +81 -0
  37. data/test/plugins/job/state_machine_test.rb +118 -0
  38. data/test/plugins/job/worker_test.rb +183 -0
  39. data/test/plugins/restart_test.rb +185 -0
  40. data/test/plugins/singleton_test.rb +94 -0
  41. data/test/plugins/state_machine_event_callbacks_test.rb +101 -0
  42. data/test/plugins/state_machine_test.rb +64 -0
  43. data/test/test_helper.rb +3 -36
  44. metadata +64 -19
  45. data/lib/rocket_job/concerns/singleton.rb +0 -33
  46. data/lib/rocket_job/concerns/worker.rb +0 -214
  47. data/test/files/_archive/archived.txt +0 -3
  48. data/test/job_worker_test.rb +0 -86
  49. data/test/jobs/test_job.rb +0 -46
  50. data/test/worker_test.rb +0 -97
@@ -1,86 +0,0 @@
1
- require_relative 'test_helper'
2
- require_relative 'jobs/test_job'
3
-
4
- # Unit Test for RocketJob::Job
5
- class WorkerTest < Minitest::Test
6
- describe RocketJob::Job do
7
- [true, false].each do |inline_mode|
8
- before do
9
- RocketJob::Config.inline_mode = inline_mode
10
-
11
- @worker = RocketJob::Worker.new
12
- @worker.started
13
- end
14
-
15
- after do
16
- @job.destroy if @job && !@job.new_record?
17
- RocketJob::Config.inline_mode = false
18
- end
19
-
20
- describe '.perform_later' do
21
- it "process single request (inline_mode=#{inline_mode})" do
22
- @job = Jobs::TestJob.perform_later(1) do |job|
23
- job.destroy_on_complete = false
24
- end
25
- assert_nil @job.worker_name
26
- assert_nil @job.completed_at
27
- assert @job.created_at
28
- assert_nil @job.description
29
- assert_equal false, @job.destroy_on_complete
30
- assert_nil @job.expires_at
31
- assert_equal 0, @job.percent_complete
32
- assert_equal 51, @job.priority
33
- assert_equal 0, @job.failure_count
34
- assert_nil @job.run_at
35
- assert_nil @job.started_at
36
- assert_equal :queued, @job.state
37
-
38
- @job.worker_name = 'me'
39
- @job.start
40
- assert_equal false, @job.work(@worker), @job.exception.inspect
41
- assert_equal true, @job.completed?
42
- assert_equal 2, Jobs::TestJob.result
43
-
44
- assert_nil @job.worker_name
45
- assert @job.completed_at
46
- assert @job.created_at
47
- assert_nil @job.description
48
- assert_equal false, @job.destroy_on_complete
49
- assert_nil @job.expires_at
50
- assert_equal 100, @job.percent_complete
51
- assert_equal 51, @job.priority
52
- assert_equal 0, @job.failure_count
53
- assert_nil @job.run_at
54
- assert @job.started_at
55
- end
56
- end
57
-
58
- describe '.later' do
59
- it "process non default method (inline_mode=#{inline_mode})" do
60
- @job = Jobs::TestJob.later(:sum, 23, 45)
61
- @job.start
62
- assert_equal false, @job.work(@worker), @job.exception.inspect
63
- assert_equal true, @job.completed?
64
- assert_equal 68, Jobs::TestJob.result
65
- end
66
- end
67
-
68
- describe '.perform_now' do
69
- it "process perform (inline_mode=#{inline_mode})" do
70
- @job = Jobs::TestJob.perform_now(5)
71
- assert_equal true, @job.completed?
72
- assert_equal 6, Jobs::TestJob.result
73
- end
74
- end
75
-
76
- describe '.now' do
77
- it "process non default method (inline_mode=#{inline_mode})" do
78
- @job = Jobs::TestJob.now(:sum, 23, 45)
79
- assert_equal true, @job.completed?, @job.inspect
80
- assert_equal 68, Jobs::TestJob.result
81
- end
82
- end
83
-
84
- end
85
- end
86
- end
@@ -1,46 +0,0 @@
1
- require 'rocketjob'
2
- module Jobs
3
- class TestJob < RocketJob::Job
4
- rocket_job do |job|
5
- job.priority = 51
6
- end
7
-
8
- @@result = nil
9
-
10
- # For holding test results
11
- def self.result
12
- @@result
13
- end
14
-
15
- def perform(first)
16
- @@result = first + 1
17
- end
18
-
19
- def sum(a, b)
20
- @@result = a + b
21
- end
22
-
23
- # Test silencing noisy logging
24
- def noisy_logger
25
- logger.info 'some very noisy logging'
26
- end
27
-
28
- # Test increasing log level for debugging purposes
29
- def debug_logging
30
- logger.trace 'enable tracing level for just the job instance'
31
- end
32
-
33
- def before_event(hash)
34
- hash['before_event'] = true
35
- end
36
-
37
- def event(hash)
38
- hash['event'] = true
39
- end
40
-
41
- def after_event(hash)
42
- hash['after_event'] = true
43
- end
44
-
45
- end
46
- end
data/test/worker_test.rb DELETED
@@ -1,97 +0,0 @@
1
- require_relative 'test_helper'
2
- require_relative 'jobs/test_job'
3
-
4
- # Unit Test for RocketJob::Worker
5
- class WorkerTest < Minitest::Test
6
- describe RocketJob::Worker do
7
- before do
8
- RocketJob::Config.instance.heartbeat_seconds = 0.1
9
- RocketJob::Config.instance.max_poll_seconds = 0.1
10
-
11
- @worker = RocketJob::Worker.new
12
- @description = 'Hello World'
13
- @arguments = [1]
14
- @job = Jobs::TestJob.new(
15
- description: @description,
16
- arguments: @arguments,
17
- destroy_on_complete: false
18
- )
19
- end
20
-
21
- after do
22
- @job.destroy if @job && !@job.new_record?
23
- @worker.destroy if @worker && !@worker.new_record?
24
- end
25
-
26
- describe '.config' do
27
- it 'support multiple databases' do
28
- assert_equal 'test_rocketjob', RocketJob::Job.collection.db.name
29
- end
30
- end
31
-
32
- describe '#run' do
33
- it 'run a worker' do
34
- Thread.new do
35
- sleep 1
36
- @worker.stop!
37
- end
38
- @worker.run
39
- assert_equal :stopping, @worker.state, @worker.inspect
40
- end
41
- end
42
-
43
- describe '#zombie?' do
44
- before do
45
- RocketJob::Config.instance.heartbeat_seconds = 1
46
- end
47
-
48
- it 'when not a zombie' do
49
- @worker.build_heartbeat(
50
- updated_at: 2.seconds.ago,
51
- current_threads: 3
52
- )
53
- @worker.started!
54
- assert_equal false, @worker.zombie?
55
- assert_equal false, @worker.zombie?(4)
56
- assert_equal true, @worker.zombie?(1)
57
- end
58
-
59
- it 'when a zombie' do
60
- @worker.build_heartbeat(
61
- updated_at: 1.hour.ago,
62
- current_threads: 5
63
- )
64
- @worker.started!
65
- assert_equal true, @worker.zombie?
66
- end
67
- end
68
-
69
- describe '.destroy_zombies' do
70
- before do
71
- RocketJob::Config.instance.heartbeat_seconds = 1
72
- end
73
-
74
- it 'when not a zombie' do
75
- @worker.build_heartbeat(
76
- updated_at: 2.seconds.ago,
77
- current_threads: 3
78
- )
79
- @worker.started!
80
- assert_equal 0, RocketJob::Worker.destroy_zombies
81
- assert_equal true, RocketJob::Worker.where(id: @worker.id).exist?
82
- end
83
-
84
- it 'when a zombie' do
85
- @worker.build_heartbeat(
86
- updated_at: 10.seconds.ago,
87
- current_threads: 3
88
- )
89
- @worker.started!
90
- assert_equal 1, RocketJob::Worker.destroy_zombies
91
- assert_equal false, RocketJob::Worker.where(id: @worker.id).exist?
92
- end
93
-
94
- end
95
-
96
- end
97
- end