rocketjob 1.3.0 → 2.0.0.rc1

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.
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